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