xref: /dokuwiki/lib/plugins/extension/admin.php (revision 64159a61e94d0ce680071c8890e144982c3a8cbe)
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 */
12788f86d9SMichael Hamannclass admin_plugin_extension extends DokuWiki_Admin_Plugin {
1302779b18SMichael Hamann    protected $infoFor = null;
14d7410643SAndreas Gohr    /** @var  helper_plugin_extension_gui */
15d7410643SAndreas Gohr    protected $gui;
16d7410643SAndreas Gohr
17d7410643SAndreas Gohr    /**
18d7410643SAndreas Gohr     * Constructor
19d7410643SAndreas Gohr     *
20d7410643SAndreas Gohr     * loads additional helpers
21d7410643SAndreas Gohr     */
22d7410643SAndreas Gohr    public function __construct() {
23d7410643SAndreas Gohr        $this->gui = plugin_load('helper', 'extension_gui');
24d7410643SAndreas Gohr    }
25788f86d9SMichael Hamann
26788f86d9SMichael Hamann    /**
27788f86d9SMichael Hamann     * @return int sort number in admin menu
28788f86d9SMichael Hamann     */
29788f86d9SMichael Hamann    public function getMenuSort() {
30788f86d9SMichael Hamann        return 0;
31788f86d9SMichael Hamann    }
32788f86d9SMichael Hamann
33788f86d9SMichael Hamann    /**
34788f86d9SMichael Hamann     * @return bool true if only access for superuser, false is for superusers and moderators
35788f86d9SMichael Hamann     */
36788f86d9SMichael Hamann    public function forAdminOnly() {
37788f86d9SMichael Hamann        return true;
38788f86d9SMichael Hamann    }
39788f86d9SMichael Hamann
40788f86d9SMichael Hamann    /**
4102779b18SMichael Hamann     * Execute the requested action(s) and initialize the plugin repository
42788f86d9SMichael Hamann     */
43788f86d9SMichael Hamann    public function handle() {
4402779b18SMichael Hamann        global $INPUT;
4502779b18SMichael Hamann        // initialize the remote repository
46788f86d9SMichael Hamann        /* @var helper_plugin_extension_repository $repository */
47788f86d9SMichael Hamann        $repository = $this->loadHelper('extension_repository');
4855332151SAndreas Gohr
49e45b5c14SAndreas Gohr        if(!$repository->hasAccess()) {
50d7410643SAndreas Gohr            $url = $this->gui->tabURL('', array('purge' => 1));
517944abddSAndreas Gohr            msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1);
52e45b5c14SAndreas Gohr        }
53e45b5c14SAndreas Gohr
541ec86040SAndreas Gohr        if(!in_array('ssl', stream_get_transports())) {
551ec86040SAndreas Gohr            msg($this->getLang('nossl'), -1);
561ec86040SAndreas Gohr        }
571ec86040SAndreas Gohr
5802779b18SMichael Hamann        /* @var helper_plugin_extension_extension $extension */
5902779b18SMichael Hamann        $extension = $this->loadHelper('extension_extension');
6002779b18SMichael Hamann
6132fdfac2SAndreas Gohr        try {
62fee60c9eSAndreas Gohr            if($INPUT->post->has('fn') && checkSecurityToken()) {
6302779b18SMichael Hamann                $actions = $INPUT->post->arr('fn');
6402779b18SMichael Hamann                foreach($actions as $action => $extensions) {
6502779b18SMichael Hamann                    foreach($extensions as $extname => $label) {
6602779b18SMichael Hamann                        switch($action) {
6702779b18SMichael Hamann                            case 'install':
6802779b18SMichael Hamann                            case 'reinstall':
6902779b18SMichael Hamann                            case 'update':
70519895b5SAndreas Gohr                                $extension->setExtension($extname);
715c0b30bfSAndreas Gohr                                $installed = $extension->installOrUpdate();
72fee60c9eSAndreas Gohr                                foreach($installed as $ext => $info) {
73*64159a61SAndreas Gohr                                    msg(
74*64159a61SAndreas Gohr                                        sprintf(
75*64159a61SAndreas Gohr                                            $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'),
76*64159a61SAndreas Gohr                                            $info['base']
77*64159a61SAndreas Gohr                                        ),
78*64159a61SAndreas Gohr                                        1
79*64159a61SAndreas Gohr                                    );
805c0b30bfSAndreas Gohr                                }
8102779b18SMichael Hamann                                break;
8202779b18SMichael Hamann                            case 'uninstall':
83519895b5SAndreas Gohr                                $extension->setExtension($extname);
8402779b18SMichael Hamann                                $status = $extension->uninstall();
857e8500eeSGerrit Uitslag                                if($status) {
86*64159a61SAndreas Gohr                                    msg(
87*64159a61SAndreas Gohr                                        sprintf(
88*64159a61SAndreas Gohr                                            $this->getLang('msg_delete_success'),
89*64159a61SAndreas Gohr                                            hsc($extension->getDisplayName())
90*64159a61SAndreas Gohr                                        ),
91*64159a61SAndreas Gohr                                        1
92*64159a61SAndreas Gohr                                    );
937e8500eeSGerrit Uitslag                                } else {
94*64159a61SAndreas Gohr                                    msg(
95*64159a61SAndreas Gohr                                        sprintf(
96*64159a61SAndreas Gohr                                            $this->getLang('msg_delete_failed'),
97*64159a61SAndreas Gohr                                            hsc($extension->getDisplayName())
98*64159a61SAndreas Gohr                                        ),
99*64159a61SAndreas Gohr                                        -1
100*64159a61SAndreas Gohr                                    );
10102779b18SMichael Hamann                                }
10202779b18SMichael Hamann                                break;
10302779b18SMichael Hamann                            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 {
109813d7e09SAndreas Gohr                                    msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1);
11002779b18SMichael Hamann                                }
11102779b18SMichael Hamann                                break;
11202779b18SMichael Hamann                            case 'disable';
113519895b5SAndreas Gohr                                $extension->setExtension($extname);
11402779b18SMichael Hamann                                $status = $extension->disable();
11502779b18SMichael Hamann                                if($status !== true) {
11602779b18SMichael Hamann                                    msg($status, -1);
11702779b18SMichael Hamann                                } else {
118813d7e09SAndreas Gohr                                    msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1);
11902779b18SMichael Hamann                                }
12002779b18SMichael Hamann                                break;
12102779b18SMichael Hamann                        }
12202779b18SMichael Hamann                    }
12302779b18SMichael Hamann                }
12432fdfac2SAndreas Gohr                send_redirect($this->gui->tabURL('', array(), '&', true));
125fee60c9eSAndreas Gohr            } elseif($INPUT->post->str('installurl') && checkSecurityToken()) {
126fee60c9eSAndreas Gohr                $installed = $extension->installFromURL($INPUT->post->str('installurl'));
127fee60c9eSAndreas Gohr                foreach($installed as $ext => $info) {
128fee60c9eSAndreas Gohr                    msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
129fee60c9eSAndreas Gohr                }
13032fdfac2SAndreas Gohr                send_redirect($this->gui->tabURL('', array(), '&', true));
131fee60c9eSAndreas Gohr            } elseif(isset($_FILES['installfile']) && checkSecurityToken()) {
132fee60c9eSAndreas Gohr                $installed = $extension->installFromUpload('installfile');
133fee60c9eSAndreas Gohr                foreach($installed as $ext => $info) {
134fee60c9eSAndreas Gohr                    msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
135fee60c9eSAndreas Gohr                }
13632fdfac2SAndreas Gohr                send_redirect($this->gui->tabURL('', array(), '&', true));
13732fdfac2SAndreas Gohr            }
13832fdfac2SAndreas Gohr
139fee60c9eSAndreas Gohr        } catch(Exception $e) {
140fee60c9eSAndreas Gohr            msg($e->getMessage(), -1);
14132fdfac2SAndreas Gohr            send_redirect($this->gui->tabURL('', array(), '&', true));
142fee60c9eSAndreas Gohr        }
14332fdfac2SAndreas Gohr
144788f86d9SMichael Hamann    }
145788f86d9SMichael Hamann
146788f86d9SMichael Hamann    /**
14702779b18SMichael Hamann     * Render HTML output
148788f86d9SMichael Hamann     */
149788f86d9SMichael Hamann    public function html() {
150788f86d9SMichael Hamann        ptln('<h1>'.$this->getLang('menu').'</h1>');
15102779b18SMichael Hamann        ptln('<div id="extension__manager">');
152788f86d9SMichael Hamann
153d7410643SAndreas Gohr        $this->gui->tabNavigation();
154d7410643SAndreas Gohr
1555d7f3164SAndreas Gohr        switch($this->gui->currentTab()) {
156d7410643SAndreas Gohr            case 'search':
1571dd40c86SAndreas Gohr                $this->gui->tabSearch();
158d7410643SAndreas Gohr                break;
1595d7f3164SAndreas Gohr            case 'templates':
1601dd40c86SAndreas Gohr                $this->gui->tabTemplates();
1615d7f3164SAndreas Gohr                break;
162ea9f3f90SAndreas Gohr            case 'install':
163ea9f3f90SAndreas Gohr                $this->gui->tabInstall();
164ea9f3f90SAndreas Gohr                break;
165d7410643SAndreas Gohr            case 'plugins':
166d7410643SAndreas Gohr            default:
1671dd40c86SAndreas Gohr                $this->gui->tabPlugins();
168d7410643SAndreas Gohr        }
169d7410643SAndreas Gohr
17002779b18SMichael Hamann        ptln('</div>');
171788f86d9SMichael Hamann    }
172788f86d9SMichael Hamann}
173788f86d9SMichael Hamann
174788f86d9SMichael Hamann// vim:ts=4:sw=4:et:
175