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 */ 238265594dSGerrit Uitslag 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 378265594dSGerrit Uitslag 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 //close session 458265594dSGerrit Uitslag session_write_close(); 468265594dSGerrit Uitslag 478265594dSGerrit Uitslag global $ID; 488265594dSGerrit Uitslag global $INPUT; 498265594dSGerrit Uitslag 508265594dSGerrit Uitslag //fix for Opera XMLHttpRequests 518265594dSGerrit Uitslag $postData = http_get_raw_post_data(); 528265594dSGerrit Uitslag if(!count($_POST) && !empty($postData)) { 538265594dSGerrit Uitslag parse_str($postData, $_POST); 548265594dSGerrit Uitslag } 558265594dSGerrit Uitslag 56*00dd0e7eSGerrit Uitslag if(!auth_isadmin()) { 57*00dd0e7eSGerrit Uitslag echo 'for admins only'; 58*00dd0e7eSGerrit Uitslag return; 59*00dd0e7eSGerrit Uitslag } 60*00dd0e7eSGerrit Uitslag if(!checkSecurityToken()) { 61*00dd0e7eSGerrit Uitslag echo 'CRSF Attack'; 62*00dd0e7eSGerrit Uitslag return; 63*00dd0e7eSGerrit Uitslag } 648265594dSGerrit Uitslag 658265594dSGerrit Uitslag $ID = getID(); 668265594dSGerrit Uitslag 678265594dSGerrit Uitslag /** @var $acl admin_plugin_acl */ 688265594dSGerrit Uitslag $acl = plugin_load('admin', 'acl'); 698265594dSGerrit Uitslag $acl->handle(); 708265594dSGerrit Uitslag 718265594dSGerrit Uitslag $ajax = $INPUT->str('ajax'); 728265594dSGerrit Uitslag header('Content-Type: text/html; charset=utf-8'); 738265594dSGerrit Uitslag 748265594dSGerrit Uitslag if($ajax == 'info') { 758265594dSGerrit Uitslag $acl->_html_info(); 768265594dSGerrit Uitslag } elseif($ajax == 'tree') { 778265594dSGerrit Uitslag 788265594dSGerrit Uitslag $ns = $INPUT->str('ns'); 798265594dSGerrit Uitslag if($ns == '*') { 808265594dSGerrit Uitslag $ns = ''; 818265594dSGerrit Uitslag } 828265594dSGerrit Uitslag $ns = cleanID($ns); 838265594dSGerrit Uitslag $lvl = count(explode(':', $ns)); 848265594dSGerrit Uitslag $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 858265594dSGerrit Uitslag 868265594dSGerrit Uitslag $data = $acl->_get_tree($ns, $ns); 878265594dSGerrit Uitslag 888265594dSGerrit Uitslag foreach(array_keys($data) as $item) { 898265594dSGerrit Uitslag $data[$item]['level'] = $lvl + 1; 908265594dSGerrit Uitslag } 91219fe1dcSGerrit Uitslag echo html_buildlist( 92219fe1dcSGerrit Uitslag $data, 'acl', array($acl, '_html_list_acl'), 93219fe1dcSGerrit Uitslag array($acl, '_html_li_acl') 94219fe1dcSGerrit Uitslag ); 958265594dSGerrit Uitslag } 968265594dSGerrit Uitslag } 978265594dSGerrit Uitslag}