xref: /plugin/approve/action/notification.php (revision 1989ee26e4c10d9fe322c2a0aa4ae990f031b47b)
1c7d53eabSSzymon Olewniczak<?php
2b664e7d8SSzymon Olewniczak
3*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\ActionPlugin;
4*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\EventHandler;
5*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event;
6c7d53eabSSzymon Olewniczak
7*1989ee26SSzymon Olewniczakclass action_plugin_approve_notification extends ActionPlugin
8*1989ee26SSzymon Olewniczak{
9c7d53eabSSzymon Olewniczak    /**
10*1989ee26SSzymon Olewniczak     * @inheritDoc
11c7d53eabSSzymon Olewniczak     */
12*1989ee26SSzymon Olewniczak    public function register(EventHandler $controller)
13c7d53eabSSzymon Olewniczak    {
14*1989ee26SSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'addNotificationsSource');
15*1989ee26SSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'addNotifications');
16*1989ee26SSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'addNotificationCacheDependencies');
17c7d53eabSSzymon Olewniczak    }
18c7d53eabSSzymon Olewniczak
19*1989ee26SSzymon Olewniczak    public function addNotificationsSource(Event $event)
20c7d53eabSSzymon Olewniczak    {
21c7d53eabSSzymon Olewniczak        $event->data[] = 'approve';
22c7d53eabSSzymon Olewniczak    }
23c7d53eabSSzymon Olewniczak
24*1989ee26SSzymon Olewniczak    public function addNotificationCacheDependencies(Event $event)
25c7d53eabSSzymon Olewniczak    {
26c7d53eabSSzymon Olewniczak        if (!in_array('approve', $event->data['plugins'])) return;
27c7d53eabSSzymon Olewniczak
28*1989ee26SSzymon Olewniczak        /** @var \helper_plugin_approve_data $db */
29*1989ee26SSzymon Olewniczak        $db = $this->loadHelper('approve_data');
30*1989ee26SSzymon Olewniczak        $event->data['dependencies'][] = $db->getDbFile();
31c7d53eabSSzymon Olewniczak    }
32c7d53eabSSzymon Olewniczak
33*1989ee26SSzymon Olewniczak    public function addNotifications(Event $event)
34c7d53eabSSzymon Olewniczak    {
35c7d53eabSSzymon Olewniczak        if (!in_array('approve', $event->data['plugins'])) return;
36c7d53eabSSzymon Olewniczak
37b664e7d8SSzymon Olewniczak        $user = $event->data['user'];
38*1989ee26SSzymon Olewniczak
39*1989ee26SSzymon Olewniczak        /** @var \helper_plugin_approve_data $db */
40*1989ee26SSzymon Olewniczak        $db = $this->loadHelper('approve_data');
41c7d53eabSSzymon Olewniczak
42b664e7d8SSzymon Olewniczak        $states = ['draft', 'ready_for_approval'];
439b6ad60bSSzymon Olewniczak        if ($this->getConf('ready_for_approval_notification')) {
44b664e7d8SSzymon Olewniczak            $states = ['ready_for_approval'];
459b6ad60bSSzymon Olewniczak        }
46c7d53eabSSzymon Olewniczak
47*1989ee26SSzymon Olewniczak        $notifications = $db->getPages($user, $states);
48c7d53eabSSzymon Olewniczak
49c7d53eabSSzymon Olewniczak        foreach ($notifications as $notification) {
50c7d53eabSSzymon Olewniczak            $page = $notification['page'];
51c7d53eabSSzymon Olewniczak            $rev = $notification['rev'];
52c7d53eabSSzymon Olewniczak
53d2c787dcSSzymon Olewniczak            $link = '<a class="wikilink1" href="' . wl($page, '', true) . '">';
54c7d53eabSSzymon Olewniczak            if (useHeading('content')) {
55c7d53eabSSzymon Olewniczak                $heading = p_get_first_heading($page);
56c7d53eabSSzymon Olewniczak                if (!blank($heading)) {
57c7d53eabSSzymon Olewniczak                    $link .= $heading;
58c7d53eabSSzymon Olewniczak                } else {
59c7d53eabSSzymon Olewniczak                    $link .= noNSorNS($page);
60c7d53eabSSzymon Olewniczak                }
61c7d53eabSSzymon Olewniczak            } else {
62c7d53eabSSzymon Olewniczak                $link .= noNSorNS($page);
63c7d53eabSSzymon Olewniczak            }
64c7d53eabSSzymon Olewniczak            $link .= '</a>';
65c7d53eabSSzymon Olewniczak            $full = sprintf($this->getLang('notification full'), $link);
66c7d53eabSSzymon Olewniczak            $event->data['notifications'][] = [
67e000d14fSSzymon Olewniczak                'plugin' => 'approve',
68d2c787dcSSzymon Olewniczak                'id' => $page.':'.$rev,
69c7d53eabSSzymon Olewniczak                'full' => $full,
70c7d53eabSSzymon Olewniczak                'brief' => $link,
71c7d53eabSSzymon Olewniczak                'timestamp' => (int)$rev
72c7d53eabSSzymon Olewniczak            ];
73c7d53eabSSzymon Olewniczak        }
74c7d53eabSSzymon Olewniczak    }
75c7d53eabSSzymon Olewniczak}
76