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