1*c7d53eabSSzymon Olewniczak<?php 2*c7d53eabSSzymon Olewniczak// must be run within DokuWiki 3*c7d53eabSSzymon Olewniczakif (!defined('DOKU_INC')) die(); 4*c7d53eabSSzymon Olewniczak 5*c7d53eabSSzymon Olewniczakif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 6*c7d53eabSSzymon Olewniczakrequire_once DOKU_PLUGIN . 'syntax.php'; 7*c7d53eabSSzymon Olewniczak 8*c7d53eabSSzymon Olewniczak/** 9*c7d53eabSSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism 10*c7d53eabSSzymon Olewniczak * need to inherit from this class 11*c7d53eabSSzymon Olewniczak */ 12*c7d53eabSSzymon Olewniczakclass action_plugin_approve_notification extends DokuWiki_Action_Plugin 13*c7d53eabSSzymon Olewniczak{ 14*c7d53eabSSzymon Olewniczak public function register(Doku_Event_Handler $controller) 15*c7d53eabSSzymon Olewniczak { 16*c7d53eabSSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'add_notifications_source'); 17*c7d53eabSSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'add_notifications'); 18*c7d53eabSSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'add_notification_cache_dependencies'); 19*c7d53eabSSzymon Olewniczak 20*c7d53eabSSzymon Olewniczak 21*c7d53eabSSzymon Olewniczak } 22*c7d53eabSSzymon Olewniczak 23*c7d53eabSSzymon Olewniczak public function add_notifications_source(Doku_Event $event) 24*c7d53eabSSzymon Olewniczak { 25*c7d53eabSSzymon Olewniczak $event->data[] = 'approve'; 26*c7d53eabSSzymon Olewniczak } 27*c7d53eabSSzymon Olewniczak 28*c7d53eabSSzymon Olewniczak public function add_notification_cache_dependencies(Doku_Event $event) 29*c7d53eabSSzymon Olewniczak { 30*c7d53eabSSzymon Olewniczak if (!in_array('approve', $event->data['plugins'])) return; 31*c7d53eabSSzymon Olewniczak 32*c7d53eabSSzymon Olewniczak /** @var \helper_plugin_ireadit_db $db_helper */ 33*c7d53eabSSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 34*c7d53eabSSzymon Olewniczak $event->data['dependencies'][] = $db_helper->getDB()->getAdapter()->getDbFile(); 35*c7d53eabSSzymon Olewniczak } 36*c7d53eabSSzymon Olewniczak 37*c7d53eabSSzymon Olewniczak public function add_notifications(Doku_Event $event) 38*c7d53eabSSzymon Olewniczak { 39*c7d53eabSSzymon Olewniczak if (!in_array('approve', $event->data['plugins'])) return; 40*c7d53eabSSzymon Olewniczak 41*c7d53eabSSzymon Olewniczak /** @var \helper_plugin_ireadit_db $db_helper */ 42*c7d53eabSSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 43*c7d53eabSSzymon Olewniczak $sqlite = $db_helper->getDB(); 44*c7d53eabSSzymon Olewniczak 45*c7d53eabSSzymon Olewniczak $user = $event->data['user']; 46*c7d53eabSSzymon Olewniczak 47*c7d53eabSSzymon Olewniczak $q = 'SELECT page.page, revision.rev 48*c7d53eabSSzymon Olewniczak FROM page INNER JOIN revision ON page.page = revision.page 49*c7d53eabSSzymon Olewniczak WHERE page.hidden = 0 AND page. maintainer=? 50*c7d53eabSSzymon Olewniczak AND revision.current=1 AND revision.approved IS NULL'; 51*c7d53eabSSzymon Olewniczak $res = $sqlite->query($q, $user); 52*c7d53eabSSzymon Olewniczak 53*c7d53eabSSzymon Olewniczak $notifications = $sqlite->res2arr($res); 54*c7d53eabSSzymon Olewniczak 55*c7d53eabSSzymon Olewniczak foreach ($notifications as $notification) { 56*c7d53eabSSzymon Olewniczak $page = $notification['page']; 57*c7d53eabSSzymon Olewniczak $rev = $notification['rev']; 58*c7d53eabSSzymon Olewniczak 59*c7d53eabSSzymon Olewniczak $link = '<a class="wikilink1" href="' . wl($page) . '">'; 60*c7d53eabSSzymon Olewniczak if (useHeading('content')) { 61*c7d53eabSSzymon Olewniczak $heading = p_get_first_heading($page); 62*c7d53eabSSzymon Olewniczak if (!blank($heading)) { 63*c7d53eabSSzymon Olewniczak $link .= $heading; 64*c7d53eabSSzymon Olewniczak } else { 65*c7d53eabSSzymon Olewniczak $link .= noNSorNS($page); 66*c7d53eabSSzymon Olewniczak } 67*c7d53eabSSzymon Olewniczak } else { 68*c7d53eabSSzymon Olewniczak $link .= noNSorNS($page); 69*c7d53eabSSzymon Olewniczak } 70*c7d53eabSSzymon Olewniczak $link .= '</a>'; 71*c7d53eabSSzymon Olewniczak $full = sprintf($this->getLang('notification full'), $link); 72*c7d53eabSSzymon Olewniczak $event->data['notifications'][] = [ 73*c7d53eabSSzymon Olewniczak 'plugin' => 'ireadit', 74*c7d53eabSSzymon Olewniczak 'full' => $full, 75*c7d53eabSSzymon Olewniczak 'brief' => $link, 76*c7d53eabSSzymon Olewniczak 'timestamp' => (int)$rev 77*c7d53eabSSzymon Olewniczak ]; 78*c7d53eabSSzymon Olewniczak } 79*c7d53eabSSzymon Olewniczak } 80*c7d53eabSSzymon Olewniczak} 81