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