1c7d53eabSSzymon Olewniczak<?php 2c7d53eabSSzymon Olewniczak// must be run within DokuWiki 3*b664e7d8SSzymon Olewniczakuse dokuwiki\plugin\approve\meta\ApproveMetadata; 4*b664e7d8SSzymon Olewniczak 5c7d53eabSSzymon Olewniczakif (!defined('DOKU_INC')) die(); 6c7d53eabSSzymon Olewniczak 7c7d53eabSSzymon Olewniczakif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 8c7d53eabSSzymon Olewniczakrequire_once DOKU_PLUGIN . 'syntax.php'; 9c7d53eabSSzymon Olewniczak 10c7d53eabSSzymon Olewniczak/** 11c7d53eabSSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism 12c7d53eabSSzymon Olewniczak * need to inherit from this class 13c7d53eabSSzymon Olewniczak */ 14c7d53eabSSzymon Olewniczakclass action_plugin_approve_notification extends DokuWiki_Action_Plugin 15c7d53eabSSzymon Olewniczak{ 16c7d53eabSSzymon Olewniczak public function register(Doku_Event_Handler $controller) 17c7d53eabSSzymon Olewniczak { 18c7d53eabSSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_REGISTER_SOURCE', 'AFTER', $this, 'add_notifications_source'); 19c7d53eabSSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_GATHER', 'AFTER', $this, 'add_notifications'); 20c7d53eabSSzymon Olewniczak $controller->register_hook('PLUGIN_NOTIFICATION_CACHE_DEPENDENCIES', 'AFTER', $this, 'add_notification_cache_dependencies'); 21c7d53eabSSzymon Olewniczak 22c7d53eabSSzymon Olewniczak 23c7d53eabSSzymon Olewniczak } 24c7d53eabSSzymon Olewniczak 25c7d53eabSSzymon Olewniczak public function add_notifications_source(Doku_Event $event) 26c7d53eabSSzymon Olewniczak { 27c7d53eabSSzymon Olewniczak $event->data[] = 'approve'; 28c7d53eabSSzymon Olewniczak } 29c7d53eabSSzymon Olewniczak 30c7d53eabSSzymon Olewniczak public function add_notification_cache_dependencies(Doku_Event $event) 31c7d53eabSSzymon Olewniczak { 32c7d53eabSSzymon Olewniczak if (!in_array('approve', $event->data['plugins'])) return; 33c7d53eabSSzymon Olewniczak 340c60a293SSzymon Olewniczak try { 350c60a293SSzymon Olewniczak /** @var \helper_plugin_approve_db $db_helper */ 36c7d53eabSSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 370c60a293SSzymon Olewniczak $sqlite = $db_helper->getDB(); 380c60a293SSzymon Olewniczak $event->data['dependencies'][] = $sqlite->getAdapter()->getDbFile(); 390c60a293SSzymon Olewniczak } catch (Exception $e) { 400c60a293SSzymon Olewniczak msg($e->getMessage(), -1); 410c60a293SSzymon Olewniczak return; 420c60a293SSzymon Olewniczak } 43c7d53eabSSzymon Olewniczak } 44c7d53eabSSzymon Olewniczak 45c7d53eabSSzymon Olewniczak public function add_notifications(Doku_Event $event) 46c7d53eabSSzymon Olewniczak { 47c7d53eabSSzymon Olewniczak if (!in_array('approve', $event->data['plugins'])) return; 48c7d53eabSSzymon Olewniczak 49*b664e7d8SSzymon Olewniczak $user = $event->data['user']; 500c60a293SSzymon Olewniczak try { 51*b664e7d8SSzymon Olewniczak $approveMetadata = new ApproveMetadata(); 520c60a293SSzymon Olewniczak } catch (Exception $e) { 530c60a293SSzymon Olewniczak msg($e->getMessage(), -1); 540c60a293SSzymon Olewniczak return; 550c60a293SSzymon Olewniczak } 56c7d53eabSSzymon Olewniczak 57*b664e7d8SSzymon Olewniczak $states = ['draft', 'ready_for_approval']; 589b6ad60bSSzymon Olewniczak if ($this->getConf('ready_for_approval_notification')) { 59*b664e7d8SSzymon Olewniczak $states = ['ready_for_approval']; 609b6ad60bSSzymon Olewniczak } 61c7d53eabSSzymon Olewniczak 62*b664e7d8SSzymon Olewniczak $notifications = $approveMetadata->getPages($user, $states); 63c7d53eabSSzymon Olewniczak 64c7d53eabSSzymon Olewniczak foreach ($notifications as $notification) { 65c7d53eabSSzymon Olewniczak $page = $notification['page']; 66c7d53eabSSzymon Olewniczak $rev = $notification['rev']; 67c7d53eabSSzymon Olewniczak 68d2c787dcSSzymon Olewniczak $link = '<a class="wikilink1" href="' . wl($page, '', true) . '">'; 69c7d53eabSSzymon Olewniczak if (useHeading('content')) { 70c7d53eabSSzymon Olewniczak $heading = p_get_first_heading($page); 71c7d53eabSSzymon Olewniczak if (!blank($heading)) { 72c7d53eabSSzymon Olewniczak $link .= $heading; 73c7d53eabSSzymon Olewniczak } else { 74c7d53eabSSzymon Olewniczak $link .= noNSorNS($page); 75c7d53eabSSzymon Olewniczak } 76c7d53eabSSzymon Olewniczak } else { 77c7d53eabSSzymon Olewniczak $link .= noNSorNS($page); 78c7d53eabSSzymon Olewniczak } 79c7d53eabSSzymon Olewniczak $link .= '</a>'; 80c7d53eabSSzymon Olewniczak $full = sprintf($this->getLang('notification full'), $link); 81c7d53eabSSzymon Olewniczak $event->data['notifications'][] = [ 82e000d14fSSzymon Olewniczak 'plugin' => 'approve', 83d2c787dcSSzymon Olewniczak 'id' => $page.':'.$rev, 84c7d53eabSSzymon Olewniczak 'full' => $full, 85c7d53eabSSzymon Olewniczak 'brief' => $link, 86c7d53eabSSzymon Olewniczak 'timestamp' => (int)$rev 87c7d53eabSSzymon Olewniczak ]; 88c7d53eabSSzymon Olewniczak } 89c7d53eabSSzymon Olewniczak } 90c7d53eabSSzymon Olewniczak} 91