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