Initial commit
This commit is contained in:
185
content/lib/plugins/extension/admin.php
Normal file
185
content/lib/plugins/extension/admin.php
Normal file
@@ -0,0 +1,185 @@
|
||||
<?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:
|
Reference in New Issue
Block a user