xref: /plugin/ireadit/action/notification.php (revision 466d66fecabc28653ca7a5dd4bf49d3e0cb62685)
15f08124fSSzymon Olewniczak<?php
25f08124fSSzymon Olewniczak// must be run within DokuWiki
35f08124fSSzymon Olewniczakif (!defined('DOKU_INC')) die();
45f08124fSSzymon Olewniczak
55f08124fSSzymon Olewniczak/**
65f08124fSSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism
75f08124fSSzymon Olewniczak * need to inherit from this class
85f08124fSSzymon Olewniczak */
95f08124fSSzymon Olewniczakclass action_plugin_ireadit_notification extends DokuWiki_Action_Plugin
105f08124fSSzymon Olewniczak{
115f08124fSSzymon Olewniczak    public function register(Doku_Event_Handler $controller)
125f08124fSSzymon Olewniczak    {
135f08124fSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'add_notifications_source');
145f08124fSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'add_notifications');
155f08124fSSzymon Olewniczak        $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'add_notification_cache_dependencies');
165f08124fSSzymon Olewniczak    }
175f08124fSSzymon Olewniczak
185f08124fSSzymon Olewniczak    public function add_notifications_source(Doku_Event $event)
195f08124fSSzymon Olewniczak    {
205f08124fSSzymon Olewniczak        $event->data[] = 'ireadit';
215f08124fSSzymon Olewniczak    }
225f08124fSSzymon Olewniczak
235f08124fSSzymon Olewniczak    public function add_notification_cache_dependencies(Doku_Event $event)
245f08124fSSzymon Olewniczak    {
255f08124fSSzymon Olewniczak        if (!in_array('ireadit', $event->data['plugins'])) return;
265f08124fSSzymon Olewniczak
275f08124fSSzymon Olewniczak        /** @var \helper_plugin_ireadit_db $db_helper */
285f08124fSSzymon Olewniczak        $db_helper = plugin_load('helper', 'ireadit_db');
295f08124fSSzymon Olewniczak        $event->data['dependencies'][] = $db_helper->getDB()->getAdapter()->getDbFile();
305f08124fSSzymon Olewniczak    }
315f08124fSSzymon Olewniczak
325f08124fSSzymon Olewniczak    public function add_notifications(Doku_Event $event)
335f08124fSSzymon Olewniczak    {
345f08124fSSzymon Olewniczak        if (!in_array('ireadit', $event->data['plugins'])) return;
355f08124fSSzymon Olewniczak
365f08124fSSzymon Olewniczak        /** @var \helper_plugin_ireadit_db $db_helper */
375f08124fSSzymon Olewniczak        $db_helper = plugin_load('helper', 'ireadit_db');
385f08124fSSzymon Olewniczak        $sqlite = $db_helper->getDB();
395f08124fSSzymon Olewniczak
405f08124fSSzymon Olewniczak        $user = $event->data['user'];
415f08124fSSzymon Olewniczak
425f08124fSSzymon Olewniczak        $res = $sqlite->query('SELECT page, rev FROM ireadit
435f08124fSSzymon Olewniczak                                        WHERE timestamp IS NULL
445f08124fSSzymon Olewniczak                                        AND user = ?
455f08124fSSzymon Olewniczak                                        ORDER BY timestamp', $user);
465f08124fSSzymon Olewniczak
475f08124fSSzymon Olewniczak        $notifications = $sqlite->res2arr($res);
485f08124fSSzymon Olewniczak
495f08124fSSzymon Olewniczak        foreach ($notifications as $notification) {
505f08124fSSzymon Olewniczak            $page = $notification['page'];
515f08124fSSzymon Olewniczak            $rev = $notification['rev'];
525f08124fSSzymon Olewniczak
53*466d66feSSzymon Olewniczak            $link = '<a class="wikilink1" href="' . wl($page, '', true) . '">';
545f08124fSSzymon Olewniczak            if (useHeading('content')) {
555f08124fSSzymon Olewniczak                $heading = p_get_first_heading($page);
565f08124fSSzymon Olewniczak                if (!blank($heading)) {
575f08124fSSzymon Olewniczak                    $link .= $heading;
585f08124fSSzymon Olewniczak                } else {
595f08124fSSzymon Olewniczak                    $link .= noNSorNS($page);
605f08124fSSzymon Olewniczak                }
615f08124fSSzymon Olewniczak            } else {
625f08124fSSzymon Olewniczak                $link .= noNSorNS($page);
635f08124fSSzymon Olewniczak            }
645f08124fSSzymon Olewniczak            $link .= '</a>';
655f08124fSSzymon Olewniczak            $full = sprintf($this->getLang('notification full'), $link);
665f08124fSSzymon Olewniczak            $event->data['notifications'][] = [
675f08124fSSzymon Olewniczak                'plugin' => 'ireadit',
68*466d66feSSzymon Olewniczak                'id' => $page . ':' . $rev,
695f08124fSSzymon Olewniczak                'full' => $full,
705f08124fSSzymon Olewniczak                'brief' => $link,
715f08124fSSzymon Olewniczak                'timestamp' => (int)$rev
725f08124fSSzymon Olewniczak            ];
735f08124fSSzymon Olewniczak        }
745f08124fSSzymon Olewniczak    }
755f08124fSSzymon Olewniczak}
76