xref: /dokuwiki/lib/plugins/extension/admin.php (revision fee60c9e19860de9edb1dd146ec7063bb9eda392)
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
9788f86d9SMichael Hamann// must be run within Dokuwiki
10788f86d9SMichael Hamannif(!defined('DOKU_INC')) die();
11788f86d9SMichael Hamann
1202779b18SMichael Hamann/**
1302779b18SMichael Hamann * Admin part of the extension manager
1402779b18SMichael Hamann */
15788f86d9SMichael Hamannclass admin_plugin_extension extends DokuWiki_Admin_Plugin {
1602779b18SMichael Hamann    protected $infoFor = null;
17d7410643SAndreas Gohr    /** @var  helper_plugin_extension_gui */
18d7410643SAndreas Gohr    protected $gui;
19d7410643SAndreas Gohr
20d7410643SAndreas Gohr    /**
21d7410643SAndreas Gohr     * Constructor
22d7410643SAndreas Gohr     *
23d7410643SAndreas Gohr     * loads additional helpers
24d7410643SAndreas Gohr     */
25d7410643SAndreas Gohr    public function __construct() {
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     */
32788f86d9SMichael Hamann    public function getMenuSort() {
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     */
39788f86d9SMichael Hamann    public function forAdminOnly() {
40788f86d9SMichael Hamann        return true;
41788f86d9SMichael Hamann    }
42788f86d9SMichael Hamann
43788f86d9SMichael Hamann    /**
4402779b18SMichael Hamann     * Execute the requested action(s) and initialize the plugin repository
45788f86d9SMichael Hamann     */
46788f86d9SMichael Hamann    public function handle() {
4702779b18SMichael Hamann        global $INPUT;
4802779b18SMichael Hamann        // initialize the remote repository
49788f86d9SMichael Hamann        /* @var helper_plugin_extension_repository $repository */
50788f86d9SMichael Hamann        $repository = $this->loadHelper('extension_repository');
5155332151SAndreas Gohr
52e45b5c14SAndreas Gohr        if(!$repository->hasAccess()) {
53d7410643SAndreas Gohr            $url = $this->gui->tabURL('', array('purge' => 1));
547944abddSAndreas Gohr            msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1);
55e45b5c14SAndreas Gohr        }
56e45b5c14SAndreas Gohr
5702779b18SMichael Hamann        /* @var helper_plugin_extension_extension $extension */
5802779b18SMichael Hamann        $extension = $this->loadHelper('extension_extension');
5902779b18SMichael Hamann
60*fee60c9eSAndreas Gohr        if($INPUT->post->has('fn') && checkSecurityToken()) {
6102779b18SMichael Hamann            $actions = $INPUT->post->arr('fn');
6202779b18SMichael Hamann            foreach($actions as $action => $extensions) {
6302779b18SMichael Hamann                foreach($extensions as $extname => $label) {
6402779b18SMichael Hamann                    switch($action) {
6502779b18SMichael Hamann                        case 'install':
6602779b18SMichael Hamann                        case 'reinstall':
6702779b18SMichael Hamann                        case 'update':
685c0b30bfSAndreas Gohr                            try {
69519895b5SAndreas Gohr                                $extension->setExtension($extname);
705c0b30bfSAndreas Gohr                                $installed = $extension->installOrUpdate();
71*fee60c9eSAndreas Gohr                                foreach($installed as $ext => $info) {
725c0b30bfSAndreas Gohr                                    msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
735c0b30bfSAndreas Gohr                                }
745c0b30bfSAndreas Gohr                            } catch(Exception $e) {
755c0b30bfSAndreas Gohr                                msg($e->getMessage(), -1);
7602779b18SMichael Hamann                            }
7702779b18SMichael Hamann                            break;
7802779b18SMichael Hamann                        case 'uninstall':
79519895b5SAndreas Gohr                            $extension->setExtension($extname);
8002779b18SMichael Hamann                            $status = $extension->uninstall();
8102779b18SMichael Hamann                            if($status !== true) {
8202779b18SMichael Hamann                                msg($status, -1);
8302779b18SMichael Hamann                            } else {
84813d7e09SAndreas Gohr                                msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getDisplayName())), 1);
8502779b18SMichael Hamann                            }
8602779b18SMichael Hamann                            break;
8702779b18SMichael Hamann                        case 'enable';
88519895b5SAndreas Gohr                            $extension->setExtension($extname);
8902779b18SMichael Hamann                            $status = $extension->enable();
9002779b18SMichael Hamann                            if($status !== true) {
9102779b18SMichael Hamann                                msg($status, -1);
9202779b18SMichael Hamann                            } else {
93813d7e09SAndreas Gohr                                msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1);
9402779b18SMichael Hamann                            }
9502779b18SMichael Hamann                            break;
9602779b18SMichael Hamann                        case 'disable';
97519895b5SAndreas Gohr                            $extension->setExtension($extname);
9802779b18SMichael Hamann                            $status = $extension->disable();
9902779b18SMichael Hamann                            if($status !== true) {
10002779b18SMichael Hamann                                msg($status, -1);
10102779b18SMichael Hamann                            } else {
102813d7e09SAndreas Gohr                                msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1);
10302779b18SMichael Hamann                            }
10402779b18SMichael Hamann                            break;
10502779b18SMichael Hamann                    }
10602779b18SMichael Hamann                }
10702779b18SMichael Hamann            }
108*fee60c9eSAndreas Gohr        } elseif($INPUT->post->str('installurl') && checkSecurityToken()) {
109*fee60c9eSAndreas Gohr            try {
110*fee60c9eSAndreas Gohr                $installed = $extension->installFromURL($INPUT->post->str('installurl'));
111*fee60c9eSAndreas Gohr                foreach($installed as $ext => $info) {
112*fee60c9eSAndreas Gohr                    msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
113*fee60c9eSAndreas Gohr                }
114*fee60c9eSAndreas Gohr            } catch(Exception $e) {
115*fee60c9eSAndreas Gohr                msg($e->getMessage(), -1);
116*fee60c9eSAndreas Gohr            }
117*fee60c9eSAndreas Gohr        } elseif(isset($_FILES['installfile']) && checkSecurityToken()) {
118*fee60c9eSAndreas Gohr            try {
119*fee60c9eSAndreas Gohr                $installed = $extension->installFromUpload('installfile');
120*fee60c9eSAndreas Gohr                foreach($installed as $ext => $info) {
121*fee60c9eSAndreas Gohr                    msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
122*fee60c9eSAndreas Gohr                }
123*fee60c9eSAndreas Gohr            } catch(Exception $e) {
124*fee60c9eSAndreas Gohr                msg($e->getMessage(), -1);
125*fee60c9eSAndreas Gohr            }
12602779b18SMichael Hamann        }
127788f86d9SMichael Hamann    }
128788f86d9SMichael Hamann
129788f86d9SMichael Hamann    /**
13002779b18SMichael Hamann     * Render HTML output
131788f86d9SMichael Hamann     */
132788f86d9SMichael Hamann    public function html() {
133788f86d9SMichael Hamann        ptln('<h1>'.$this->getLang('menu').'</h1>');
13402779b18SMichael Hamann        ptln('<div id="extension__manager">');
135788f86d9SMichael Hamann
136d7410643SAndreas Gohr        $this->gui->tabNavigation();
137d7410643SAndreas Gohr
1385d7f3164SAndreas Gohr        switch($this->gui->currentTab()) {
139d7410643SAndreas Gohr            case 'search':
1401dd40c86SAndreas Gohr                $this->gui->tabSearch();
141d7410643SAndreas Gohr                break;
1425d7f3164SAndreas Gohr            case 'templates':
1431dd40c86SAndreas Gohr                $this->gui->tabTemplates();
1445d7f3164SAndreas Gohr                break;
145ea9f3f90SAndreas Gohr            case 'install':
146ea9f3f90SAndreas Gohr                $this->gui->tabInstall();
147ea9f3f90SAndreas Gohr                break;
148d7410643SAndreas Gohr            case 'plugins':
149d7410643SAndreas Gohr            default:
1501dd40c86SAndreas Gohr                $this->gui->tabPlugins();
151d7410643SAndreas Gohr        }
152d7410643SAndreas Gohr
15302779b18SMichael Hamann        ptln('</div>');
154788f86d9SMichael Hamann    }
155788f86d9SMichael Hamann}
156788f86d9SMichael Hamann
157788f86d9SMichael Hamann// vim:ts=4:sw=4:et: