xref: /dokuwiki/lib/plugins/acl/action.php (revision 5c48379643fe73c0682a2770d0abc793c9bd1513)
18265594dSGerrit Uitslag<?php
28553d24dSAndreas Gohr
38553d24dSAndreas Gohruse dokuwiki\Extension\ActionPlugin;
48553d24dSAndreas Gohruse dokuwiki\Extension\EventHandler;
58553d24dSAndreas Gohruse dokuwiki\Extension\Event;
6d4f83172SAndreas Gohr
78265594dSGerrit Uitslag/**
88265594dSGerrit Uitslag * AJAX call handler for ACL plugin
98265594dSGerrit Uitslag *
108265594dSGerrit Uitslag * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
118265594dSGerrit Uitslag * @author     Andreas Gohr <andi@splitbrain.org>
128265594dSGerrit Uitslag */
138265594dSGerrit Uitslag/**
148265594dSGerrit Uitslag * Register handler
158265594dSGerrit Uitslag */
168553d24dSAndreas Gohrclass action_plugin_acl extends ActionPlugin
17a4e3d556SAndreas Gohr{
188265594dSGerrit Uitslag    /**
198265594dSGerrit Uitslag     * Registers a callback function for a given event
208265594dSGerrit Uitslag     *
21*5c483796SAndreas Gohr     * @param EventHandler $controller DokuWiki's event controller object
228265594dSGerrit Uitslag     * @return void
238265594dSGerrit Uitslag     */
248553d24dSAndreas Gohr    public function register(EventHandler $controller)
25a4e3d556SAndreas Gohr    {
268265594dSGerrit Uitslag
27a4e3d556SAndreas Gohr        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxCallAcl');
288265594dSGerrit Uitslag    }
298265594dSGerrit Uitslag
308265594dSGerrit Uitslag    /**
318265594dSGerrit Uitslag     * AJAX call handler for ACL plugin
328265594dSGerrit Uitslag     *
33*5c483796SAndreas Gohr     * @param Event $event  event object by reference
348265594dSGerrit Uitslag     * @param mixed $param  empty
358265594dSGerrit Uitslag     * @return void
368265594dSGerrit Uitslag     */
378553d24dSAndreas Gohr    public function handleAjaxCallAcl(Event $event, $param)
38a4e3d556SAndreas Gohr    {
398265594dSGerrit Uitslag        if ($event->data !== 'plugin_acl') {
408265594dSGerrit Uitslag            return;
418265594dSGerrit Uitslag        }
428265594dSGerrit Uitslag        $event->stopPropagation();
438265594dSGerrit Uitslag        $event->preventDefault();
448265594dSGerrit Uitslag
458265594dSGerrit Uitslag        global $ID;
468265594dSGerrit Uitslag        global $INPUT;
478265594dSGerrit Uitslag
48dda9db03SAndreas Gohr        /** @var $acl admin_plugin_acl */
49dda9db03SAndreas Gohr        $acl = plugin_load('admin', 'acl');
50dda9db03SAndreas Gohr        if (!$acl->isAccessibleByCurrentUser()) {
5100dd0e7eSGerrit Uitslag            echo 'for admins only';
5200dd0e7eSGerrit Uitslag            return;
5300dd0e7eSGerrit Uitslag        }
5400dd0e7eSGerrit Uitslag        if (!checkSecurityToken()) {
5500dd0e7eSGerrit Uitslag            echo 'CRSF Attack';
5600dd0e7eSGerrit Uitslag            return;
5700dd0e7eSGerrit Uitslag        }
588265594dSGerrit Uitslag
598265594dSGerrit Uitslag        $ID = getID();
608265594dSGerrit Uitslag        $acl->handle();
618265594dSGerrit Uitslag
628265594dSGerrit Uitslag        $ajax = $INPUT->str('ajax');
638265594dSGerrit Uitslag        header('Content-Type: text/html; charset=utf-8');
648265594dSGerrit Uitslag
658265594dSGerrit Uitslag        if ($ajax == 'info') {
66a4e3d556SAndreas Gohr            $acl->printInfo();
678265594dSGerrit Uitslag        } elseif ($ajax == 'tree') {
688265594dSGerrit Uitslag            $ns = $INPUT->str('ns');
698265594dSGerrit Uitslag            if ($ns == '*') {
708265594dSGerrit Uitslag                $ns = '';
718265594dSGerrit Uitslag            }
728265594dSGerrit Uitslag            $ns = cleanID($ns);
738265594dSGerrit Uitslag            $lvl = count(explode(':', $ns));
748265594dSGerrit Uitslag            $ns = utf8_encodeFN(str_replace(':', '/', $ns));
758265594dSGerrit Uitslag
76a4e3d556SAndreas Gohr            $data = $acl->makeTree($ns, $ns);
778265594dSGerrit Uitslag
788265594dSGerrit Uitslag            foreach (array_keys($data) as $item) {
798265594dSGerrit Uitslag                $data[$item]['level'] = $lvl + 1;
808265594dSGerrit Uitslag            }
81219fe1dcSGerrit Uitslag            echo html_buildlist(
82a4e3d556SAndreas Gohr                $data,
83a4e3d556SAndreas Gohr                'acl',
84bff2c9d2SAndreas Gohr                [$acl, 'makeTreeItem'],
85bff2c9d2SAndreas Gohr                [$acl, 'makeListItem']
86219fe1dcSGerrit Uitslag            );
878265594dSGerrit Uitslag        }
888265594dSGerrit Uitslag    }
898265594dSGerrit Uitslag}
90