xref: /dokuwiki/lib/plugins/extension/admin.php (revision cf833595379aeadde32b3d137b82554393a572ed)
1788f86d9SMichael Hamann<?php
2788f86d9SMichael Hamann/**
3788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component)
4788f86d9SMichael Hamann *
5788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6788f86d9SMichael Hamann * @author  Michael Hamann <michael@content-space.de>
7788f86d9SMichael Hamann */
8788f86d9SMichael Hamann
902779b18SMichael Hamann/**
1002779b18SMichael Hamann * Admin part of the extension manager
1102779b18SMichael Hamann */
1218b1e90aSAndreas Gohrclass admin_plugin_extension extends DokuWiki_Admin_Plugin
1318b1e90aSAndreas Gohr{
1402779b18SMichael Hamann    protected $infoFor = null;
15d7410643SAndreas Gohr    /** @var  helper_plugin_extension_gui */
16d7410643SAndreas Gohr    protected $gui;
17d7410643SAndreas Gohr
18d7410643SAndreas Gohr    /**
19d7410643SAndreas Gohr     * Constructor
20d7410643SAndreas Gohr     *
21d7410643SAndreas Gohr     * loads additional helpers
22d7410643SAndreas Gohr     */
2318b1e90aSAndreas Gohr    public function __construct()
2418b1e90aSAndreas Gohr    {
25d7410643SAndreas Gohr        $this->gui = plugin_load('helper', 'extension_gui');
26d7410643SAndreas Gohr    }
27788f86d9SMichael Hamann
28788f86d9SMichael Hamann    /**
29788f86d9SMichael Hamann     * @return int sort number in admin menu
30788f86d9SMichael Hamann     */
3118b1e90aSAndreas Gohr    public function getMenuSort()
3218b1e90aSAndreas Gohr    {
33788f86d9SMichael Hamann        return 0;
34788f86d9SMichael Hamann    }
35788f86d9SMichael Hamann
36788f86d9SMichael Hamann    /**
37788f86d9SMichael Hamann     * @return bool true if only access for superuser, false is for superusers and moderators
38788f86d9SMichael Hamann     */
3918b1e90aSAndreas Gohr    public function forAdminOnly()
4018b1e90aSAndreas Gohr    {
41788f86d9SMichael Hamann        return true;
42788f86d9SMichael Hamann    }
43788f86d9SMichael Hamann
44788f86d9SMichael Hamann    /**
4502779b18SMichael Hamann     * Execute the requested action(s) and initialize the plugin repository
46788f86d9SMichael Hamann     */
4718b1e90aSAndreas Gohr    public function handle()
4818b1e90aSAndreas Gohr    {
4902779b18SMichael Hamann        global $INPUT;
5002779b18SMichael Hamann        // initialize the remote repository
51788f86d9SMichael Hamann        /* @var helper_plugin_extension_repository $repository */
52788f86d9SMichael Hamann        $repository = $this->loadHelper('extension_repository');
5355332151SAndreas Gohr
5498d21c04SAndreas Gohr        if (!$repository->hasAccess(!$INPUT->bool('purge'))) {
55d7410643SAndreas Gohr            $url = $this->gui->tabURL('', array('purge' => 1));
56*cf833595SSatoshi Sahara            msg($this->getLang('repo_error').
57*cf833595SSatoshi Sahara                ' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1
58*cf833595SSatoshi Sahara            );
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();
79fee60c9eSAndreas Gohr                                foreach ($installed as $ext => $info) {
80*cf833595SSatoshi Sahara                                    msg(sprintf(
8164159a61SAndreas Gohr                                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
82*cf833595SSatoshi Sahara                                        $info['base']), 1
8364159a61SAndreas Gohr                                    );
845c0b30bfSAndreas Gohr                                }
8502779b18SMichael Hamann                                break;
8602779b18SMichael Hamann                            case 'uninstall':
87519895b5SAndreas Gohr                                $extension->setExtension($extname);
8802779b18SMichael Hamann                                $status = $extension->uninstall();
897e8500eeSGerrit Uitslag                                if ($status) {
90*cf833595SSatoshi Sahara                                    msg(sprintf(
9164159a61SAndreas Gohr                                        $this->getLang('msg_delete_success'),
92*cf833595SSatoshi Sahara                                        hsc($extension->getDisplayName())), 1
9364159a61SAndreas Gohr                                    );
947e8500eeSGerrit Uitslag                                } else {
95*cf833595SSatoshi Sahara                                    msg(sprintf(
9664159a61SAndreas Gohr                                        $this->getLang('msg_delete_failed'),
97*cf833595SSatoshi Sahara                                        hsc($extension->getDisplayName())), -1
9864159a61SAndreas Gohr                                    );
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 {
107*cf833595SSatoshi Sahara                                    msg(sprintf(
108*cf833595SSatoshi Sahara                                        $this->getLang('msg_enabled'),
109*cf833595SSatoshi Sahara                                        hsc($extension->getDisplayName())), 1
110*cf833595SSatoshi Sahara                                    );
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 {
119*cf833595SSatoshi Sahara                                    msg(sprintf(
120*cf833595SSatoshi Sahara                                        $this->getLang('msg_disabled'),
121*cf833595SSatoshi Sahara                                        hsc($extension->getDisplayName())), 1
122*cf833595SSatoshi Sahara                                    );
12302779b18SMichael Hamann                                }
12402779b18SMichael Hamann                                break;
12502779b18SMichael Hamann                        }
12602779b18SMichael Hamann                    }
12702779b18SMichael Hamann                }
12832fdfac2SAndreas Gohr                send_redirect($this->gui->tabURL('', array(), '&', true));
129fee60c9eSAndreas Gohr            } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) {
130fee60c9eSAndreas Gohr                $installed = $extension->installFromURL($INPUT->post->str('installurl'));
131fee60c9eSAndreas Gohr                foreach ($installed as $ext => $info) {
132*cf833595SSatoshi Sahara                    msg(sprintf(
133*cf833595SSatoshi Sahara                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
134*cf833595SSatoshi Sahara                        $info['base']), 1
135*cf833595SSatoshi Sahara                    );
136fee60c9eSAndreas Gohr                }
13732fdfac2SAndreas Gohr                send_redirect($this->gui->tabURL('', array(), '&', true));
138fee60c9eSAndreas Gohr            } elseif (isset($_FILES['installfile']) && checkSecurityToken()) {
139fee60c9eSAndreas Gohr                $installed = $extension->installFromUpload('installfile');
140fee60c9eSAndreas Gohr                foreach ($installed as $ext => $info) {
141*cf833595SSatoshi Sahara                    msg(sprintf(
142*cf833595SSatoshi Sahara                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
143*cf833595SSatoshi Sahara                        $info['base']), 1
144*cf833595SSatoshi Sahara                    );
145fee60c9eSAndreas Gohr                }
14632fdfac2SAndreas Gohr                send_redirect($this->gui->tabURL('', array(), '&', true));
14732fdfac2SAndreas Gohr            }
148fee60c9eSAndreas Gohr        } catch (Exception $e) {
149fee60c9eSAndreas Gohr            msg($e->getMessage(), -1);
15032fdfac2SAndreas Gohr            send_redirect($this->gui->tabURL('', array(), '&', true));
151fee60c9eSAndreas Gohr        }
152788f86d9SMichael Hamann    }
153788f86d9SMichael Hamann
154788f86d9SMichael Hamann    /**
15502779b18SMichael Hamann     * Render HTML output
156788f86d9SMichael Hamann     */
15718b1e90aSAndreas Gohr    public function html()
15818b1e90aSAndreas Gohr    {
159788f86d9SMichael Hamann        ptln('<h1>'.$this->getLang('menu').'</h1>');
16002779b18SMichael Hamann        ptln('<div id="extension__manager">');
161788f86d9SMichael Hamann
162d7410643SAndreas Gohr        $this->gui->tabNavigation();
163d7410643SAndreas Gohr
1645d7f3164SAndreas Gohr        switch ($this->gui->currentTab()) {
165d7410643SAndreas Gohr            case 'search':
1661dd40c86SAndreas Gohr                $this->gui->tabSearch();
167d7410643SAndreas Gohr                break;
1685d7f3164SAndreas Gohr            case 'templates':
1691dd40c86SAndreas Gohr                $this->gui->tabTemplates();
1705d7f3164SAndreas Gohr                break;
171ea9f3f90SAndreas Gohr            case 'install':
172ea9f3f90SAndreas Gohr                $this->gui->tabInstall();
173ea9f3f90SAndreas Gohr                break;
174d7410643SAndreas Gohr            case 'plugins':
175d7410643SAndreas Gohr            default:
1761dd40c86SAndreas Gohr                $this->gui->tabPlugins();
177d7410643SAndreas Gohr        }
178d7410643SAndreas Gohr
17902779b18SMichael Hamann        ptln('</div>');
180788f86d9SMichael Hamann    }
181788f86d9SMichael Hamann}
182788f86d9SMichael Hamann
183788f86d9SMichael Hamann// vim:ts=4:sw=4:et:
184