xref: /plugin/approve/action/notification.php (revision b664e7d8e66992c99cd823001f08842a073db05e)
1c7d53eabSSzymon Olewniczak<?php
2c7d53eabSSzymon Olewniczak// must be run within DokuWiki
3*b664e7d8SSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ApproveMetadata;
4*b664e7d8SSzymon Olewniczak
5c7d53eabSSzymon Olewniczakif (!defined('DOKU_INC')) die();
6c7d53eabSSzymon Olewniczak
7c7d53eabSSzymon Olewniczakif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
8c7d53eabSSzymon Olewniczakrequire_once DOKU_PLUGIN . 'syntax.php';
9c7d53eabSSzymon Olewniczak
10c7d53eabSSzymon Olewniczak/**
11c7d53eabSSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism
12c7d53eabSSzymon Olewniczak * need to inherit from this class
13c7d53eabSSzymon Olewniczak */
14c7d53eabSSzymon Olewniczakclass action_plugin_approve_notification extends DokuWiki_Action_Plugin
15c7d53eabSSzymon Olewniczak{
16c7d53eabSSzymon Olewniczak    public function register(Doku_Event_Handler $controller)
17c7d53eabSSzymon Olewniczak    {
18c7d53eabSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'add_notifications_source');
19c7d53eabSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'add_notifications');
20c7d53eabSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'add_notification_cache_dependencies');
21c7d53eabSSzymon Olewniczak
22c7d53eabSSzymon Olewniczak
23c7d53eabSSzymon Olewniczak    }
24c7d53eabSSzymon Olewniczak
25c7d53eabSSzymon Olewniczak    public function add_notifications_source(Doku_Event $event)
26c7d53eabSSzymon Olewniczak    {
27c7d53eabSSzymon Olewniczak        $event->data[] = 'approve';
28c7d53eabSSzymon Olewniczak    }
29c7d53eabSSzymon Olewniczak
30c7d53eabSSzymon Olewniczak    public function add_notification_cache_dependencies(Doku_Event $event)
31c7d53eabSSzymon Olewniczak    {
32c7d53eabSSzymon Olewniczak        if (!in_array('approve', $event->data['plugins'])) return;
33c7d53eabSSzymon Olewniczak
340c60a293SSzymon Olewniczak        try {
350c60a293SSzymon Olewniczak            /** @var \helper_plugin_approve_db $db_helper */
36c7d53eabSSzymon Olewniczak            $db_helper = plugin_load('helper', 'approve_db');
370c60a293SSzymon Olewniczak            $sqlite = $db_helper->getDB();
380c60a293SSzymon Olewniczak            $event->data['dependencies'][] = $sqlite->getAdapter()->getDbFile();
390c60a293SSzymon Olewniczak        } catch (Exception $e) {
400c60a293SSzymon Olewniczak            msg($e->getMessage(), -1);
410c60a293SSzymon Olewniczak            return;
420c60a293SSzymon Olewniczak        }
43c7d53eabSSzymon Olewniczak    }
44c7d53eabSSzymon Olewniczak
45c7d53eabSSzymon Olewniczak    public function add_notifications(Doku_Event $event)
46c7d53eabSSzymon Olewniczak    {
47c7d53eabSSzymon Olewniczak        if (!in_array('approve', $event->data['plugins'])) return;
48c7d53eabSSzymon Olewniczak
49*b664e7d8SSzymon Olewniczak        $user = $event->data['user'];
500c60a293SSzymon Olewniczak        try {
51*b664e7d8SSzymon Olewniczak            $approveMetadata = new ApproveMetadata();
520c60a293SSzymon Olewniczak        } catch (Exception $e) {
530c60a293SSzymon Olewniczak            msg($e->getMessage(), -1);
540c60a293SSzymon Olewniczak            return;
550c60a293SSzymon Olewniczak        }
56c7d53eabSSzymon Olewniczak
57*b664e7d8SSzymon Olewniczak        $states = ['draft', 'ready_for_approval'];
589b6ad60bSSzymon Olewniczak        if ($this->getConf('ready_for_approval_notification')) {
59*b664e7d8SSzymon Olewniczak            $states = ['ready_for_approval'];
609b6ad60bSSzymon Olewniczak        }
61c7d53eabSSzymon Olewniczak
62*b664e7d8SSzymon Olewniczak        $notifications = $approveMetadata->getPages($user, $states);
63c7d53eabSSzymon Olewniczak
64c7d53eabSSzymon Olewniczak        foreach ($notifications as $notification) {
65c7d53eabSSzymon Olewniczak            $page = $notification['page'];
66c7d53eabSSzymon Olewniczak            $rev = $notification['rev'];
67c7d53eabSSzymon Olewniczak
68d2c787dcSSzymon Olewniczak            $link = '<a class="wikilink1" href="' . wl($page, '', true) . '">';
69c7d53eabSSzymon Olewniczak            if (useHeading('content')) {
70c7d53eabSSzymon Olewniczak                $heading = p_get_first_heading($page);
71c7d53eabSSzymon Olewniczak                if (!blank($heading)) {
72c7d53eabSSzymon Olewniczak                    $link .= $heading;
73c7d53eabSSzymon Olewniczak                } else {
74c7d53eabSSzymon Olewniczak                    $link .= noNSorNS($page);
75c7d53eabSSzymon Olewniczak                }
76c7d53eabSSzymon Olewniczak            } else {
77c7d53eabSSzymon Olewniczak                $link .= noNSorNS($page);
78c7d53eabSSzymon Olewniczak            }
79c7d53eabSSzymon Olewniczak            $link .= '</a>';
80c7d53eabSSzymon Olewniczak            $full = sprintf($this->getLang('notification full'), $link);
81c7d53eabSSzymon Olewniczak            $event->data['notifications'][] = [
82e000d14fSSzymon Olewniczak                'plugin' => 'approve',
83d2c787dcSSzymon Olewniczak                'id' => $page.':'.$rev,
84c7d53eabSSzymon Olewniczak                'full' => $full,
85c7d53eabSSzymon Olewniczak                'brief' => $link,
86c7d53eabSSzymon Olewniczak                'timestamp' => (int)$rev
87c7d53eabSSzymon Olewniczak            ];
88c7d53eabSSzymon Olewniczak        }
89c7d53eabSSzymon Olewniczak    }
90c7d53eabSSzymon Olewniczak}
91