18265594dSGerrit Uitslag<?php 28553d24dSAndreas Gohr 38553d24dSAndreas Gohruse dokuwiki\Extension\ActionPlugin; 48553d24dSAndreas Gohruse dokuwiki\Extension\EventHandler; 58553d24dSAndreas Gohruse dokuwiki\Extension\Event; 6d4f83172SAndreas Gohr 78265594dSGerrit Uitslag/** 88265594dSGerrit Uitslag * AJAX call handler for ACL plugin 98265594dSGerrit Uitslag * 108265594dSGerrit Uitslag * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 118265594dSGerrit Uitslag * @author Andreas Gohr <andi@splitbrain.org> 128265594dSGerrit Uitslag */ 138265594dSGerrit Uitslag/** 148265594dSGerrit Uitslag * Register handler 158265594dSGerrit Uitslag */ 168553d24dSAndreas Gohrclass action_plugin_acl extends ActionPlugin 17a4e3d556SAndreas Gohr{ 188265594dSGerrit Uitslag /** 198265594dSGerrit Uitslag * Registers a callback function for a given event 208265594dSGerrit Uitslag * 21*5c483796SAndreas Gohr * @param EventHandler $controller DokuWiki's event controller object 228265594dSGerrit Uitslag * @return void 238265594dSGerrit Uitslag */ 248553d24dSAndreas Gohr public function register(EventHandler $controller) 25a4e3d556SAndreas Gohr { 268265594dSGerrit Uitslag 27a4e3d556SAndreas Gohr $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxCallAcl'); 288265594dSGerrit Uitslag } 298265594dSGerrit Uitslag 308265594dSGerrit Uitslag /** 318265594dSGerrit Uitslag * AJAX call handler for ACL plugin 328265594dSGerrit Uitslag * 33*5c483796SAndreas Gohr * @param Event $event event object by reference 348265594dSGerrit Uitslag * @param mixed $param empty 358265594dSGerrit Uitslag * @return void 368265594dSGerrit Uitslag */ 378553d24dSAndreas Gohr public function handleAjaxCallAcl(Event $event, $param) 38a4e3d556SAndreas Gohr { 398265594dSGerrit Uitslag if ($event->data !== 'plugin_acl') { 408265594dSGerrit Uitslag return; 418265594dSGerrit Uitslag } 428265594dSGerrit Uitslag $event->stopPropagation(); 438265594dSGerrit Uitslag $event->preventDefault(); 448265594dSGerrit Uitslag 458265594dSGerrit Uitslag global $ID; 468265594dSGerrit Uitslag global $INPUT; 478265594dSGerrit Uitslag 48dda9db03SAndreas Gohr /** @var $acl admin_plugin_acl */ 49dda9db03SAndreas Gohr $acl = plugin_load('admin', 'acl'); 50dda9db03SAndreas Gohr if (!$acl->isAccessibleByCurrentUser()) { 5100dd0e7eSGerrit Uitslag echo 'for admins only'; 5200dd0e7eSGerrit Uitslag return; 5300dd0e7eSGerrit Uitslag } 5400dd0e7eSGerrit Uitslag if (!checkSecurityToken()) { 5500dd0e7eSGerrit Uitslag echo 'CRSF Attack'; 5600dd0e7eSGerrit Uitslag return; 5700dd0e7eSGerrit Uitslag } 588265594dSGerrit Uitslag 598265594dSGerrit Uitslag $ID = getID(); 608265594dSGerrit Uitslag $acl->handle(); 618265594dSGerrit Uitslag 628265594dSGerrit Uitslag $ajax = $INPUT->str('ajax'); 638265594dSGerrit Uitslag header('Content-Type: text/html; charset=utf-8'); 648265594dSGerrit Uitslag 658265594dSGerrit Uitslag if ($ajax == 'info') { 66a4e3d556SAndreas Gohr $acl->printInfo(); 678265594dSGerrit Uitslag } elseif ($ajax == 'tree') { 688265594dSGerrit Uitslag $ns = $INPUT->str('ns'); 698265594dSGerrit Uitslag if ($ns == '*') { 708265594dSGerrit Uitslag $ns = ''; 718265594dSGerrit Uitslag } 728265594dSGerrit Uitslag $ns = cleanID($ns); 738265594dSGerrit Uitslag $lvl = count(explode(':', $ns)); 748265594dSGerrit Uitslag $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 758265594dSGerrit Uitslag 76a4e3d556SAndreas Gohr $data = $acl->makeTree($ns, $ns); 778265594dSGerrit Uitslag 788265594dSGerrit Uitslag foreach (array_keys($data) as $item) { 798265594dSGerrit Uitslag $data[$item]['level'] = $lvl + 1; 808265594dSGerrit Uitslag } 81219fe1dcSGerrit Uitslag echo html_buildlist( 82a4e3d556SAndreas Gohr $data, 83a4e3d556SAndreas Gohr 'acl', 84bff2c9d2SAndreas Gohr [$acl, 'makeTreeItem'], 85bff2c9d2SAndreas Gohr [$acl, 'makeListItem'] 86219fe1dcSGerrit Uitslag ); 878265594dSGerrit Uitslag } 888265594dSGerrit Uitslag } 898265594dSGerrit Uitslag} 90