*/ /** * Register handler */ class action_plugin_acl extends ActionPlugin { /** * Registers a callback function for a given event * * @param EventHandler $controller DokuWiki's event controller object * @return void */ public function register(EventHandler $controller) { $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxCallAcl'); } /** * AJAX call handler for ACL plugin * * @param Event $event event object by reference * @param mixed $param empty * @return void */ public function handleAjaxCallAcl(Event $event, $param) { if ($event->data !== 'plugin_acl') { return; } $event->stopPropagation(); $event->preventDefault(); global $ID; global $INPUT; /** @var $acl admin_plugin_acl */ $acl = plugin_load('admin', 'acl'); if (!$acl->isAccessibleByCurrentUser()) { echo 'for admins only'; return; } if (!checkSecurityToken()) { echo 'CRSF Attack'; return; } $ID = getID(); $acl->handle(); $ajax = $INPUT->str('ajax'); header('Content-Type: text/html; charset=utf-8'); if ($ajax == 'info') { $acl->printInfo(); } elseif ($ajax == 'tree') { $ns = $INPUT->str('ns'); if ($ns == '*') { $ns = ''; } $ns = cleanID($ns); $lvl = count(explode(':', $ns)); $ns = utf8_encodeFN(str_replace(':', '/', $ns)); $data = $acl->makeTree($ns, $ns); foreach (array_keys($data) as $item) { $data[$item]['level'] = $lvl + 1; } echo html_buildlist( $data, 'acl', [$acl, 'makeTreeItem'], [$acl, 'makeListItem'] ); } } }