xref: /plugin/ireadit/action/notification.php (revision 13f6c79932364942534c54835bbbb6b994d388d9)
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;
26d2cf7c78SSzymon Olewniczak        $event->data['_nocache'] = true; // TODO: notification cache mechanism should be updated to "Igor" dokuwiki
275f08124fSSzymon Olewniczak    }
285f08124fSSzymon Olewniczak
295f08124fSSzymon Olewniczak    public function add_notifications(Doku_Event $event)
305f08124fSSzymon Olewniczak    {
315f08124fSSzymon Olewniczak        if (!in_array('ireadit', $event->data['plugins'])) return;
325f08124fSSzymon Olewniczak
335f08124fSSzymon Olewniczak        $user = $event->data['user'];
345f08124fSSzymon Olewniczak
35d2cf7c78SSzymon Olewniczak        /** @var helper_plugin_ireadit $helper */
36d2cf7c78SSzymon Olewniczak        $helper = $this->loadHelper('ireadit');
37d2cf7c78SSzymon Olewniczak        $pages = $helper->get_list($user);
385f08124fSSzymon Olewniczak
39d2cf7c78SSzymon Olewniczak        foreach ($pages as $page => $row) {
40d2cf7c78SSzymon Olewniczak            if ($row['state'] == 'read') continue;
415f08124fSSzymon Olewniczak
42*13f6c799SSzymon Olewniczak            $urlParameters = [];
43*13f6c799SSzymon Olewniczak            // in case of approve integration current_rev may be last approved revision
44*13f6c799SSzymon Olewniczak            if ($this->getConf('approve_integration') &&
45*13f6c799SSzymon Olewniczak                $row['current_rev'] != p_get_metadata($page, 'last_change date')) {
46*13f6c799SSzymon Olewniczak                $urlParameters['rev'] = $row['current_rev'];
47*13f6c799SSzymon Olewniczak            }
48*13f6c799SSzymon Olewniczak
49*13f6c799SSzymon Olewniczak            $link = '<a class="wikilink1" href="' . wl($page, $urlParameters, true) . '">';
505f08124fSSzymon Olewniczak            if (useHeading('content')) {
515f08124fSSzymon Olewniczak                $heading = p_get_first_heading($page);
525f08124fSSzymon Olewniczak                if (!blank($heading)) {
535f08124fSSzymon Olewniczak                    $link .= $heading;
545f08124fSSzymon Olewniczak                } else {
555f08124fSSzymon Olewniczak                    $link .= noNSorNS($page);
565f08124fSSzymon Olewniczak                }
575f08124fSSzymon Olewniczak            } else {
585f08124fSSzymon Olewniczak                $link .= noNSorNS($page);
595f08124fSSzymon Olewniczak            }
605f08124fSSzymon Olewniczak            $link .= '</a>';
615f08124fSSzymon Olewniczak            $full = sprintf($this->getLang('notification full'), $link);
625f08124fSSzymon Olewniczak            $event->data['notifications'][] = [
635f08124fSSzymon Olewniczak                'plugin' => 'ireadit',
64d2cf7c78SSzymon Olewniczak                'id' => $page . ':' . $row['current_rev'],
655f08124fSSzymon Olewniczak                'full' => $full,
665f08124fSSzymon Olewniczak                'brief' => $link,
67d2cf7c78SSzymon Olewniczak                'timestamp' => (int) $row['current_rev']
685f08124fSSzymon Olewniczak            ];
695f08124fSSzymon Olewniczak        }
705f08124fSSzymon Olewniczak    }
715f08124fSSzymon Olewniczak}
72