1788f86d9SMichael Hamann<?php 28553d24dSAndreas Gohruse dokuwiki\Extension\AdminPlugin; 3788f86d9SMichael Hamann/** 4788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component) 5788f86d9SMichael Hamann * 6788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 7788f86d9SMichael Hamann * @author Michael Hamann <michael@content-space.de> 8788f86d9SMichael Hamann */ 9788f86d9SMichael Hamann 1002779b18SMichael Hamann/** 1102779b18SMichael Hamann * Admin part of the extension manager 1202779b18SMichael Hamann */ 138553d24dSAndreas Gohrclass admin_plugin_extension extends AdminPlugin 1418b1e90aSAndreas Gohr{ 15fe2dcfd5SAndreas Gohr protected $infoFor; 16d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 17d7410643SAndreas Gohr protected $gui; 18d7410643SAndreas Gohr 19d7410643SAndreas Gohr /** 20d7410643SAndreas Gohr * Constructor 21d7410643SAndreas Gohr * 22d7410643SAndreas Gohr * loads additional helpers 23d7410643SAndreas Gohr */ 2418b1e90aSAndreas Gohr public function __construct() 2518b1e90aSAndreas Gohr { 26d7410643SAndreas Gohr $this->gui = plugin_load('helper', 'extension_gui'); 27d7410643SAndreas Gohr } 28788f86d9SMichael Hamann 29788f86d9SMichael Hamann /** 30788f86d9SMichael Hamann * @return int sort number in admin menu 31788f86d9SMichael Hamann */ 3218b1e90aSAndreas Gohr public function getMenuSort() 3318b1e90aSAndreas Gohr { 34788f86d9SMichael Hamann return 0; 35788f86d9SMichael Hamann } 36788f86d9SMichael Hamann 37788f86d9SMichael Hamann /** 38788f86d9SMichael Hamann * @return bool true if only access for superuser, false is for superusers and moderators 39788f86d9SMichael Hamann */ 4018b1e90aSAndreas Gohr public function forAdminOnly() 4118b1e90aSAndreas Gohr { 42788f86d9SMichael Hamann return true; 43788f86d9SMichael Hamann } 44788f86d9SMichael Hamann 45788f86d9SMichael Hamann /** 4602779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 47788f86d9SMichael Hamann */ 4818b1e90aSAndreas Gohr public function handle() 4918b1e90aSAndreas Gohr { 5002779b18SMichael Hamann global $INPUT; 5102779b18SMichael Hamann // initialize the remote repository 52788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 53788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 5455332151SAndreas Gohr 5598d21c04SAndreas Gohr if (!$repository->hasAccess(!$INPUT->bool('purge'))) { 56a72f333fSSatoshi Sahara $url = $this->gui->tabURL('', ['purge' => 1], '&'); 57cf833595SSatoshi Sahara msg($this->getLang('repo_error'). 58*dccd6b2bSAndreas Gohr ' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1); 59e45b5c14SAndreas Gohr } 60e45b5c14SAndreas Gohr 611ec86040SAndreas Gohr if (!in_array('ssl', stream_get_transports())) { 621ec86040SAndreas Gohr msg($this->getLang('nossl'), -1); 631ec86040SAndreas Gohr } 641ec86040SAndreas Gohr 6502779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 6602779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 6702779b18SMichael Hamann 6832fdfac2SAndreas Gohr try { 69fee60c9eSAndreas Gohr if ($INPUT->post->has('fn') && checkSecurityToken()) { 7002779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 7102779b18SMichael Hamann foreach ($actions as $action => $extensions) { 7202779b18SMichael Hamann foreach ($extensions as $extname => $label) { 7302779b18SMichael Hamann switch ($action) { 7402779b18SMichael Hamann case 'install': 7502779b18SMichael Hamann case 'reinstall': 7602779b18SMichael Hamann case 'update': 77519895b5SAndreas Gohr $extension->setExtension($extname); 785c0b30bfSAndreas Gohr $installed = $extension->installOrUpdate(); 79fe2dcfd5SAndreas Gohr foreach ($installed as $info) { 80cf833595SSatoshi Sahara msg(sprintf( 8164159a61SAndreas Gohr $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), 82*dccd6b2bSAndreas Gohr $info['base'] 83*dccd6b2bSAndreas Gohr ), 1); 845c0b30bfSAndreas Gohr } 8502779b18SMichael Hamann break; 8602779b18SMichael Hamann case 'uninstall': 87519895b5SAndreas Gohr $extension->setExtension($extname); 8802779b18SMichael Hamann $status = $extension->uninstall(); 897e8500eeSGerrit Uitslag if ($status) { 90cf833595SSatoshi Sahara msg(sprintf( 9164159a61SAndreas Gohr $this->getLang('msg_delete_success'), 92*dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 93*dccd6b2bSAndreas Gohr ), 1); 947e8500eeSGerrit Uitslag } else { 95cf833595SSatoshi Sahara msg(sprintf( 9664159a61SAndreas Gohr $this->getLang('msg_delete_failed'), 97*dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 98*dccd6b2bSAndreas Gohr ), -1); 9902779b18SMichael Hamann } 10002779b18SMichael Hamann break; 10118b1e90aSAndreas Gohr case 'enable': 102519895b5SAndreas Gohr $extension->setExtension($extname); 10302779b18SMichael Hamann $status = $extension->enable(); 10402779b18SMichael Hamann if ($status !== true) { 10502779b18SMichael Hamann msg($status, -1); 10602779b18SMichael Hamann } else { 107cf833595SSatoshi Sahara msg(sprintf( 108cf833595SSatoshi Sahara $this->getLang('msg_enabled'), 109*dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 110*dccd6b2bSAndreas Gohr ), 1); 11102779b18SMichael Hamann } 11202779b18SMichael Hamann break; 11318b1e90aSAndreas Gohr case 'disable': 114519895b5SAndreas Gohr $extension->setExtension($extname); 11502779b18SMichael Hamann $status = $extension->disable(); 11602779b18SMichael Hamann if ($status !== true) { 11702779b18SMichael Hamann msg($status, -1); 11802779b18SMichael Hamann } else { 119cf833595SSatoshi Sahara msg(sprintf( 120cf833595SSatoshi Sahara $this->getLang('msg_disabled'), 121*dccd6b2bSAndreas Gohr hsc($extension->getDisplayName()) 122*dccd6b2bSAndreas Gohr ), 1); 12302779b18SMichael Hamann } 12402779b18SMichael Hamann break; 12502779b18SMichael Hamann } 12602779b18SMichael Hamann } 12702779b18SMichael Hamann } 128a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 129fee60c9eSAndreas Gohr } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) { 1309ea219ceSPhy $installed = $extension->installFromURL( 1319ea219ceSPhy $INPUT->post->str('installurl'), 132*dccd6b2bSAndreas Gohr $INPUT->post->bool('overwrite') 133*dccd6b2bSAndreas Gohr ); 134fe2dcfd5SAndreas Gohr foreach ($installed as $info) { 135cf833595SSatoshi Sahara msg(sprintf( 136cf833595SSatoshi Sahara $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), 137*dccd6b2bSAndreas Gohr $info['base'] 138*dccd6b2bSAndreas Gohr ), 1); 139fee60c9eSAndreas Gohr } 140a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 141fee60c9eSAndreas Gohr } elseif (isset($_FILES['installfile']) && checkSecurityToken()) { 142bc20e40aSPhy $installed = $extension->installFromUpload('installfile', $INPUT->post->bool('overwrite')); 143fe2dcfd5SAndreas Gohr foreach ($installed as $info) { 144cf833595SSatoshi Sahara msg(sprintf( 145cf833595SSatoshi Sahara $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), 146*dccd6b2bSAndreas Gohr $info['base'] 147*dccd6b2bSAndreas Gohr ), 1); 148fee60c9eSAndreas Gohr } 149a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 15032fdfac2SAndreas Gohr } 151fee60c9eSAndreas Gohr } catch (Exception $e) { 152fee60c9eSAndreas Gohr msg($e->getMessage(), -1); 153a72f333fSSatoshi Sahara send_redirect($this->gui->tabURL('', [], '&', true)); 154fee60c9eSAndreas Gohr } 155788f86d9SMichael Hamann } 156788f86d9SMichael Hamann 157788f86d9SMichael Hamann /** 15802779b18SMichael Hamann * Render HTML output 159788f86d9SMichael Hamann */ 16018b1e90aSAndreas Gohr public function html() 16118b1e90aSAndreas Gohr { 162a72f333fSSatoshi Sahara echo '<h1>'.$this->getLang('menu').'</h1>'.DOKU_LF; 163a72f333fSSatoshi Sahara echo '<div id="extension__manager">'.DOKU_LF; 164788f86d9SMichael Hamann 165d7410643SAndreas Gohr $this->gui->tabNavigation(); 166d7410643SAndreas Gohr 1675d7f3164SAndreas Gohr switch ($this->gui->currentTab()) { 168d7410643SAndreas Gohr case 'search': 1691dd40c86SAndreas Gohr $this->gui->tabSearch(); 170d7410643SAndreas Gohr break; 1715d7f3164SAndreas Gohr case 'templates': 1721dd40c86SAndreas Gohr $this->gui->tabTemplates(); 1735d7f3164SAndreas Gohr break; 174ea9f3f90SAndreas Gohr case 'install': 175ea9f3f90SAndreas Gohr $this->gui->tabInstall(); 176ea9f3f90SAndreas Gohr break; 177d7410643SAndreas Gohr case 'plugins': 178d7410643SAndreas Gohr default: 1791dd40c86SAndreas Gohr $this->gui->tabPlugins(); 180d7410643SAndreas Gohr } 181d7410643SAndreas Gohr 182a72f333fSSatoshi Sahara echo '</div>'.DOKU_LF; 183788f86d9SMichael Hamann } 184788f86d9SMichael Hamann} 185788f86d9SMichael Hamann 186788f86d9SMichael Hamann// vim:ts=4:sw=4:et: 187