xref: /dokuwiki/lib/plugins/acl/action.php (revision bff2c9d24314e25b31ceb53d51de76d678a0a4dc)
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 */
12a4e3d556SAndreas Gohrclass action_plugin_acl extends DokuWiki_Action_Plugin
13a4e3d556SAndreas 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     */
21a4e3d556SAndreas Gohr    public function register(Doku_Event_Handler $controller)
22a4e3d556SAndreas Gohr    {
238265594dSGerrit Uitslag
24a4e3d556SAndreas 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     */
34a4e3d556SAndreas Gohr    public function handleAjaxCallAcl(Doku_Event $event, $param)
35a4e3d556SAndreas Gohr    {
368265594dSGerrit Uitslag        if ($event->data !== 'plugin_acl') {
378265594dSGerrit Uitslag            return;
388265594dSGerrit Uitslag        }
398265594dSGerrit Uitslag        $event->stopPropagation();
408265594dSGerrit Uitslag        $event->preventDefault();
418265594dSGerrit Uitslag
428265594dSGerrit Uitslag        global $ID;
438265594dSGerrit Uitslag        global $INPUT;
448265594dSGerrit Uitslag
45dda9db03SAndreas Gohr        /** @var $acl admin_plugin_acl */
46dda9db03SAndreas Gohr        $acl = plugin_load('admin', 'acl');
47dda9db03SAndreas Gohr        if (!$acl->isAccessibleByCurrentUser()) {
4800dd0e7eSGerrit Uitslag            echo 'for admins only';
4900dd0e7eSGerrit Uitslag            return;
5000dd0e7eSGerrit Uitslag        }
5100dd0e7eSGerrit Uitslag        if (!checkSecurityToken()) {
5200dd0e7eSGerrit Uitslag            echo 'CRSF Attack';
5300dd0e7eSGerrit Uitslag            return;
5400dd0e7eSGerrit Uitslag        }
558265594dSGerrit Uitslag
568265594dSGerrit Uitslag        $ID = getID();
578265594dSGerrit Uitslag        $acl->handle();
588265594dSGerrit Uitslag
598265594dSGerrit Uitslag        $ajax = $INPUT->str('ajax');
608265594dSGerrit Uitslag        header('Content-Type: text/html; charset=utf-8');
618265594dSGerrit Uitslag
628265594dSGerrit Uitslag        if ($ajax == 'info') {
63a4e3d556SAndreas Gohr            $acl->printInfo();
648265594dSGerrit Uitslag        } elseif ($ajax == 'tree') {
658265594dSGerrit Uitslag            $ns = $INPUT->str('ns');
668265594dSGerrit Uitslag            if ($ns == '*') {
678265594dSGerrit Uitslag                $ns = '';
688265594dSGerrit Uitslag            }
698265594dSGerrit Uitslag            $ns = cleanID($ns);
708265594dSGerrit Uitslag            $lvl = count(explode(':', $ns));
718265594dSGerrit Uitslag            $ns = utf8_encodeFN(str_replace(':', '/', $ns));
728265594dSGerrit Uitslag
73a4e3d556SAndreas Gohr            $data = $acl->makeTree($ns, $ns);
748265594dSGerrit Uitslag
758265594dSGerrit Uitslag            foreach (array_keys($data) as $item) {
768265594dSGerrit Uitslag                $data[$item]['level'] = $lvl + 1;
778265594dSGerrit Uitslag            }
78219fe1dcSGerrit Uitslag            echo html_buildlist(
79a4e3d556SAndreas Gohr                $data,
80a4e3d556SAndreas Gohr                'acl',
81*bff2c9d2SAndreas Gohr                [$acl, 'makeTreeItem'],
82*bff2c9d2SAndreas Gohr                [$acl, 'makeListItem']
83219fe1dcSGerrit Uitslag            );
848265594dSGerrit Uitslag        }
858265594dSGerrit Uitslag    }
868265594dSGerrit Uitslag}
87