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