xref: /dokuwiki/lib/plugins/acl/action.php (revision 8265594d98708c1c993489099402d9ee27d2a289)
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}