xref: /plugin/approve/action/notification.php (revision c7d53eaba29e207f5d28ea550cd66a04c154a49d)
1*c7d53eabSSzymon Olewniczak<?php
2*c7d53eabSSzymon Olewniczak// must be run within DokuWiki
3*c7d53eabSSzymon Olewniczakif (!defined('DOKU_INC')) die();
4*c7d53eabSSzymon Olewniczak
5*c7d53eabSSzymon Olewniczakif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
6*c7d53eabSSzymon Olewniczakrequire_once DOKU_PLUGIN . 'syntax.php';
7*c7d53eabSSzymon Olewniczak
8*c7d53eabSSzymon Olewniczak/**
9*c7d53eabSSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism
10*c7d53eabSSzymon Olewniczak * need to inherit from this class
11*c7d53eabSSzymon Olewniczak */
12*c7d53eabSSzymon Olewniczakclass action_plugin_approve_notification extends DokuWiki_Action_Plugin
13*c7d53eabSSzymon Olewniczak{
14*c7d53eabSSzymon Olewniczak    public function register(Doku_Event_Handler $controller)
15*c7d53eabSSzymon Olewniczak    {
16*c7d53eabSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'add_notifications_source');
17*c7d53eabSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'add_notifications');
18*c7d53eabSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'add_notification_cache_dependencies');
19*c7d53eabSSzymon Olewniczak
20*c7d53eabSSzymon Olewniczak
21*c7d53eabSSzymon Olewniczak    }
22*c7d53eabSSzymon Olewniczak
23*c7d53eabSSzymon Olewniczak    public function add_notifications_source(Doku_Event $event)
24*c7d53eabSSzymon Olewniczak    {
25*c7d53eabSSzymon Olewniczak        $event->data[] = 'approve';
26*c7d53eabSSzymon Olewniczak    }
27*c7d53eabSSzymon Olewniczak
28*c7d53eabSSzymon Olewniczak    public function add_notification_cache_dependencies(Doku_Event $event)
29*c7d53eabSSzymon Olewniczak    {
30*c7d53eabSSzymon Olewniczak        if (!in_array('approve', $event->data['plugins'])) return;
31*c7d53eabSSzymon Olewniczak
32*c7d53eabSSzymon Olewniczak        /** @var \helper_plugin_ireadit_db $db_helper */
33*c7d53eabSSzymon Olewniczak        $db_helper = plugin_load('helper', 'approve_db');
34*c7d53eabSSzymon Olewniczak        $event->data['dependencies'][] = $db_helper->getDB()->getAdapter()->getDbFile();
35*c7d53eabSSzymon Olewniczak    }
36*c7d53eabSSzymon Olewniczak
37*c7d53eabSSzymon Olewniczak    public function add_notifications(Doku_Event $event)
38*c7d53eabSSzymon Olewniczak    {
39*c7d53eabSSzymon Olewniczak        if (!in_array('approve', $event->data['plugins'])) return;
40*c7d53eabSSzymon Olewniczak
41*c7d53eabSSzymon Olewniczak        /** @var \helper_plugin_ireadit_db $db_helper */
42*c7d53eabSSzymon Olewniczak        $db_helper = plugin_load('helper', 'approve_db');
43*c7d53eabSSzymon Olewniczak        $sqlite = $db_helper->getDB();
44*c7d53eabSSzymon Olewniczak
45*c7d53eabSSzymon Olewniczak        $user = $event->data['user'];
46*c7d53eabSSzymon Olewniczak
47*c7d53eabSSzymon Olewniczak        $q = 'SELECT page.page, revision.rev
48*c7d53eabSSzymon Olewniczak                    FROM page INNER JOIN revision ON page.page = revision.page
49*c7d53eabSSzymon Olewniczak                    WHERE page.hidden = 0 AND page.	maintainer=?
50*c7d53eabSSzymon Olewniczak                      AND revision.current=1 AND revision.approved IS NULL';
51*c7d53eabSSzymon Olewniczak        $res = $sqlite->query($q, $user);
52*c7d53eabSSzymon Olewniczak
53*c7d53eabSSzymon Olewniczak        $notifications = $sqlite->res2arr($res);
54*c7d53eabSSzymon Olewniczak
55*c7d53eabSSzymon Olewniczak        foreach ($notifications as $notification) {
56*c7d53eabSSzymon Olewniczak            $page = $notification['page'];
57*c7d53eabSSzymon Olewniczak            $rev = $notification['rev'];
58*c7d53eabSSzymon Olewniczak
59*c7d53eabSSzymon Olewniczak            $link = '<a class="wikilink1" href="' . wl($page) . '">';
60*c7d53eabSSzymon Olewniczak            if (useHeading('content')) {
61*c7d53eabSSzymon Olewniczak                $heading = p_get_first_heading($page);
62*c7d53eabSSzymon Olewniczak                if (!blank($heading)) {
63*c7d53eabSSzymon Olewniczak                    $link .= $heading;
64*c7d53eabSSzymon Olewniczak                } else {
65*c7d53eabSSzymon Olewniczak                    $link .= noNSorNS($page);
66*c7d53eabSSzymon Olewniczak                }
67*c7d53eabSSzymon Olewniczak            } else {
68*c7d53eabSSzymon Olewniczak                $link .= noNSorNS($page);
69*c7d53eabSSzymon Olewniczak            }
70*c7d53eabSSzymon Olewniczak            $link .= '</a>';
71*c7d53eabSSzymon Olewniczak            $full = sprintf($this->getLang('notification full'), $link);
72*c7d53eabSSzymon Olewniczak            $event->data['notifications'][] = [
73*c7d53eabSSzymon Olewniczak                'plugin' => 'ireadit',
74*c7d53eabSSzymon Olewniczak                'full' => $full,
75*c7d53eabSSzymon Olewniczak                'brief' => $link,
76*c7d53eabSSzymon Olewniczak                'timestamp' => (int)$rev
77*c7d53eabSSzymon Olewniczak            ];
78*c7d53eabSSzymon Olewniczak        }
79*c7d53eabSSzymon Olewniczak    }
80*c7d53eabSSzymon Olewniczak}
81