xref: /dokuwiki/lib/plugins/acl/action.php (revision a4e3d55680f367e5fd37b50b16ebe23ebac3d20c)
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/**
108265594dSGerrit Uitslag * Register handler
118265594dSGerrit Uitslag */
12*a4e3d556SAndreas Gohrclass action_plugin_acl extends DokuWiki_Action_Plugin
13*a4e3d556SAndreas Gohr{
148265594dSGerrit Uitslag
158265594dSGerrit Uitslag    /**
168265594dSGerrit Uitslag     * Registers a callback function for a given event
178265594dSGerrit Uitslag     *
188265594dSGerrit Uitslag     * @param Doku_Event_Handler $controller DokuWiki's event controller object
198265594dSGerrit Uitslag     * @return void
208265594dSGerrit Uitslag     */
21*a4e3d556SAndreas Gohr    public function register(Doku_Event_Handler $controller)
22*a4e3d556SAndreas Gohr    {
238265594dSGerrit Uitslag
24*a4e3d556SAndreas Gohr        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxCallAcl');
258265594dSGerrit Uitslag    }
268265594dSGerrit Uitslag
278265594dSGerrit Uitslag    /**
288265594dSGerrit Uitslag     * AJAX call handler for ACL plugin
298265594dSGerrit Uitslag     *
308265594dSGerrit Uitslag     * @param Doku_Event $event  event object by reference
318265594dSGerrit Uitslag     * @param mixed $param  empty
328265594dSGerrit Uitslag     * @return void
338265594dSGerrit Uitslag     */
348265594dSGerrit Uitslag
35*a4e3d556SAndreas Gohr    public function handleAjaxCallAcl(Doku_Event $event, $param)
36*a4e3d556SAndreas Gohr    {
378265594dSGerrit Uitslag        if ($event->data !== 'plugin_acl') {
388265594dSGerrit Uitslag            return;
398265594dSGerrit Uitslag        }
408265594dSGerrit Uitslag        $event->stopPropagation();
418265594dSGerrit Uitslag        $event->preventDefault();
428265594dSGerrit Uitslag
438265594dSGerrit Uitslag        global $ID;
448265594dSGerrit Uitslag        global $INPUT;
458265594dSGerrit Uitslag
4600dd0e7eSGerrit Uitslag        if (!auth_isadmin()) {
4700dd0e7eSGerrit Uitslag            echo 'for admins only';
4800dd0e7eSGerrit Uitslag            return;
4900dd0e7eSGerrit Uitslag        }
5000dd0e7eSGerrit Uitslag        if (!checkSecurityToken()) {
5100dd0e7eSGerrit Uitslag            echo 'CRSF Attack';
5200dd0e7eSGerrit Uitslag            return;
5300dd0e7eSGerrit Uitslag        }
548265594dSGerrit Uitslag
558265594dSGerrit Uitslag        $ID = getID();
568265594dSGerrit Uitslag
578265594dSGerrit Uitslag        /** @var $acl admin_plugin_acl */
588265594dSGerrit Uitslag        $acl = plugin_load('admin', 'acl');
598265594dSGerrit Uitslag        $acl->handle();
608265594dSGerrit Uitslag
618265594dSGerrit Uitslag        $ajax = $INPUT->str('ajax');
628265594dSGerrit Uitslag        header('Content-Type: text/html; charset=utf-8');
638265594dSGerrit Uitslag
648265594dSGerrit Uitslag        if ($ajax == 'info') {
65*a4e3d556SAndreas Gohr            $acl->printInfo();
668265594dSGerrit Uitslag        } elseif ($ajax == 'tree') {
678265594dSGerrit Uitslag            $ns = $INPUT->str('ns');
688265594dSGerrit Uitslag            if ($ns == '*') {
698265594dSGerrit Uitslag                $ns = '';
708265594dSGerrit Uitslag            }
718265594dSGerrit Uitslag            $ns = cleanID($ns);
728265594dSGerrit Uitslag            $lvl = count(explode(':', $ns));
738265594dSGerrit Uitslag            $ns = utf8_encodeFN(str_replace(':', '/', $ns));
748265594dSGerrit Uitslag
75*a4e3d556SAndreas Gohr            $data = $acl->makeTree($ns, $ns);
768265594dSGerrit Uitslag
778265594dSGerrit Uitslag            foreach (array_keys($data) as $item) {
788265594dSGerrit Uitslag                $data[$item]['level'] = $lvl + 1;
798265594dSGerrit Uitslag            }
80219fe1dcSGerrit Uitslag            echo html_buildlist(
81*a4e3d556SAndreas Gohr                $data,
82*a4e3d556SAndreas Gohr                'acl',
83*a4e3d556SAndreas Gohr                array($acl, 'makeTreeItem'),
84*a4e3d556SAndreas Gohr                array($acl, 'makeListItem')
85219fe1dcSGerrit Uitslag            );
868265594dSGerrit Uitslag        }
878265594dSGerrit Uitslag    }
888265594dSGerrit Uitslag}
89