1788f86d9SMichael Hamann<?php 2d4f83172SAndreas Gohr 38553d24dSAndreas Gohruse dokuwiki\Extension\AdminPlugin; 4d4f83172SAndreas Gohr 5788f86d9SMichael Hamann/** 6788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component) 7788f86d9SMichael Hamann * 8788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 9788f86d9SMichael Hamann * @author Michael Hamann <michael@content-space.de> 10788f86d9SMichael Hamann */ 11788f86d9SMichael Hamann 1202779b18SMichael Hamann/** 1302779b18SMichael Hamann * Admin part of the extension manager 1402779b18SMichael Hamann */ 158553d24dSAndreas Gohrclass admin_plugin_extension extends AdminPlugin 1618b1e90aSAndreas Gohr{ 17fe2dcfd5SAndreas Gohr protected $infoFor; 18d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 19d7410643SAndreas Gohr protected $gui; 20d7410643SAndreas Gohr 21d7410643SAndreas Gohr /** 22d7410643SAndreas Gohr * Constructor 23d7410643SAndreas Gohr * 24d7410643SAndreas Gohr * loads additional helpers 25d7410643SAndreas Gohr */ 2618b1e90aSAndreas Gohr public function __construct() 2718b1e90aSAndreas Gohr { 28d7410643SAndreas Gohr $this->gui = plugin_load('helper', 'extension_gui'); 29d7410643SAndreas Gohr } 30788f86d9SMichael Hamann 31788f86d9SMichael Hamann /** 32788f86d9SMichael Hamann * @return int sort number in admin menu 33788f86d9SMichael Hamann */ 3418b1e90aSAndreas Gohr public function getMenuSort() 3518b1e90aSAndreas Gohr { 36788f86d9SMichael Hamann return 0; 37788f86d9SMichael Hamann } 38788f86d9SMichael Hamann 39788f86d9SMichael Hamann /** 40788f86d9SMichael Hamann * @return bool true if only access for superuser, false is for superusers and moderators 41788f86d9SMichael Hamann */ 4218b1e90aSAndreas Gohr public function forAdminOnly() 4318b1e90aSAndreas Gohr { 44788f86d9SMichael Hamann return true; 45788f86d9SMichael Hamann } 46788f86d9SMichael Hamann 47788f86d9SMichael Hamann /** 4802779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 49788f86d9SMichael Hamann */ 5018b1e90aSAndreas Gohr public function handle() 5118b1e90aSAndreas Gohr { 5202779b18SMichael Hamann global $INPUT; 5302779b18SMichael Hamann // initialize the remote repository 54788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 55788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 5655332151SAndreas Gohr 5798d21c04SAndreas Gohr if (!$repository->hasAccess(!$INPUT->bool('purge'))) { 58a72f333fSSatoshi Sahara $url = $this->gui->tabURL('', ['purge' => 1], '&'); 59cf833595SSatoshi Sahara msg($this->getLang('repo_error') . 600a034b36SAndreas Gohr ' [<a href="' . $url . '" rel="noreferrer">' . $this->getLang('repo_retry') . '</a>]', -1); 61e45b5c14SAndreas Gohr } 62e45b5c14SAndreas Gohr 631ec86040SAndreas Gohr if (!in_array('ssl', stream_get_transports())) { 641ec86040SAndreas Gohr msg($this->getLang('nossl'), -1); 651ec86040SAndreas Gohr } 661ec86040SAndreas Gohr 6702779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 6802779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 6902779b18SMichael Hamann 7032fdfac2SAndreas Gohr try { 71fee60c9eSAndreas Gohr if ($INPUT->post->has('fn') && checkSecurityToken()) { 7202779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 7302779b18SMichael Hamann foreach ($actions as $action => $extensions) { 7402779b18SMichael Hamann foreach ($extensions as $extname => $label) { 7502779b18SMichael Hamann switch ($action) { 7602779b18SMichael Hamann case 'install': 7702779b18SMichael Hamann case 'reinstall': 7802779b18SMichael Hamann case 'update': 79519895b5SAndreas Gohr $extension->setExtension($extname); 805c0b30bfSAndreas Gohr $installed = $extension->installOrUpdate(); 81fe2dcfd5SAndreas Gohr foreach ($installed as $info) { 82cf833595SSatoshi Sahara msg(sprintf( 8364159a61SAndreas Gohr $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'), 84dccd6b2bSAndreas Gohr $info['base'] 85dccd6b2bSAndreas Gohr ), 1); 865c0b30bfSAndreas Gohr } 8702779b18SMichael Hamann break; 8802779b18SMichael Hamann case 'uninstall': 89519895b5SAndreas Gohr $extension->setExtension($extname); 9002779b18SMichael Hamann $status = $extension->uninstall(); 917e8500eeSGerrit Uitslag if ($status) { 92cf833595SSatoshi Sahara msg(sprintf( 9364159a61SAndreas Gohr $this->getLang('msg_delete_success'), 94dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 95dccd6b2bSAndreas Gohr ), 1); 967e8500eeSGerrit Uitslag } else { 97cf833595SSatoshi Sahara msg(sprintf( 9864159a61SAndreas Gohr $this->getLang('msg_delete_failed'), 99dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 100dccd6b2bSAndreas Gohr ), -1); 10102779b18SMichael Hamann } 10202779b18SMichael Hamann break; 10318b1e90aSAndreas Gohr case 'enable': 104519895b5SAndreas Gohr $extension->setExtension($extname); 10502779b18SMichael Hamann $status = $extension->enable(); 10602779b18SMichael Hamann if ($status !== true) { 10702779b18SMichael Hamann msg($status, -1); 10802779b18SMichael Hamann } else { 109cf833595SSatoshi Sahara msg(sprintf( 110cf833595SSatoshi Sahara $this->getLang('msg_enabled'), 111dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 112dccd6b2bSAndreas Gohr ), 1); 11302779b18SMichael Hamann } 11402779b18SMichael Hamann break; 11518b1e90aSAndreas Gohr case 'disable': 116519895b5SAndreas Gohr $extension->setExtension($extname); 11702779b18SMichael Hamann $status = $extension->disable(); 11802779b18SMichael Hamann if ($status !== true) { 11902779b18SMichael Hamann msg($status, -1); 12002779b18SMichael Hamann } else { 121cf833595SSatoshi Sahara msg(sprintf( 122cf833595SSatoshi Sahara $this->getLang('msg_disabled'), 123dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 124dccd6b2bSAndreas Gohr ), 1); 12502779b18SMichael Hamann } 12602779b18SMichael Hamann break; 12702779b18SMichael Hamann } 12802779b18SMichael Hamann } 12902779b18SMichael Hamann } 130a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 131fee60c9eSAndreas Gohr } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) { 1329ea219ceSPhy $installed = $extension->installFromURL( 1339ea219ceSPhy $INPUT->post->str('installurl'), 134dccd6b2bSAndreas Gohr $INPUT->post->bool('overwrite') 135dccd6b2bSAndreas Gohr ); 136fe2dcfd5SAndreas Gohr foreach ($installed as $info) { 137cf833595SSatoshi Sahara msg(sprintf( 138cf833595SSatoshi Sahara $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'), 139dccd6b2bSAndreas Gohr $info['base'] 140dccd6b2bSAndreas Gohr ), 1); 141fee60c9eSAndreas Gohr } 142a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 143fee60c9eSAndreas Gohr } elseif (isset($_FILES['installfile']) && checkSecurityToken()) { 144bc20e40aSPhy $installed = $extension->installFromUpload('installfile', $INPUT->post->bool('overwrite')); 145fe2dcfd5SAndreas Gohr foreach ($installed as $info) { 146cf833595SSatoshi Sahara msg(sprintf( 147cf833595SSatoshi Sahara $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'), 148dccd6b2bSAndreas Gohr $info['base'] 149dccd6b2bSAndreas Gohr ), 1); 150fee60c9eSAndreas Gohr } 151a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 15232fdfac2SAndreas Gohr } 153fee60c9eSAndreas Gohr } catch (Exception $e) { 154fee60c9eSAndreas Gohr msg($e->getMessage(), -1); 155a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 156fee60c9eSAndreas Gohr } 157788f86d9SMichael Hamann } 158788f86d9SMichael Hamann 159788f86d9SMichael Hamann /** 16002779b18SMichael Hamann * Render HTML output 161788f86d9SMichael Hamann */ 16218b1e90aSAndreas Gohr public function html() 16318b1e90aSAndreas Gohr { 164*4fd6a1d7SAndreas Gohr echo '<h1>' . $this->getLang('menu') . '</h1>'; 165*4fd6a1d7SAndreas Gohr 166*4fd6a1d7SAndreas Gohr $ext = \dokuwiki\plugin\extension\Extension::createFromId('aichat'); 167*4fd6a1d7SAndreas Gohr $gui = new \dokuwiki\plugin\extension\GuiExtension($ext); 168*4fd6a1d7SAndreas Gohr echo $gui->render(); 169*4fd6a1d7SAndreas Gohr 170*4fd6a1d7SAndreas Gohr $ext = \dokuwiki\plugin\extension\Extension::createFromId('gallery'); 171*4fd6a1d7SAndreas Gohr $gui = new \dokuwiki\plugin\extension\GuiExtension($ext); 172*4fd6a1d7SAndreas Gohr echo $gui->render(); 173*4fd6a1d7SAndreas Gohr 174*4fd6a1d7SAndreas Gohr $ext = \dokuwiki\plugin\extension\Extension::createFromId('extension'); 175*4fd6a1d7SAndreas Gohr $gui = new \dokuwiki\plugin\extension\GuiExtension($ext); 176*4fd6a1d7SAndreas Gohr echo $gui->render(); 177*4fd6a1d7SAndreas Gohr 178*4fd6a1d7SAndreas Gohr $ext = \dokuwiki\plugin\extension\Extension::createFromId('top'); 179*4fd6a1d7SAndreas Gohr $gui = new \dokuwiki\plugin\extension\GuiExtension($ext); 180*4fd6a1d7SAndreas Gohr echo $gui->render(); 181*4fd6a1d7SAndreas Gohr 182*4fd6a1d7SAndreas Gohr return; 183*4fd6a1d7SAndreas Gohr 184a72f333fSSatoshi Sahara echo '<div id="extension__manager">' . DOKU_LF; 185788f86d9SMichael Hamann 186d7410643SAndreas Gohr $this->gui->tabNavigation(); 187d7410643SAndreas Gohr 1885d7f3164SAndreas Gohr switch ($this->gui->currentTab()) { 189d7410643SAndreas Gohr case 'search': 1901dd40c86SAndreas Gohr $this->gui->tabSearch(); 191d7410643SAndreas Gohr break; 1925d7f3164SAndreas Gohr case 'templates': 1931dd40c86SAndreas Gohr $this->gui->tabTemplates(); 1945d7f3164SAndreas Gohr break; 195ea9f3f90SAndreas Gohr case 'install': 196ea9f3f90SAndreas Gohr $this->gui->tabInstall(); 197ea9f3f90SAndreas Gohr break; 198d7410643SAndreas Gohr case 'plugins': 199d7410643SAndreas Gohr default: 2001dd40c86SAndreas Gohr $this->gui->tabPlugins(); 201d7410643SAndreas Gohr } 202d7410643SAndreas Gohr 203a72f333fSSatoshi Sahara echo '</div>' . DOKU_LF; 204788f86d9SMichael Hamann } 205788f86d9SMichael Hamann} 206788f86d9SMichael Hamann 207788f86d9SMichael Hamann// vim:ts=4:sw=4:et: 208