18265594dSGerrit Uitslag<?php 28265594dSGerrit Uitslag/** 38265594dSGerrit Uitslag * AJAX call handler for ACL plugin 48265594dSGerrit Uitslag * 58265594dSGerrit Uitslag * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 68265594dSGerrit Uitslag * @author Andreas Gohr <andi@splitbrain.org> 78265594dSGerrit Uitslag */ 88265594dSGerrit Uitslag 98265594dSGerrit Uitslag/** 108265594dSGerrit Uitslag * Register handler 118265594dSGerrit Uitslag */ 12a4e3d556SAndreas Gohrclass action_plugin_acl extends DokuWiki_Action_Plugin 13a4e3d556SAndreas Gohr{ 148265594dSGerrit Uitslag 158265594dSGerrit Uitslag /** 168265594dSGerrit Uitslag * Registers a callback function for a given event 178265594dSGerrit Uitslag * 188265594dSGerrit Uitslag * @param Doku_Event_Handler $controller DokuWiki's event controller object 198265594dSGerrit Uitslag * @return void 208265594dSGerrit Uitslag */ 21a4e3d556SAndreas Gohr public function register(Doku_Event_Handler $controller) 22a4e3d556SAndreas Gohr { 238265594dSGerrit Uitslag 24a4e3d556SAndreas Gohr $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxCallAcl'); 258265594dSGerrit Uitslag } 268265594dSGerrit Uitslag 278265594dSGerrit Uitslag /** 288265594dSGerrit Uitslag * AJAX call handler for ACL plugin 298265594dSGerrit Uitslag * 308265594dSGerrit Uitslag * @param Doku_Event $event event object by reference 318265594dSGerrit Uitslag * @param mixed $param empty 328265594dSGerrit Uitslag * @return void 338265594dSGerrit Uitslag */ 34a4e3d556SAndreas Gohr public function handleAjaxCallAcl(Doku_Event $event, $param) 35a4e3d556SAndreas Gohr { 368265594dSGerrit Uitslag if ($event->data !== 'plugin_acl') { 378265594dSGerrit Uitslag return; 388265594dSGerrit Uitslag } 398265594dSGerrit Uitslag $event->stopPropagation(); 408265594dSGerrit Uitslag $event->preventDefault(); 418265594dSGerrit Uitslag 428265594dSGerrit Uitslag global $ID; 438265594dSGerrit Uitslag global $INPUT; 448265594dSGerrit Uitslag 45dda9db03SAndreas Gohr /** @var $acl admin_plugin_acl */ 46dda9db03SAndreas Gohr $acl = plugin_load('admin', 'acl'); 47dda9db03SAndreas Gohr if (!$acl->isAccessibleByCurrentUser()) { 4800dd0e7eSGerrit Uitslag echo 'for admins only'; 4900dd0e7eSGerrit Uitslag return; 5000dd0e7eSGerrit Uitslag } 5100dd0e7eSGerrit Uitslag if (!checkSecurityToken()) { 5200dd0e7eSGerrit Uitslag echo 'CRSF Attack'; 5300dd0e7eSGerrit Uitslag return; 5400dd0e7eSGerrit Uitslag } 558265594dSGerrit Uitslag 568265594dSGerrit Uitslag $ID = getID(); 578265594dSGerrit Uitslag $acl->handle(); 588265594dSGerrit Uitslag 598265594dSGerrit Uitslag $ajax = $INPUT->str('ajax'); 608265594dSGerrit Uitslag header('Content-Type: text/html; charset=utf-8'); 618265594dSGerrit Uitslag 628265594dSGerrit Uitslag if ($ajax == 'info') { 63a4e3d556SAndreas Gohr $acl->printInfo(); 648265594dSGerrit Uitslag } elseif ($ajax == 'tree') { 658265594dSGerrit Uitslag $ns = $INPUT->str('ns'); 668265594dSGerrit Uitslag if ($ns == '*') { 678265594dSGerrit Uitslag $ns = ''; 688265594dSGerrit Uitslag } 698265594dSGerrit Uitslag $ns = cleanID($ns); 708265594dSGerrit Uitslag $lvl = count(explode(':', $ns)); 718265594dSGerrit Uitslag $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 728265594dSGerrit Uitslag 73a4e3d556SAndreas Gohr $data = $acl->makeTree($ns, $ns); 748265594dSGerrit Uitslag 758265594dSGerrit Uitslag foreach (array_keys($data) as $item) { 768265594dSGerrit Uitslag $data[$item]['level'] = $lvl + 1; 778265594dSGerrit Uitslag } 78219fe1dcSGerrit Uitslag echo html_buildlist( 79a4e3d556SAndreas Gohr $data, 80a4e3d556SAndreas Gohr 'acl', 81*bff2c9d2SAndreas Gohr [$acl, 'makeTreeItem'], 82*bff2c9d2SAndreas Gohr [$acl, 'makeListItem'] 83219fe1dcSGerrit Uitslag ); 848265594dSGerrit Uitslag } 858265594dSGerrit Uitslag } 868265594dSGerrit Uitslag} 87