xref: /dokuwiki/lib/plugins/acl/action.php (revision 219fe1dcb7250b332a77278fd31f20e5da10846c)
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
568265594dSGerrit Uitslag        if(!auth_isadmin()) die('for admins only');
578265594dSGerrit Uitslag        if(!checkSecurityToken()) die('CRSF Attack');
588265594dSGerrit Uitslag
598265594dSGerrit Uitslag        $ID = getID();
608265594dSGerrit Uitslag
618265594dSGerrit Uitslag        /** @var $acl admin_plugin_acl */
628265594dSGerrit Uitslag        $acl = plugin_load('admin', 'acl');
638265594dSGerrit Uitslag        $acl->handle();
648265594dSGerrit Uitslag
658265594dSGerrit Uitslag        $ajax = $INPUT->str('ajax');
668265594dSGerrit Uitslag        header('Content-Type: text/html; charset=utf-8');
678265594dSGerrit Uitslag
688265594dSGerrit Uitslag        if($ajax == 'info') {
698265594dSGerrit Uitslag            $acl->_html_info();
708265594dSGerrit Uitslag        } elseif($ajax == 'tree') {
718265594dSGerrit Uitslag
728265594dSGerrit Uitslag            $ns = $INPUT->str('ns');
738265594dSGerrit Uitslag            if($ns == '*') {
748265594dSGerrit Uitslag                $ns = '';
758265594dSGerrit Uitslag            }
768265594dSGerrit Uitslag            $ns = cleanID($ns);
778265594dSGerrit Uitslag            $lvl = count(explode(':', $ns));
788265594dSGerrit Uitslag            $ns = utf8_encodeFN(str_replace(':', '/', $ns));
798265594dSGerrit Uitslag
808265594dSGerrit Uitslag            $data = $acl->_get_tree($ns, $ns);
818265594dSGerrit Uitslag
828265594dSGerrit Uitslag            foreach(array_keys($data) as $item) {
838265594dSGerrit Uitslag                $data[$item]['level'] = $lvl + 1;
848265594dSGerrit Uitslag            }
85*219fe1dcSGerrit Uitslag            echo html_buildlist(
86*219fe1dcSGerrit Uitslag                $data, 'acl', array($acl, '_html_list_acl'),
87*219fe1dcSGerrit Uitslag                array($acl, '_html_li_acl')
88*219fe1dcSGerrit Uitslag            );
898265594dSGerrit Uitslag        }
908265594dSGerrit Uitslag    }
918265594dSGerrit Uitslag}