xref: /dokuwiki/lib/plugins/extension/admin.php (revision 4fd6a1d7ae34e34afb3c0bae47639222f884a1b5)
1788f86d9SMichael Hamann<?php
2d4f83172SAndreas Gohr
38553d24dSAndreas Gohruse dokuwiki\Extension\AdminPlugin;
4d4f83172SAndreas Gohr
5788f86d9SMichael Hamann/**
6788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component)
7788f86d9SMichael Hamann *
8788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
9788f86d9SMichael Hamann * @author  Michael Hamann <michael@content-space.de>
10788f86d9SMichael Hamann */
11788f86d9SMichael Hamann
1202779b18SMichael Hamann/**
1302779b18SMichael Hamann * Admin part of the extension manager
1402779b18SMichael Hamann */
158553d24dSAndreas Gohrclass admin_plugin_extension extends AdminPlugin
1618b1e90aSAndreas Gohr{
17fe2dcfd5SAndreas Gohr    protected $infoFor;
18d7410643SAndreas Gohr    /** @var  helper_plugin_extension_gui */
19d7410643SAndreas Gohr    protected $gui;
20d7410643SAndreas Gohr
21d7410643SAndreas Gohr    /**
22d7410643SAndreas Gohr     * Constructor
23d7410643SAndreas Gohr     *
24d7410643SAndreas Gohr     * loads additional helpers
25d7410643SAndreas Gohr     */
2618b1e90aSAndreas Gohr    public function __construct()
2718b1e90aSAndreas Gohr    {
28d7410643SAndreas Gohr        $this->gui = plugin_load('helper', 'extension_gui');
29d7410643SAndreas Gohr    }
30788f86d9SMichael Hamann
31788f86d9SMichael Hamann    /**
32788f86d9SMichael Hamann     * @return int sort number in admin menu
33788f86d9SMichael Hamann     */
3418b1e90aSAndreas Gohr    public function getMenuSort()
3518b1e90aSAndreas Gohr    {
36788f86d9SMichael Hamann        return 0;
37788f86d9SMichael Hamann    }
38788f86d9SMichael Hamann
39788f86d9SMichael Hamann    /**
40788f86d9SMichael Hamann     * @return bool true if only access for superuser, false is for superusers and moderators
41788f86d9SMichael Hamann     */
4218b1e90aSAndreas Gohr    public function forAdminOnly()
4318b1e90aSAndreas Gohr    {
44788f86d9SMichael Hamann        return true;
45788f86d9SMichael Hamann    }
46788f86d9SMichael Hamann
47788f86d9SMichael Hamann    /**
4802779b18SMichael Hamann     * Execute the requested action(s) and initialize the plugin repository
49788f86d9SMichael Hamann     */
5018b1e90aSAndreas Gohr    public function handle()
5118b1e90aSAndreas Gohr    {
5202779b18SMichael Hamann        global $INPUT;
5302779b18SMichael Hamann        // initialize the remote repository
54788f86d9SMichael Hamann        /* @var helper_plugin_extension_repository $repository */
55788f86d9SMichael Hamann        $repository = $this->loadHelper('extension_repository');
5655332151SAndreas Gohr
5798d21c04SAndreas Gohr        if (!$repository->hasAccess(!$INPUT->bool('purge'))) {
58a72f333fSSatoshi Sahara            $url = $this->gui->tabURL('', ['purge' => 1], '&');
59cf833595SSatoshi Sahara            msg($this->getLang('repo_error') .
600a034b36SAndreas Gohr                ' [<a href="' . $url . '" rel="noreferrer">' . $this->getLang('repo_retry') . '</a>]', -1);
61e45b5c14SAndreas Gohr        }
62e45b5c14SAndreas Gohr
631ec86040SAndreas Gohr        if (!in_array('ssl', stream_get_transports())) {
641ec86040SAndreas Gohr            msg($this->getLang('nossl'), -1);
651ec86040SAndreas Gohr        }
661ec86040SAndreas Gohr
6702779b18SMichael Hamann        /* @var helper_plugin_extension_extension $extension */
6802779b18SMichael Hamann        $extension = $this->loadHelper('extension_extension');
6902779b18SMichael Hamann
7032fdfac2SAndreas Gohr        try {
71fee60c9eSAndreas Gohr            if ($INPUT->post->has('fn') && checkSecurityToken()) {
7202779b18SMichael Hamann                $actions = $INPUT->post->arr('fn');
7302779b18SMichael Hamann                foreach ($actions as $action => $extensions) {
7402779b18SMichael Hamann                    foreach ($extensions as $extname => $label) {
7502779b18SMichael Hamann                        switch ($action) {
7602779b18SMichael Hamann                            case 'install':
7702779b18SMichael Hamann                            case 'reinstall':
7802779b18SMichael Hamann                            case 'update':
79519895b5SAndreas Gohr                                $extension->setExtension($extname);
805c0b30bfSAndreas Gohr                                $installed = $extension->installOrUpdate();
81fe2dcfd5SAndreas Gohr                                foreach ($installed as $info) {
82cf833595SSatoshi Sahara                                    msg(sprintf(
8364159a61SAndreas Gohr                                        $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'),
84dccd6b2bSAndreas Gohr                                        $info['base']
85dccd6b2bSAndreas Gohr                                    ), 1);
865c0b30bfSAndreas Gohr                                }
8702779b18SMichael Hamann                                break;
8802779b18SMichael Hamann                            case 'uninstall':
89519895b5SAndreas Gohr                                $extension->setExtension($extname);
9002779b18SMichael Hamann                                $status = $extension->uninstall();
917e8500eeSGerrit Uitslag                                if ($status) {
92cf833595SSatoshi Sahara                                    msg(sprintf(
9364159a61SAndreas Gohr                                        $this->getLang('msg_delete_success'),
94dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
95dccd6b2bSAndreas Gohr                                    ), 1);
967e8500eeSGerrit Uitslag                                } else {
97cf833595SSatoshi Sahara                                    msg(sprintf(
9864159a61SAndreas Gohr                                        $this->getLang('msg_delete_failed'),
99dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
100dccd6b2bSAndreas Gohr                                    ), -1);
10102779b18SMichael Hamann                                }
10202779b18SMichael Hamann                                break;
10318b1e90aSAndreas Gohr                            case 'enable':
104519895b5SAndreas Gohr                                $extension->setExtension($extname);
10502779b18SMichael Hamann                                $status = $extension->enable();
10602779b18SMichael Hamann                                if ($status !== true) {
10702779b18SMichael Hamann                                    msg($status, -1);
10802779b18SMichael Hamann                                } else {
109cf833595SSatoshi Sahara                                    msg(sprintf(
110cf833595SSatoshi Sahara                                        $this->getLang('msg_enabled'),
111dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
112dccd6b2bSAndreas Gohr                                    ), 1);
11302779b18SMichael Hamann                                }
11402779b18SMichael Hamann                                break;
11518b1e90aSAndreas Gohr                            case 'disable':
116519895b5SAndreas Gohr                                $extension->setExtension($extname);
11702779b18SMichael Hamann                                $status = $extension->disable();
11802779b18SMichael Hamann                                if ($status !== true) {
11902779b18SMichael Hamann                                    msg($status, -1);
12002779b18SMichael Hamann                                } else {
121cf833595SSatoshi Sahara                                    msg(sprintf(
122cf833595SSatoshi Sahara                                        $this->getLang('msg_disabled'),
123dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
124dccd6b2bSAndreas Gohr                                    ), 1);
12502779b18SMichael Hamann                                }
12602779b18SMichael Hamann                                break;
12702779b18SMichael Hamann                        }
12802779b18SMichael Hamann                    }
12902779b18SMichael Hamann                }
130a72f333fSSatoshi Sahara                send_redirect($this->gui->tabURL('', [], '&', true));
131fee60c9eSAndreas Gohr            } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) {
1329ea219ceSPhy                $installed = $extension->installFromURL(
1339ea219ceSPhy                    $INPUT->post->str('installurl'),
134dccd6b2bSAndreas Gohr                    $INPUT->post->bool('overwrite')
135dccd6b2bSAndreas Gohr                );
136fe2dcfd5SAndreas Gohr                foreach ($installed as $info) {
137cf833595SSatoshi Sahara                    msg(sprintf(
138cf833595SSatoshi Sahara                        $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'),
139dccd6b2bSAndreas Gohr                        $info['base']
140dccd6b2bSAndreas Gohr                    ), 1);
141fee60c9eSAndreas Gohr                }
142a72f333fSSatoshi Sahara                send_redirect($this->gui->tabURL('', [], '&', true));
143fee60c9eSAndreas Gohr            } elseif (isset($_FILES['installfile']) && checkSecurityToken()) {
144bc20e40aSPhy                $installed = $extension->installFromUpload('installfile', $INPUT->post->bool('overwrite'));
145fe2dcfd5SAndreas Gohr                foreach ($installed as $info) {
146cf833595SSatoshi Sahara                    msg(sprintf(
147cf833595SSatoshi Sahara                        $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'),
148dccd6b2bSAndreas Gohr                        $info['base']
149dccd6b2bSAndreas Gohr                    ), 1);
150fee60c9eSAndreas Gohr                }
151a72f333fSSatoshi Sahara                send_redirect($this->gui->tabURL('', [], '&', true));
15232fdfac2SAndreas Gohr            }
153fee60c9eSAndreas Gohr        } catch (Exception $e) {
154fee60c9eSAndreas Gohr            msg($e->getMessage(), -1);
155a72f333fSSatoshi Sahara            send_redirect($this->gui->tabURL('', [], '&', true));
156fee60c9eSAndreas Gohr        }
157788f86d9SMichael Hamann    }
158788f86d9SMichael Hamann
159788f86d9SMichael Hamann    /**
16002779b18SMichael Hamann     * Render HTML output
161788f86d9SMichael Hamann     */
16218b1e90aSAndreas Gohr    public function html()
16318b1e90aSAndreas Gohr    {
164*4fd6a1d7SAndreas Gohr        echo '<h1>' . $this->getLang('menu') . '</h1>';
165*4fd6a1d7SAndreas Gohr
166*4fd6a1d7SAndreas Gohr        $ext = \dokuwiki\plugin\extension\Extension::createFromId('aichat');
167*4fd6a1d7SAndreas Gohr        $gui = new \dokuwiki\plugin\extension\GuiExtension($ext);
168*4fd6a1d7SAndreas Gohr        echo $gui->render();
169*4fd6a1d7SAndreas Gohr
170*4fd6a1d7SAndreas Gohr        $ext = \dokuwiki\plugin\extension\Extension::createFromId('gallery');
171*4fd6a1d7SAndreas Gohr        $gui = new \dokuwiki\plugin\extension\GuiExtension($ext);
172*4fd6a1d7SAndreas Gohr        echo $gui->render();
173*4fd6a1d7SAndreas Gohr
174*4fd6a1d7SAndreas Gohr        $ext = \dokuwiki\plugin\extension\Extension::createFromId('extension');
175*4fd6a1d7SAndreas Gohr        $gui = new \dokuwiki\plugin\extension\GuiExtension($ext);
176*4fd6a1d7SAndreas Gohr        echo $gui->render();
177*4fd6a1d7SAndreas Gohr
178*4fd6a1d7SAndreas Gohr        $ext = \dokuwiki\plugin\extension\Extension::createFromId('top');
179*4fd6a1d7SAndreas Gohr        $gui = new \dokuwiki\plugin\extension\GuiExtension($ext);
180*4fd6a1d7SAndreas Gohr        echo $gui->render();
181*4fd6a1d7SAndreas Gohr
182*4fd6a1d7SAndreas Gohr        return;
183*4fd6a1d7SAndreas Gohr
184a72f333fSSatoshi Sahara        echo '<div id="extension__manager">' . DOKU_LF;
185788f86d9SMichael Hamann
186d7410643SAndreas Gohr        $this->gui->tabNavigation();
187d7410643SAndreas Gohr
1885d7f3164SAndreas Gohr        switch ($this->gui->currentTab()) {
189d7410643SAndreas Gohr            case 'search':
1901dd40c86SAndreas Gohr                $this->gui->tabSearch();
191d7410643SAndreas Gohr                break;
1925d7f3164SAndreas Gohr            case 'templates':
1931dd40c86SAndreas Gohr                $this->gui->tabTemplates();
1945d7f3164SAndreas Gohr                break;
195ea9f3f90SAndreas Gohr            case 'install':
196ea9f3f90SAndreas Gohr                $this->gui->tabInstall();
197ea9f3f90SAndreas Gohr                break;
198d7410643SAndreas Gohr            case 'plugins':
199d7410643SAndreas Gohr            default:
2001dd40c86SAndreas Gohr                $this->gui->tabPlugins();
201d7410643SAndreas Gohr        }
202d7410643SAndreas Gohr
203a72f333fSSatoshi Sahara        echo '</div>' . DOKU_LF;
204788f86d9SMichael Hamann    }
205788f86d9SMichael Hamann}
206788f86d9SMichael Hamann
207788f86d9SMichael Hamann// vim:ts=4:sw=4:et:
208