186 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * DokuWiki Plugin extension (Admin Component)
 | 
						|
 *
 | 
						|
 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
 | 
						|
 * @author  Michael Hamann <michael@content-space.de>
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Admin part of the extension manager
 | 
						|
 */
 | 
						|
class admin_plugin_extension extends DokuWiki_Admin_Plugin
 | 
						|
{
 | 
						|
    protected $infoFor = null;
 | 
						|
    /** @var  helper_plugin_extension_gui */
 | 
						|
    protected $gui;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructor
 | 
						|
     *
 | 
						|
     * loads additional helpers
 | 
						|
     */
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
        $this->gui = plugin_load('helper', 'extension_gui');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return int sort number in admin menu
 | 
						|
     */
 | 
						|
    public function getMenuSort()
 | 
						|
    {
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return bool true if only access for superuser, false is for superusers and moderators
 | 
						|
     */
 | 
						|
    public function forAdminOnly()
 | 
						|
    {
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Execute the requested action(s) and initialize the plugin repository
 | 
						|
     */
 | 
						|
    public function handle()
 | 
						|
    {
 | 
						|
        global $INPUT;
 | 
						|
        // initialize the remote repository
 | 
						|
        /* @var helper_plugin_extension_repository $repository */
 | 
						|
        $repository = $this->loadHelper('extension_repository');
 | 
						|
 | 
						|
        if (!$repository->hasAccess(!$INPUT->bool('purge'))) {
 | 
						|
            $url = $this->gui->tabURL('', ['purge' => 1], '&');
 | 
						|
            msg($this->getLang('repo_error').
 | 
						|
                ' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        if (!in_array('ssl', stream_get_transports())) {
 | 
						|
            msg($this->getLang('nossl'), -1);
 | 
						|
        }
 | 
						|
 | 
						|
        /* @var helper_plugin_extension_extension $extension */
 | 
						|
        $extension = $this->loadHelper('extension_extension');
 | 
						|
 | 
						|
        try {
 | 
						|
            if ($INPUT->post->has('fn') && checkSecurityToken()) {
 | 
						|
                $actions = $INPUT->post->arr('fn');
 | 
						|
                foreach ($actions as $action => $extensions) {
 | 
						|
                    foreach ($extensions as $extname => $label) {
 | 
						|
                        switch ($action) {
 | 
						|
                            case 'install':
 | 
						|
                            case 'reinstall':
 | 
						|
                            case 'update':
 | 
						|
                                $extension->setExtension($extname);
 | 
						|
                                $installed = $extension->installOrUpdate();
 | 
						|
                                foreach ($installed as $ext => $info) {
 | 
						|
                                    msg(sprintf(
 | 
						|
                                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
 | 
						|
                                        $info['base']), 1
 | 
						|
                                    );
 | 
						|
                                }
 | 
						|
                                break;
 | 
						|
                            case 'uninstall':
 | 
						|
                                $extension->setExtension($extname);
 | 
						|
                                $status = $extension->uninstall();
 | 
						|
                                if ($status) {
 | 
						|
                                    msg(sprintf(
 | 
						|
                                        $this->getLang('msg_delete_success'),
 | 
						|
                                        hsc($extension->getDisplayName())), 1
 | 
						|
                                    );
 | 
						|
                                } else {
 | 
						|
                                    msg(sprintf(
 | 
						|
                                        $this->getLang('msg_delete_failed'),
 | 
						|
                                        hsc($extension->getDisplayName())), -1
 | 
						|
                                    );
 | 
						|
                                }
 | 
						|
                                break;
 | 
						|
                            case 'enable':
 | 
						|
                                $extension->setExtension($extname);
 | 
						|
                                $status = $extension->enable();
 | 
						|
                                if ($status !== true) {
 | 
						|
                                    msg($status, -1);
 | 
						|
                                } else {
 | 
						|
                                    msg(sprintf(
 | 
						|
                                        $this->getLang('msg_enabled'),
 | 
						|
                                        hsc($extension->getDisplayName())), 1
 | 
						|
                                    );
 | 
						|
                                }
 | 
						|
                                break;
 | 
						|
                            case 'disable':
 | 
						|
                                $extension->setExtension($extname);
 | 
						|
                                $status = $extension->disable();
 | 
						|
                                if ($status !== true) {
 | 
						|
                                    msg($status, -1);
 | 
						|
                                } else {
 | 
						|
                                    msg(sprintf(
 | 
						|
                                        $this->getLang('msg_disabled'),
 | 
						|
                                        hsc($extension->getDisplayName())), 1
 | 
						|
                                    );
 | 
						|
                                }
 | 
						|
                                break;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                send_redirect($this->gui->tabURL('', [], '&', true));
 | 
						|
            } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) {
 | 
						|
                $installed = $extension->installFromURL(
 | 
						|
                    $INPUT->post->str('installurl'),
 | 
						|
                    $INPUT->post->bool('overwrite'));
 | 
						|
                foreach ($installed as $ext => $info) {
 | 
						|
                    msg(sprintf(
 | 
						|
                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
 | 
						|
                        $info['base']), 1
 | 
						|
                    );
 | 
						|
                }
 | 
						|
                send_redirect($this->gui->tabURL('', [], '&', true));
 | 
						|
            } elseif (isset($_FILES['installfile']) && checkSecurityToken()) {
 | 
						|
                $installed = $extension->installFromUpload('installfile', $INPUT->post->bool('overwrite'));
 | 
						|
                foreach ($installed as $ext => $info) {
 | 
						|
                    msg(sprintf(
 | 
						|
                        $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
 | 
						|
                        $info['base']), 1
 | 
						|
                    );
 | 
						|
                }
 | 
						|
                send_redirect($this->gui->tabURL('', [], '&', true));
 | 
						|
            }
 | 
						|
        } catch (Exception $e) {
 | 
						|
            msg($e->getMessage(), -1);
 | 
						|
            send_redirect($this->gui->tabURL('', [], '&', true));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Render HTML output
 | 
						|
     */
 | 
						|
    public function html()
 | 
						|
    {
 | 
						|
        echo '<h1>'.$this->getLang('menu').'</h1>'.DOKU_LF;
 | 
						|
        echo '<div id="extension__manager">'.DOKU_LF;
 | 
						|
 | 
						|
        $this->gui->tabNavigation();
 | 
						|
 | 
						|
        switch ($this->gui->currentTab()) {
 | 
						|
            case 'search':
 | 
						|
                $this->gui->tabSearch();
 | 
						|
                break;
 | 
						|
            case 'templates':
 | 
						|
                $this->gui->tabTemplates();
 | 
						|
                break;
 | 
						|
            case 'install':
 | 
						|
                $this->gui->tabInstall();
 | 
						|
                break;
 | 
						|
            case 'plugins':
 | 
						|
            default:
 | 
						|
                $this->gui->tabPlugins();
 | 
						|
        }
 | 
						|
 | 
						|
        echo '</div>'.DOKU_LF;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// vim:ts=4:sw=4:et:
 |