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:
|