]> BookStack Code Mirror - hacks/blob - content/pushover-webhooks/functions.php
Reviewed mermaid viewer hack
[hacks] / content / pushover-webhooks / functions.php
1 <?php
2
3 use BookStack\Activity\Models\Loggable;
4 use BookStack\Activity\Models\Webhook;
5 use BookStack\Activity\Tools\WebhookFormatter;
6 use BookStack\Facades\Theme;
7 use BookStack\Theming\ThemeEvents;
8 use BookStack\Users\Models\User;
9
10 // Format the usual BookStack webhook data into a format that
11 // pushover can accept.
12 function formatWebhookDataForPushover(array $defaultWebhookData): array
13 {
14     // Within here you can define and provide back any of the variables
15     // supported by the pushover API as defined here:
16     // https://pushover.net/api#messages
17     return [
18         // Required
19         'token'   => 'axxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // Replace value with an app/api token/key
20         'user'    => 'uxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // Replace value with user/group key
21         'message' => $defaultWebhookData['text'],
22
23         // Any other optional parameters
24         'url'   => $defaultWebhookData['url'] ?? null,
25         'sound' => 'tugboat',
26     ];
27 }
28
29 // Listen for webhook call events in BookStack, so we can manipulate the
30 // data before it's sent to the webhook endpoint.
31 Theme::listen(ThemeEvents::WEBHOOK_CALL_BEFORE, function (
32     string $event,
33     Webhook $webhook,
34     string|Loggable $detail,
35     User $initiator,
36     int $initTime,
37 ) {
38     // Override the data format if going to a pushover API endpoint
39     if (str_starts_with($webhook->endpoint, 'https://api.pushover.net')) {
40         $defaultData = WebhookFormatter::getDefault($event, $webhook, $detail, $initiator, $initTime);
41         return formatWebhookDataForPushover($defaultData->format());
42     }
43
44     // Otherwise return null to leave the webhook data alone
45     return null;
46 });