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