*/ /** * Admin part of the extension manager */ class admin_plugin_extension extends AdminPlugin { protected $infoFor; /** @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 * * @todo repo init and ssl check still missing */ public function handle() { global $INPUT; if (!$INPUT->post->has('fn') && !$INPUT->post->str('installurl') && !isset($_FILES['installfile'])) { return; // nothing to do } if (!checkSecurityToken()) return; $installer = new Installer($INPUT->post->bool('overwrite')); try { foreach ($INPUT->post->arr('fn') as $action => $extensions) { foreach ($extensions as $extension => $label) { $ext = Extension::createFromId($extension); switch ($action) { case 'install': case 'reinstall': case 'update': $installer->installExtension($ext); break; case 'uninstall': $installer->uninstall($ext); break; case 'enable': $ext->enable(); break; case 'disable': $ext->disable(); break; } } } if ($INPUT->post->str('installurl')) { $installer->installFromURL($INPUT->post->str('installurl')); } if (isset($_FILES['installfile'])) { $installer->installFromUpload('installfile'); } } catch (Exception $e) { msg(hsc($e->getMessage()), -1); } $processed = $installer->getProcessed(); foreach ($processed as $id => $status) { if ($status == Installer::STATUS_INSTALLED) { msg(sprintf($this->getLang('msg_install_success'), $id), 1); } else if ($status == Installer::STATUS_UPDATED) { msg(sprintf($this->getLang('msg_update_success'), $id), 1); } else if ($status == Installer::STATUS_SKIPPED) { msg(sprintf($this->getLang('msg_nooverwrite'), $id), 0); } else if ($status == Installer::STATUS_REMOVED) { msg(sprintf($this->getLang('msg_delete_success'), $id), 1); } } send_redirect((new Gui())->tabURL('', [], '&', true)); return; // FIXME old stuff below // 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') . ' [' . $this->getLang('repo_retry') . ']', -1); } if (!in_array('ssl', stream_get_transports())) { msg($this->getLang('nossl'), -1); } } /** * Render HTML output */ public function html() { echo '

' . $this->getLang('menu') . '

'; $gui = new \dokuwiki\plugin\extension\GuiAdmin(); echo $gui->render(); } } // vim:ts=4:sw=4:et: