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 320c60a293SSzymon Olewniczak try { 330c60a293SSzymon Olewniczak /** @var \helper_plugin_approve_db $db_helper */ 34c7d53eabSSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 350c60a293SSzymon Olewniczak $sqlite = $db_helper->getDB(); 360c60a293SSzymon Olewniczak $event->data['dependencies'][] = $sqlite->getAdapter()->getDbFile(); 370c60a293SSzymon Olewniczak } catch (Exception $e) { 380c60a293SSzymon Olewniczak msg($e->getMessage(), -1); 390c60a293SSzymon Olewniczak return; 400c60a293SSzymon Olewniczak } 41c7d53eabSSzymon Olewniczak } 42c7d53eabSSzymon Olewniczak 43c7d53eabSSzymon Olewniczak public function add_notifications(Doku_Event $event) 44c7d53eabSSzymon Olewniczak { 45c7d53eabSSzymon Olewniczak if (!in_array('approve', $event->data['plugins'])) return; 46c7d53eabSSzymon Olewniczak 470c60a293SSzymon Olewniczak try { 480c60a293SSzymon Olewniczak /** @var \helper_plugin_approve_db $db_helper */ 49c7d53eabSSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 50c7d53eabSSzymon Olewniczak $sqlite = $db_helper->getDB(); 510c60a293SSzymon Olewniczak } catch (Exception $e) { 520c60a293SSzymon Olewniczak msg($e->getMessage(), -1); 530c60a293SSzymon Olewniczak return; 540c60a293SSzymon Olewniczak } 55c7d53eabSSzymon Olewniczak 56c7d53eabSSzymon Olewniczak $user = $event->data['user']; 57c7d53eabSSzymon Olewniczak 58*9b6ad60bSSzymon Olewniczak $is_ready_for_approval = ''; 59*9b6ad60bSSzymon Olewniczak if ($this->getConf('ready_for_approval_notification')) { 60*9b6ad60bSSzymon Olewniczak $is_ready_for_approval = 'AND revision.ready_for_approval IS NOT NULL'; 61*9b6ad60bSSzymon Olewniczak } 62c7d53eabSSzymon Olewniczak $q = 'SELECT page.page, revision.rev 63c7d53eabSSzymon Olewniczak FROM page INNER JOIN revision ON page.page = revision.page 642ce523c6SSzymon Olewniczak WHERE page.hidden = 0 AND page.approver=? 65*9b6ad60bSSzymon Olewniczak AND revision.current=1 AND revision.approved IS NULL ' . $is_ready_for_approval; 66c7d53eabSSzymon Olewniczak $res = $sqlite->query($q, $user); 67c7d53eabSSzymon Olewniczak 68c7d53eabSSzymon Olewniczak $notifications = $sqlite->res2arr($res); 69c7d53eabSSzymon Olewniczak 70c7d53eabSSzymon Olewniczak foreach ($notifications as $notification) { 71c7d53eabSSzymon Olewniczak $page = $notification['page']; 72c7d53eabSSzymon Olewniczak $rev = $notification['rev']; 73c7d53eabSSzymon Olewniczak 74d2c787dcSSzymon Olewniczak $link = '<a class="wikilink1" href="' . wl($page, '', true) . '">'; 75c7d53eabSSzymon Olewniczak if (useHeading('content')) { 76c7d53eabSSzymon Olewniczak $heading = p_get_first_heading($page); 77c7d53eabSSzymon Olewniczak if (!blank($heading)) { 78c7d53eabSSzymon Olewniczak $link .= $heading; 79c7d53eabSSzymon Olewniczak } else { 80c7d53eabSSzymon Olewniczak $link .= noNSorNS($page); 81c7d53eabSSzymon Olewniczak } 82c7d53eabSSzymon Olewniczak } else { 83c7d53eabSSzymon Olewniczak $link .= noNSorNS($page); 84c7d53eabSSzymon Olewniczak } 85c7d53eabSSzymon Olewniczak $link .= '</a>'; 86c7d53eabSSzymon Olewniczak $full = sprintf($this->getLang('notification full'), $link); 87c7d53eabSSzymon Olewniczak $event->data['notifications'][] = [ 88e000d14fSSzymon Olewniczak 'plugin' => 'approve', 89d2c787dcSSzymon Olewniczak 'id' => $page.':'.$rev, 90c7d53eabSSzymon Olewniczak 'full' => $full, 91c7d53eabSSzymon Olewniczak 'brief' => $link, 92c7d53eabSSzymon Olewniczak 'timestamp' => (int)$rev 93c7d53eabSSzymon Olewniczak ]; 94c7d53eabSSzymon Olewniczak } 95c7d53eabSSzymon Olewniczak } 96c7d53eabSSzymon Olewniczak} 97