xref: /dokuwiki/lib/plugins/extension/admin.php (revision e45b5c14dbb09dd200d66ff21de1bba960113c68)
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;
17788f86d9SMichael Hamann
18788f86d9SMichael Hamann    /**
19788f86d9SMichael Hamann     * @return int sort number in admin menu
20788f86d9SMichael Hamann     */
21788f86d9SMichael Hamann    public function getMenuSort() {
22788f86d9SMichael Hamann        return 0;
23788f86d9SMichael Hamann    }
24788f86d9SMichael Hamann
25788f86d9SMichael Hamann    /**
26788f86d9SMichael Hamann     * @return bool true if only access for superuser, false is for superusers and moderators
27788f86d9SMichael Hamann     */
28788f86d9SMichael Hamann    public function forAdminOnly() {
29788f86d9SMichael Hamann        return true;
30788f86d9SMichael Hamann    }
31788f86d9SMichael Hamann
32788f86d9SMichael Hamann    /**
3302779b18SMichael Hamann     * Execute the requested action(s) and initialize the plugin repository
34788f86d9SMichael Hamann     */
35788f86d9SMichael Hamann    public function handle() {
3602779b18SMichael Hamann        global $INPUT;
3702779b18SMichael Hamann        // initialize the remote repository
38788f86d9SMichael Hamann        /* @var helper_plugin_extension_repository $repository */
39788f86d9SMichael Hamann        $repository = $this->loadHelper('extension_repository');
40788f86d9SMichael Hamann        $repository->init();
4102779b18SMichael Hamann
42*e45b5c14SAndreas Gohr        if(!$repository->hasAccess()){
43*e45b5c14SAndreas Gohr            $url = helper_plugin_extension_list::tabURL('', array('purge'=>1));
44*e45b5c14SAndreas Gohr
45*e45b5c14SAndreas Gohr            msg('The DokuWiki extension repository can not be reached currently.
46*e45b5c14SAndreas Gohr                 Online Features are not available. [<a href="'.$url.'">retry</a>]', -1);
47*e45b5c14SAndreas Gohr        }
48*e45b5c14SAndreas Gohr
4902779b18SMichael Hamann        /* @var helper_plugin_extension_extension $extension */
5002779b18SMichael Hamann        $extension = $this->loadHelper('extension_extension');
5102779b18SMichael Hamann
5202779b18SMichael Hamann        if ($INPUT->post->has('fn')) {
5302779b18SMichael Hamann            $actions = $INPUT->post->arr('fn');
5402779b18SMichael Hamann            foreach ($actions as $action => $extensions) {
5502779b18SMichael Hamann                foreach ($extensions as $extname => $label) {
5602779b18SMichael Hamann                    switch ($action) {
5702779b18SMichael Hamann                        case 'info':
5802779b18SMichael Hamann                            $this->infoFor = $extname;
5902779b18SMichael Hamann                            break;
6002779b18SMichael Hamann                        case 'install':
6102779b18SMichael Hamann                            msg('Not implemented');
6202779b18SMichael Hamann                            break;
6302779b18SMichael Hamann                        case 'reinstall':
6402779b18SMichael Hamann                        case 'update':
6502779b18SMichael Hamann                            $extension->setExtension($extname, false);
6602779b18SMichael Hamann                            $status = $extension->installOrUpdate();
6702779b18SMichael Hamann                            if ($status !== true) {
6802779b18SMichael Hamann                                msg($status, -1);
6902779b18SMichael Hamann                            } else {
7002779b18SMichael Hamann                                msg(sprintf($this->getLang('msg_update_success'), hsc($extension->getName())), 1);
7102779b18SMichael Hamann                            }
7202779b18SMichael Hamann                            break;
7302779b18SMichael Hamann                        case 'uninstall':
7402779b18SMichael Hamann                            $extension->setExtension($extname, false);
7502779b18SMichael Hamann                            $status = $extension->uninstall();
7602779b18SMichael Hamann                            if ($status !== true) {
7702779b18SMichael Hamann                                msg($status, -1);
7802779b18SMichael Hamann                            } else {
7902779b18SMichael Hamann                                msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getName())), 1);
8002779b18SMichael Hamann                            }
8102779b18SMichael Hamann                            break;
8202779b18SMichael Hamann                        case 'enable';
8302779b18SMichael Hamann                            $extension->setExtension($extname, false);
8402779b18SMichael Hamann                            $status = $extension->enable();
8502779b18SMichael Hamann                            if ($status !== true) {
8602779b18SMichael Hamann                                msg($status, -1);
8702779b18SMichael Hamann                            } else {
8802779b18SMichael Hamann                                msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getName())), 1);
8902779b18SMichael Hamann                            }
9002779b18SMichael Hamann                            break;
9102779b18SMichael Hamann                        case 'disable';
9202779b18SMichael Hamann                            $extension->setExtension($extname, false);
9302779b18SMichael Hamann                            $status = $extension->disable();
9402779b18SMichael Hamann                            if ($status !== true) {
9502779b18SMichael Hamann                                msg($status, -1);
9602779b18SMichael Hamann                            } else {
9702779b18SMichael Hamann                                msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getName())), 1);
9802779b18SMichael Hamann                            }
9902779b18SMichael Hamann                            break;
10002779b18SMichael Hamann                    }
10102779b18SMichael Hamann                }
10202779b18SMichael Hamann            }
10302779b18SMichael Hamann        }
104788f86d9SMichael Hamann    }
105788f86d9SMichael Hamann
106788f86d9SMichael Hamann    /**
10702779b18SMichael Hamann     * Render HTML output
108788f86d9SMichael Hamann     */
109788f86d9SMichael Hamann    public function html() {
110788f86d9SMichael Hamann        /* @var Doku_Plugin_Controller $plugin_controller */
111788f86d9SMichael Hamann        global $plugin_controller;
112788f86d9SMichael Hamann        ptln('<h1>'.$this->getLang('menu').'</h1>');
11302779b18SMichael Hamann        ptln('<div id="extension__manager">');
114788f86d9SMichael Hamann
115788f86d9SMichael Hamann        $pluginlist = $plugin_controller->getList('', true);
116788f86d9SMichael Hamann        /* @var helper_plugin_extension_extension $extension */
117788f86d9SMichael Hamann        $extension = $this->loadHelper('extension_extension');
11802779b18SMichael Hamann        /* @var helper_plugin_extension_list $list */
11902779b18SMichael Hamann        $list = $this->loadHelper('extension_list');
12002779b18SMichael Hamann        $list->start_form();
121788f86d9SMichael Hamann        foreach ($pluginlist as $name) {
122788f86d9SMichael Hamann            $extension->setExtension($name, false);
12302779b18SMichael Hamann            $list->add_row($extension, $name == $this->infoFor);
124788f86d9SMichael Hamann        }
12502779b18SMichael Hamann        $list->end_form();
12602779b18SMichael Hamann        $list->render();
12702779b18SMichael Hamann        ptln('</div>');
128788f86d9SMichael Hamann    }
129788f86d9SMichael Hamann}
130788f86d9SMichael Hamann
131788f86d9SMichael Hamann// vim:ts=4:sw=4:et: