xref: /dokuwiki/lib/plugins/extension/admin.php (revision dccd6b2bba7367e4d1d2d7aa84c9f9d15584b593)
1788f86d9SMichael Hamann<?php
28553d24dSAndreas Gohruse dokuwiki\Extension\AdminPlugin;
3788f86d9SMichael Hamann/**
4788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component)
5788f86d9SMichael Hamann *
6788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7788f86d9SMichael Hamann * @author  Michael Hamann <michael@content-space.de>
8788f86d9SMichael Hamann */
9788f86d9SMichael Hamann
1002779b18SMichael Hamann/**
1102779b18SMichael Hamann * Admin part of the extension manager
1202779b18SMichael Hamann */
138553d24dSAndreas Gohrclass admin_plugin_extension extends AdminPlugin
1418b1e90aSAndreas Gohr{
15fe2dcfd5SAndreas Gohr    protected $infoFor;
16d7410643SAndreas Gohr    /** @var  helper_plugin_extension_gui */
17d7410643SAndreas Gohr    protected $gui;
18d7410643SAndreas Gohr
19d7410643SAndreas Gohr    /**
20d7410643SAndreas Gohr     * Constructor
21d7410643SAndreas Gohr     *
22d7410643SAndreas Gohr     * loads additional helpers
23d7410643SAndreas Gohr     */
2418b1e90aSAndreas Gohr    public function __construct()
2518b1e90aSAndreas Gohr    {
26d7410643SAndreas Gohr        $this->gui = plugin_load('helper', 'extension_gui');
27d7410643SAndreas Gohr    }
28788f86d9SMichael Hamann
29788f86d9SMichael Hamann    /**
30788f86d9SMichael Hamann     * @return int sort number in admin menu
31788f86d9SMichael Hamann     */
3218b1e90aSAndreas Gohr    public function getMenuSort()
3318b1e90aSAndreas Gohr    {
34788f86d9SMichael Hamann        return 0;
35788f86d9SMichael Hamann    }
36788f86d9SMichael Hamann
37788f86d9SMichael Hamann    /**
38788f86d9SMichael Hamann     * @return bool true if only access for superuser, false is for superusers and moderators
39788f86d9SMichael Hamann     */
4018b1e90aSAndreas Gohr    public function forAdminOnly()
4118b1e90aSAndreas Gohr    {
42788f86d9SMichael Hamann        return true;
43788f86d9SMichael Hamann    }
44788f86d9SMichael Hamann
45788f86d9SMichael Hamann    /**
4602779b18SMichael Hamann     * Execute the requested action(s) and initialize the plugin repository
47788f86d9SMichael Hamann     */
4818b1e90aSAndreas Gohr    public function handle()
4918b1e90aSAndreas Gohr    {
5002779b18SMichael Hamann        global $INPUT;
5102779b18SMichael Hamann        // initialize the remote repository
52788f86d9SMichael Hamann        /* @var helper_plugin_extension_repository $repository */
53788f86d9SMichael Hamann        $repository = $this->loadHelper('extension_repository');
5455332151SAndreas Gohr
5598d21c04SAndreas Gohr        if (!$repository->hasAccess(!$INPUT->bool('purge'))) {
56a72f333fSSatoshi Sahara            $url = $this->gui->tabURL('', ['purge' => 1], '&');
57cf833595SSatoshi Sahara            msg($this->getLang('repo_error').
58*dccd6b2bSAndreas Gohr                ' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1);
59e45b5c14SAndreas Gohr        }
60e45b5c14SAndreas Gohr
611ec86040SAndreas Gohr        if (!in_array('ssl', stream_get_transports())) {
621ec86040SAndreas Gohr            msg($this->getLang('nossl'), -1);
631ec86040SAndreas Gohr        }
641ec86040SAndreas Gohr
6502779b18SMichael Hamann        /* @var helper_plugin_extension_extension $extension */
6602779b18SMichael Hamann        $extension = $this->loadHelper('extension_extension');
6702779b18SMichael Hamann
6832fdfac2SAndreas Gohr        try {
69fee60c9eSAndreas Gohr            if ($INPUT->post->has('fn') && checkSecurityToken()) {
7002779b18SMichael Hamann                $actions = $INPUT->post->arr('fn');
7102779b18SMichael Hamann                foreach ($actions as $action => $extensions) {
7202779b18SMichael Hamann                    foreach ($extensions as $extname => $label) {
7302779b18SMichael Hamann                        switch ($action) {
7402779b18SMichael Hamann                            case 'install':
7502779b18SMichael Hamann                            case 'reinstall':
7602779b18SMichael Hamann                            case 'update':
77519895b5SAndreas Gohr                                $extension->setExtension($extname);
785c0b30bfSAndreas Gohr                                $installed = $extension->installOrUpdate();
79fe2dcfd5SAndreas Gohr                                foreach ($installed as $info) {
80cf833595SSatoshi Sahara                                    msg(sprintf(
8164159a61SAndreas Gohr                                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
82*dccd6b2bSAndreas Gohr                                        $info['base']
83*dccd6b2bSAndreas Gohr                                    ), 1);
845c0b30bfSAndreas Gohr                                }
8502779b18SMichael Hamann                                break;
8602779b18SMichael Hamann                            case 'uninstall':
87519895b5SAndreas Gohr                                $extension->setExtension($extname);
8802779b18SMichael Hamann                                $status = $extension->uninstall();
897e8500eeSGerrit Uitslag                                if ($status) {
90cf833595SSatoshi Sahara                                    msg(sprintf(
9164159a61SAndreas Gohr                                        $this->getLang('msg_delete_success'),
92*dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
93*dccd6b2bSAndreas Gohr                                    ), 1);
947e8500eeSGerrit Uitslag                                } else {
95cf833595SSatoshi Sahara                                    msg(sprintf(
9664159a61SAndreas Gohr                                        $this->getLang('msg_delete_failed'),
97*dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
98*dccd6b2bSAndreas Gohr                                    ), -1);
9902779b18SMichael Hamann                                }
10002779b18SMichael Hamann                                break;
10118b1e90aSAndreas Gohr                            case 'enable':
102519895b5SAndreas Gohr                                $extension->setExtension($extname);
10302779b18SMichael Hamann                                $status = $extension->enable();
10402779b18SMichael Hamann                                if ($status !== true) {
10502779b18SMichael Hamann                                    msg($status, -1);
10602779b18SMichael Hamann                                } else {
107cf833595SSatoshi Sahara                                    msg(sprintf(
108cf833595SSatoshi Sahara                                        $this->getLang('msg_enabled'),
109*dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
110*dccd6b2bSAndreas Gohr                                    ), 1);
11102779b18SMichael Hamann                                }
11202779b18SMichael Hamann                                break;
11318b1e90aSAndreas Gohr                            case 'disable':
114519895b5SAndreas Gohr                                $extension->setExtension($extname);
11502779b18SMichael Hamann                                $status = $extension->disable();
11602779b18SMichael Hamann                                if ($status !== true) {
11702779b18SMichael Hamann                                    msg($status, -1);
11802779b18SMichael Hamann                                } else {
119cf833595SSatoshi Sahara                                    msg(sprintf(
120cf833595SSatoshi Sahara                                        $this->getLang('msg_disabled'),
121*dccd6b2bSAndreas Gohr                                        hsc($extension->getDisplayName())
122*dccd6b2bSAndreas Gohr                                    ), 1);
12302779b18SMichael Hamann                                }
12402779b18SMichael Hamann                                break;
12502779b18SMichael Hamann                        }
12602779b18SMichael Hamann                    }
12702779b18SMichael Hamann                }
128a72f333fSSatoshi Sahara                send_redirect($this->gui->tabURL('', [], '&', true));
129fee60c9eSAndreas Gohr            } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) {
1309ea219ceSPhy                $installed = $extension->installFromURL(
1319ea219ceSPhy                    $INPUT->post->str('installurl'),
132*dccd6b2bSAndreas Gohr                    $INPUT->post->bool('overwrite')
133*dccd6b2bSAndreas Gohr                );
134fe2dcfd5SAndreas Gohr                foreach ($installed as $info) {
135cf833595SSatoshi Sahara                    msg(sprintf(
136cf833595SSatoshi Sahara                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
137*dccd6b2bSAndreas Gohr                        $info['base']
138*dccd6b2bSAndreas Gohr                    ), 1);
139fee60c9eSAndreas Gohr                }
140a72f333fSSatoshi Sahara                send_redirect($this->gui->tabURL('', [], '&', true));
141fee60c9eSAndreas Gohr            } elseif (isset($_FILES['installfile']) && checkSecurityToken()) {
142bc20e40aSPhy                $installed = $extension->installFromUpload('installfile', $INPUT->post->bool('overwrite'));
143fe2dcfd5SAndreas Gohr                foreach ($installed as $info) {
144cf833595SSatoshi Sahara                    msg(sprintf(
145cf833595SSatoshi Sahara                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
146*dccd6b2bSAndreas Gohr                        $info['base']
147*dccd6b2bSAndreas Gohr                    ), 1);
148fee60c9eSAndreas Gohr                }
149a72f333fSSatoshi Sahara                send_redirect($this->gui->tabURL('', [], '&', true));
15032fdfac2SAndreas Gohr            }
151fee60c9eSAndreas Gohr        } catch (Exception $e) {
152fee60c9eSAndreas Gohr            msg($e->getMessage(), -1);
153a72f333fSSatoshi Sahara            send_redirect($this->gui->tabURL('', [], '&', true));
154fee60c9eSAndreas Gohr        }
155788f86d9SMichael Hamann    }
156788f86d9SMichael Hamann
157788f86d9SMichael Hamann    /**
15802779b18SMichael Hamann     * Render HTML output
159788f86d9SMichael Hamann     */
16018b1e90aSAndreas Gohr    public function html()
16118b1e90aSAndreas Gohr    {
162a72f333fSSatoshi Sahara        echo '<h1>'.$this->getLang('menu').'</h1>'.DOKU_LF;
163a72f333fSSatoshi Sahara        echo '<div id="extension__manager">'.DOKU_LF;
164788f86d9SMichael Hamann
165d7410643SAndreas Gohr        $this->gui->tabNavigation();
166d7410643SAndreas Gohr
1675d7f3164SAndreas Gohr        switch ($this->gui->currentTab()) {
168d7410643SAndreas Gohr            case 'search':
1691dd40c86SAndreas Gohr                $this->gui->tabSearch();
170d7410643SAndreas Gohr                break;
1715d7f3164SAndreas Gohr            case 'templates':
1721dd40c86SAndreas Gohr                $this->gui->tabTemplates();
1735d7f3164SAndreas Gohr                break;
174ea9f3f90SAndreas Gohr            case 'install':
175ea9f3f90SAndreas Gohr                $this->gui->tabInstall();
176ea9f3f90SAndreas Gohr                break;
177d7410643SAndreas Gohr            case 'plugins':
178d7410643SAndreas Gohr            default:
1791dd40c86SAndreas Gohr                $this->gui->tabPlugins();
180d7410643SAndreas Gohr        }
181d7410643SAndreas Gohr
182a72f333fSSatoshi Sahara        echo '</div>'.DOKU_LF;
183788f86d9SMichael Hamann    }
184788f86d9SMichael Hamann}
185788f86d9SMichael Hamann
186788f86d9SMichael Hamann// vim:ts=4:sw=4:et:
187