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