1<?php 2/** 3 * DokuWiki Plugin acknowledge (Action Component) 4 * 5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6 * @author Andreas Gohr, Anna Dabrowska <dokuwiki@cosmocode.de> 7 */ 8 9// must be run within Dokuwiki 10if (!defined('DOKU_INC')) { 11 die(); 12} 13 14class action_plugin_acknowledge extends DokuWiki_Action_Plugin 15{ 16 17 /** @inheritDoc */ 18 public function register(Doku_Event_Handler $controller) 19 { 20 $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'AFTER', $this, 'handlePageSave'); 21 $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjax'); 22 } 23 24 /** 25 * Manage page meta data 26 * 27 * Store page last modified date 28 * Handle page deletions 29 * Remove assignments on page save, they get readded on rendering if needed 30 * 31 * @param Doku_Event $event 32 * @param $param 33 */ 34 public function handlePageSave(Doku_Event $event, $param) 35 { 36 /** @var helper_plugin_acknowledge $helper */ 37 $helper = plugin_load('helper', 'acknowledge'); 38 39 if ($event->data['changeType'] === DOKU_CHANGE_TYPE_DELETE) { 40 $helper->removePage($event->data['id']); 41 } elseif ($event->data['changeType'] !== DOKU_CHANGE_TYPE_MINOR_EDIT) { 42 $helper->storePageDate($event->data['id'], $event->data['newRevision']); 43 } 44 45 $helper->clearAssignments($event->data['id']); 46 } 47 48 /** 49 * @param Doku_Event $event 50 * @param $param 51 */ 52 public function handleAjax(Doku_Event $event, $param) 53 { 54 if ($event->data === 'plugin_acknowledge_html') { 55 echo $this->html(); 56 $event->stopPropagation(); 57 $event->preventDefault(); 58 } 59 } 60 61 /** 62 * Returns the acknowledgment form/confirmation 63 * 64 * @return string The HTML to display 65 */ 66 protected function html() 67 { 68 global $INPUT; 69 global $USERINFO; 70 $id = $INPUT->str('id'); 71 $user = $INPUT->server->str('REMOTE_USER'); 72 if ($id === '' || $user === '') return ''; 73 74 /** @var helper_plugin_acknowledge $helper */ 75 $helper = plugin_load('helper', 'acknowledge'); 76 77 $html = ''; 78 79 $ack = $helper->hasUserAcknowledged($id, $user); 80 if ($ack) { 81 82 $html .= '<div>'; 83 $html .= 'You acknowledged this page ' . sprintf('%f', $ack); 84 $html .= '</div>'; 85 } elseif ($helper->isUserAssigned($id, $user, $USERINFO['grps'])) { 86 $html .= '<div>'; 87 $html .= 'You need to acknowledge this'; 88 $html .= '</div>'; 89 } 90 91 return $html; 92 } 93} 94 95