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; 26*d2cf7c78SSzymon 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 35*d2cf7c78SSzymon Olewniczak /** @var helper_plugin_ireadit $helper */ 36*d2cf7c78SSzymon Olewniczak $helper = $this->loadHelper('ireadit'); 37*d2cf7c78SSzymon Olewniczak $pages = $helper->get_list($user); 385f08124fSSzymon Olewniczak 39*d2cf7c78SSzymon Olewniczak foreach ($pages as $page => $row) { 40*d2cf7c78SSzymon Olewniczak if ($row['state'] == 'read') continue; 415f08124fSSzymon Olewniczak 42466d66feSSzymon Olewniczak $link = '<a class="wikilink1" href="' . wl($page, '', true) . '">'; 435f08124fSSzymon Olewniczak if (useHeading('content')) { 445f08124fSSzymon Olewniczak $heading = p_get_first_heading($page); 455f08124fSSzymon Olewniczak if (!blank($heading)) { 465f08124fSSzymon Olewniczak $link .= $heading; 475f08124fSSzymon Olewniczak } else { 485f08124fSSzymon Olewniczak $link .= noNSorNS($page); 495f08124fSSzymon Olewniczak } 505f08124fSSzymon Olewniczak } else { 515f08124fSSzymon Olewniczak $link .= noNSorNS($page); 525f08124fSSzymon Olewniczak } 535f08124fSSzymon Olewniczak $link .= '</a>'; 545f08124fSSzymon Olewniczak $full = sprintf($this->getLang('notification full'), $link); 555f08124fSSzymon Olewniczak $event->data['notifications'][] = [ 565f08124fSSzymon Olewniczak 'plugin' => 'ireadit', 57*d2cf7c78SSzymon Olewniczak 'id' => $page . ':' . $row['current_rev'], 585f08124fSSzymon Olewniczak 'full' => $full, 595f08124fSSzymon Olewniczak 'brief' => $link, 60*d2cf7c78SSzymon Olewniczak 'timestamp' => (int) $row['current_rev'] 615f08124fSSzymon Olewniczak ]; 625f08124fSSzymon Olewniczak } 635f08124fSSzymon Olewniczak } 645f08124fSSzymon Olewniczak} 65