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// must be run within Dokuwiki 108265594dSGerrit Uitslagif(!defined('DOKU_INC')) die(); 118265594dSGerrit Uitslag 128265594dSGerrit Uitslag/** 138265594dSGerrit Uitslag * Register handler 148265594dSGerrit Uitslag */ 158265594dSGerrit Uitslagclass action_plugin_acl extends DokuWiki_Action_Plugin { 168265594dSGerrit Uitslag 178265594dSGerrit Uitslag /** 188265594dSGerrit Uitslag * Registers a callback function for a given event 198265594dSGerrit Uitslag * 208265594dSGerrit Uitslag * @param Doku_Event_Handler $controller DokuWiki's event controller object 218265594dSGerrit Uitslag * @return void 228265594dSGerrit Uitslag */ 23e82704a0SAndreas Gohr public function register(Doku_Event_Handler $controller) { 248265594dSGerrit Uitslag 258265594dSGerrit Uitslag $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax_call_acl'); 268265594dSGerrit Uitslag 278265594dSGerrit Uitslag } 288265594dSGerrit Uitslag 298265594dSGerrit Uitslag /** 308265594dSGerrit Uitslag * AJAX call handler for ACL plugin 318265594dSGerrit Uitslag * 328265594dSGerrit Uitslag * @param Doku_Event $event event object by reference 338265594dSGerrit Uitslag * @param mixed $param empty 348265594dSGerrit Uitslag * @return void 358265594dSGerrit Uitslag */ 368265594dSGerrit Uitslag 37*dda9db03SAndreas Gohr public function handle_ajax_call_acl(Doku_Event $event, $param) { 388265594dSGerrit Uitslag if($event->data !== 'plugin_acl') { 398265594dSGerrit Uitslag return; 408265594dSGerrit Uitslag } 418265594dSGerrit Uitslag $event->stopPropagation(); 428265594dSGerrit Uitslag $event->preventDefault(); 438265594dSGerrit Uitslag 448265594dSGerrit Uitslag global $ID; 458265594dSGerrit Uitslag global $INPUT; 468265594dSGerrit Uitslag 47*dda9db03SAndreas Gohr /** @var $acl admin_plugin_acl */ 48*dda9db03SAndreas Gohr $acl = plugin_load('admin', 'acl'); 49*dda9db03SAndreas Gohr 50*dda9db03SAndreas 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') { 668265594dSGerrit Uitslag $acl->_html_info(); 678265594dSGerrit Uitslag } elseif($ajax == 'tree') { 688265594dSGerrit Uitslag 698265594dSGerrit Uitslag $ns = $INPUT->str('ns'); 708265594dSGerrit Uitslag if($ns == '*') { 718265594dSGerrit Uitslag $ns = ''; 728265594dSGerrit Uitslag } 738265594dSGerrit Uitslag $ns = cleanID($ns); 748265594dSGerrit Uitslag $lvl = count(explode(':', $ns)); 758265594dSGerrit Uitslag $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 768265594dSGerrit Uitslag 778265594dSGerrit Uitslag $data = $acl->_get_tree($ns, $ns); 788265594dSGerrit Uitslag 798265594dSGerrit Uitslag foreach(array_keys($data) as $item) { 808265594dSGerrit Uitslag $data[$item]['level'] = $lvl + 1; 818265594dSGerrit Uitslag } 82219fe1dcSGerrit Uitslag echo html_buildlist( 83219fe1dcSGerrit Uitslag $data, 'acl', array($acl, '_html_list_acl'), 84219fe1dcSGerrit Uitslag array($acl, '_html_li_acl') 85219fe1dcSGerrit Uitslag ); 868265594dSGerrit Uitslag } 878265594dSGerrit Uitslag } 888265594dSGerrit Uitslag} 89