xref: /dokuwiki/lib/plugins/extension/action.php (revision 71a75f041e8e73a77d75db26da40a770a58dccbe)
1<?php
2/** DokuWiki Plugin extension (Action Component)
3 *
4 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
5 * @author  Andreas Gohr <andi@splitbrain.org>
6 */
7
8class action_plugin_extension extends DokuWiki_Action_Plugin
9{
10
11    /**
12     * Registers a callback function for a given event
13     *
14     * @param Doku_Event_Handler $controller DokuWiki's event controller object
15     * @return void
16     */
17    public function register(Doku_Event_Handler $controller)
18    {
19
20        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info');
21    }
22
23    /**
24     * Create the detail info for a single plugin
25     *
26     * @param Doku_Event $event
27     * @param            $param
28     */
29    public function info(Doku_Event &$event, $param)
30    {
31        global $USERINFO;
32        global $INPUT;
33
34        if ($event->data != 'plugin_extension') return;
35        $event->preventDefault();
36        $event->stopPropagation();
37
38        if (empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])) {
39            http_status(403);
40            echo 'Forbidden';
41            exit;
42        }
43
44        $ext = $INPUT->str('ext');
45        if (!$ext) {
46            http_status(400);
47            echo 'no extension given';
48            return;
49        }
50
51        /** @var helper_plugin_extension_extension $extension */
52        $extension = plugin_load('helper', 'extension_extension');
53        $extension->setExtension($ext);
54
55        $act = $INPUT->str('act');
56        switch ($act) {
57            case 'enable':
58            case 'disable':
59                $json = new JSON();
60                $extension->$act(); //enables/disables
61
62                $reverse = ($act == 'disable') ? 'enable' : 'disable';
63
64                $return = array(
65                    'state'   => $act.'d', // isn't English wonderful? :-)
66                    'reverse' => $reverse,
67                    'label'   => $extension->getLang('btn_'.$reverse)
68                );
69
70                header('Content-Type: application/json');
71                echo $json->encode($return);
72                break;
73
74            case 'info':
75            default:
76                /** @var helper_plugin_extension_list $list */
77                $list = plugin_load('helper', 'extension_list');
78                header('Content-Type: text/html; charset=utf-8');
79                echo $list->makeInfo($extension);
80        }
81    }
82}
83