1*8265594dSGerrit Uitslag<?php 2*8265594dSGerrit Uitslag/** 3*8265594dSGerrit Uitslag * AJAX call handler for ACL plugin 4*8265594dSGerrit Uitslag * 5*8265594dSGerrit Uitslag * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6*8265594dSGerrit Uitslag * @author Andreas Gohr <andi@splitbrain.org> 7*8265594dSGerrit Uitslag */ 8*8265594dSGerrit Uitslag 9*8265594dSGerrit Uitslag// must be run within Dokuwiki 10*8265594dSGerrit Uitslagif(!defined('DOKU_INC')) die(); 11*8265594dSGerrit Uitslag 12*8265594dSGerrit Uitslag/** 13*8265594dSGerrit Uitslag * Register handler 14*8265594dSGerrit Uitslag */ 15*8265594dSGerrit Uitslagclass action_plugin_acl extends DokuWiki_Action_Plugin { 16*8265594dSGerrit Uitslag 17*8265594dSGerrit Uitslag /** 18*8265594dSGerrit Uitslag * Registers a callback function for a given event 19*8265594dSGerrit Uitslag * 20*8265594dSGerrit Uitslag * @param Doku_Event_Handler $controller DokuWiki's event controller object 21*8265594dSGerrit Uitslag * @return void 22*8265594dSGerrit Uitslag */ 23*8265594dSGerrit Uitslag public function register(Doku_Event_Handler &$controller) { 24*8265594dSGerrit Uitslag 25*8265594dSGerrit Uitslag $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax_call_acl'); 26*8265594dSGerrit Uitslag 27*8265594dSGerrit Uitslag } 28*8265594dSGerrit Uitslag 29*8265594dSGerrit Uitslag /** 30*8265594dSGerrit Uitslag * AJAX call handler for ACL plugin 31*8265594dSGerrit Uitslag * 32*8265594dSGerrit Uitslag * @param Doku_Event $event event object by reference 33*8265594dSGerrit Uitslag * @param mixed $param empty 34*8265594dSGerrit Uitslag * @return void 35*8265594dSGerrit Uitslag */ 36*8265594dSGerrit Uitslag 37*8265594dSGerrit Uitslag public function handle_ajax_call_acl(Doku_Event &$event, $param) { 38*8265594dSGerrit Uitslag if ($event->data !== 'plugin_acl') { 39*8265594dSGerrit Uitslag return; 40*8265594dSGerrit Uitslag } 41*8265594dSGerrit Uitslag $event->stopPropagation(); 42*8265594dSGerrit Uitslag $event->preventDefault(); 43*8265594dSGerrit Uitslag 44*8265594dSGerrit Uitslag 45*8265594dSGerrit Uitslag //close session 46*8265594dSGerrit Uitslag session_write_close(); 47*8265594dSGerrit Uitslag 48*8265594dSGerrit Uitslag global $conf; 49*8265594dSGerrit Uitslag global $ID; 50*8265594dSGerrit Uitslag global $INPUT; 51*8265594dSGerrit Uitslag 52*8265594dSGerrit Uitslag //fix for Opera XMLHttpRequests 53*8265594dSGerrit Uitslag $postData = http_get_raw_post_data(); 54*8265594dSGerrit Uitslag if(!count($_POST) && !empty($postData)){ 55*8265594dSGerrit Uitslag parse_str($postData, $_POST); 56*8265594dSGerrit Uitslag } 57*8265594dSGerrit Uitslag 58*8265594dSGerrit Uitslag if(!auth_isadmin()) die('for admins only'); 59*8265594dSGerrit Uitslag if(!checkSecurityToken()) die('CRSF Attack'); 60*8265594dSGerrit Uitslag 61*8265594dSGerrit Uitslag $ID = getID(); 62*8265594dSGerrit Uitslag 63*8265594dSGerrit Uitslag /** @var $acl admin_plugin_acl */ 64*8265594dSGerrit Uitslag $acl = plugin_load('admin','acl'); 65*8265594dSGerrit Uitslag $acl->handle(); 66*8265594dSGerrit Uitslag 67*8265594dSGerrit Uitslag $ajax = $INPUT->str('ajax'); 68*8265594dSGerrit Uitslag header('Content-Type: text/html; charset=utf-8'); 69*8265594dSGerrit Uitslag 70*8265594dSGerrit Uitslag if($ajax == 'info'){ 71*8265594dSGerrit Uitslag $acl->_html_info(); 72*8265594dSGerrit Uitslag }elseif($ajax == 'tree'){ 73*8265594dSGerrit Uitslag 74*8265594dSGerrit Uitslag $dir = $conf['datadir']; 75*8265594dSGerrit Uitslag $ns = $INPUT->str('ns'); 76*8265594dSGerrit Uitslag if($ns == '*'){ 77*8265594dSGerrit Uitslag $ns =''; 78*8265594dSGerrit Uitslag } 79*8265594dSGerrit Uitslag $ns = cleanID($ns); 80*8265594dSGerrit Uitslag $lvl = count(explode(':',$ns)); 81*8265594dSGerrit Uitslag $ns = utf8_encodeFN(str_replace(':','/',$ns)); 82*8265594dSGerrit Uitslag 83*8265594dSGerrit Uitslag $data = $acl->_get_tree($ns,$ns); 84*8265594dSGerrit Uitslag 85*8265594dSGerrit Uitslag foreach(array_keys($data) as $item){ 86*8265594dSGerrit Uitslag $data[$item]['level'] = $lvl+1; 87*8265594dSGerrit Uitslag } 88*8265594dSGerrit Uitslag echo html_buildlist($data, 'acl', array($acl, '_html_list_acl'), 89*8265594dSGerrit Uitslag array($acl, '_html_li_acl')); 90*8265594dSGerrit Uitslag } 91*8265594dSGerrit Uitslag } 92*8265594dSGerrit Uitslag}