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 */ 12*a4e3d556SAndreas Gohrclass action_plugin_acl extends DokuWiki_Action_Plugin 13*a4e3d556SAndreas 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 */ 21*a4e3d556SAndreas Gohr public function register(Doku_Event_Handler $controller) 22*a4e3d556SAndreas Gohr { 238265594dSGerrit Uitslag 24*a4e3d556SAndreas 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 */ 348265594dSGerrit Uitslag 35*a4e3d556SAndreas Gohr public function handleAjaxCallAcl(Doku_Event $event, $param) 36*a4e3d556SAndreas Gohr { 378265594dSGerrit Uitslag if ($event->data !== 'plugin_acl') { 388265594dSGerrit Uitslag return; 398265594dSGerrit Uitslag } 408265594dSGerrit Uitslag $event->stopPropagation(); 418265594dSGerrit Uitslag $event->preventDefault(); 428265594dSGerrit Uitslag 438265594dSGerrit Uitslag global $ID; 448265594dSGerrit Uitslag global $INPUT; 458265594dSGerrit Uitslag 4600dd0e7eSGerrit Uitslag if (!auth_isadmin()) { 4700dd0e7eSGerrit Uitslag echo 'for admins only'; 4800dd0e7eSGerrit Uitslag return; 4900dd0e7eSGerrit Uitslag } 5000dd0e7eSGerrit Uitslag if (!checkSecurityToken()) { 5100dd0e7eSGerrit Uitslag echo 'CRSF Attack'; 5200dd0e7eSGerrit Uitslag return; 5300dd0e7eSGerrit Uitslag } 548265594dSGerrit Uitslag 558265594dSGerrit Uitslag $ID = getID(); 568265594dSGerrit Uitslag 578265594dSGerrit Uitslag /** @var $acl admin_plugin_acl */ 588265594dSGerrit Uitslag $acl = plugin_load('admin', 'acl'); 598265594dSGerrit Uitslag $acl->handle(); 608265594dSGerrit Uitslag 618265594dSGerrit Uitslag $ajax = $INPUT->str('ajax'); 628265594dSGerrit Uitslag header('Content-Type: text/html; charset=utf-8'); 638265594dSGerrit Uitslag 648265594dSGerrit Uitslag if ($ajax == 'info') { 65*a4e3d556SAndreas Gohr $acl->printInfo(); 668265594dSGerrit Uitslag } elseif ($ajax == 'tree') { 678265594dSGerrit Uitslag $ns = $INPUT->str('ns'); 688265594dSGerrit Uitslag if ($ns == '*') { 698265594dSGerrit Uitslag $ns = ''; 708265594dSGerrit Uitslag } 718265594dSGerrit Uitslag $ns = cleanID($ns); 728265594dSGerrit Uitslag $lvl = count(explode(':', $ns)); 738265594dSGerrit Uitslag $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 748265594dSGerrit Uitslag 75*a4e3d556SAndreas Gohr $data = $acl->makeTree($ns, $ns); 768265594dSGerrit Uitslag 778265594dSGerrit Uitslag foreach (array_keys($data) as $item) { 788265594dSGerrit Uitslag $data[$item]['level'] = $lvl + 1; 798265594dSGerrit Uitslag } 80219fe1dcSGerrit Uitslag echo html_buildlist( 81*a4e3d556SAndreas Gohr $data, 82*a4e3d556SAndreas Gohr 'acl', 83*a4e3d556SAndreas Gohr array($acl, 'makeTreeItem'), 84*a4e3d556SAndreas Gohr array($acl, 'makeListItem') 85219fe1dcSGerrit Uitslag ); 868265594dSGerrit Uitslag } 878265594dSGerrit Uitslag } 888265594dSGerrit Uitslag} 89