1788f86d9SMichael Hamann<?php 2788f86d9SMichael Hamann/** 3788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component) 4788f86d9SMichael Hamann * 5788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6788f86d9SMichael Hamann * @author Michael Hamann <michael@content-space.de> 7788f86d9SMichael Hamann */ 8788f86d9SMichael Hamann 9788f86d9SMichael Hamann// must be run within Dokuwiki 10788f86d9SMichael Hamannif(!defined('DOKU_INC')) die(); 11788f86d9SMichael Hamann 1202779b18SMichael Hamann/** 1302779b18SMichael Hamann * Admin part of the extension manager 1402779b18SMichael Hamann */ 15788f86d9SMichael Hamannclass admin_plugin_extension extends DokuWiki_Admin_Plugin { 1602779b18SMichael Hamann protected $infoFor = null; 17d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 18d7410643SAndreas Gohr protected $gui; 19d7410643SAndreas Gohr 20d7410643SAndreas Gohr /** 21d7410643SAndreas Gohr * Constructor 22d7410643SAndreas Gohr * 23d7410643SAndreas Gohr * loads additional helpers 24d7410643SAndreas Gohr */ 25d7410643SAndreas Gohr public function __construct() { 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 */ 32788f86d9SMichael Hamann public function getMenuSort() { 33788f86d9SMichael Hamann return 0; 34788f86d9SMichael Hamann } 35788f86d9SMichael Hamann 36788f86d9SMichael Hamann /** 37788f86d9SMichael Hamann * @return bool true if only access for superuser, false is for superusers and moderators 38788f86d9SMichael Hamann */ 39788f86d9SMichael Hamann public function forAdminOnly() { 40788f86d9SMichael Hamann return true; 41788f86d9SMichael Hamann } 42788f86d9SMichael Hamann 43788f86d9SMichael Hamann /** 4402779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 45788f86d9SMichael Hamann */ 46788f86d9SMichael Hamann public function handle() { 4702779b18SMichael Hamann global $INPUT; 4802779b18SMichael Hamann // initialize the remote repository 49788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 50788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 5155332151SAndreas Gohr 52e45b5c14SAndreas Gohr if(!$repository->hasAccess()) { 53d7410643SAndreas Gohr $url = $this->gui->tabURL('', array('purge' => 1)); 547944abddSAndreas Gohr msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1); 55e45b5c14SAndreas Gohr } 56e45b5c14SAndreas Gohr 57*1ec86040SAndreas Gohr if(!in_array('ssl', stream_get_transports())) { 58*1ec86040SAndreas Gohr msg($this->getLang('nossl'), -1); 59*1ec86040SAndreas Gohr } 60*1ec86040SAndreas Gohr 6102779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 6202779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 6302779b18SMichael Hamann 6432fdfac2SAndreas Gohr try { 65fee60c9eSAndreas Gohr if($INPUT->post->has('fn') && checkSecurityToken()) { 6602779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 6702779b18SMichael Hamann foreach($actions as $action => $extensions) { 6802779b18SMichael Hamann foreach($extensions as $extname => $label) { 6902779b18SMichael Hamann switch($action) { 7002779b18SMichael Hamann case 'install': 7102779b18SMichael Hamann case 'reinstall': 7202779b18SMichael Hamann case 'update': 73519895b5SAndreas Gohr $extension->setExtension($extname); 745c0b30bfSAndreas Gohr $installed = $extension->installOrUpdate(); 75fee60c9eSAndreas Gohr foreach($installed as $ext => $info) { 765c0b30bfSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 775c0b30bfSAndreas Gohr } 7802779b18SMichael Hamann break; 7902779b18SMichael Hamann case 'uninstall': 80519895b5SAndreas Gohr $extension->setExtension($extname); 8102779b18SMichael Hamann $status = $extension->uninstall(); 827e8500eeSGerrit Uitslag if($status) { 83813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getDisplayName())), 1); 847e8500eeSGerrit Uitslag } else { 857e8500eeSGerrit Uitslag msg(sprintf($this->getLang('msg_delete_failed'), hsc($extension->getDisplayName())), -1); 8602779b18SMichael Hamann } 8702779b18SMichael Hamann break; 8802779b18SMichael Hamann case 'enable'; 89519895b5SAndreas Gohr $extension->setExtension($extname); 9002779b18SMichael Hamann $status = $extension->enable(); 9102779b18SMichael Hamann if($status !== true) { 9202779b18SMichael Hamann msg($status, -1); 9302779b18SMichael Hamann } else { 94813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1); 9502779b18SMichael Hamann } 9602779b18SMichael Hamann break; 9702779b18SMichael Hamann case 'disable'; 98519895b5SAndreas Gohr $extension->setExtension($extname); 9902779b18SMichael Hamann $status = $extension->disable(); 10002779b18SMichael Hamann if($status !== true) { 10102779b18SMichael Hamann msg($status, -1); 10202779b18SMichael Hamann } else { 103813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1); 10402779b18SMichael Hamann } 10502779b18SMichael Hamann break; 10602779b18SMichael Hamann } 10702779b18SMichael Hamann } 10802779b18SMichael Hamann } 10932fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 110fee60c9eSAndreas Gohr } elseif($INPUT->post->str('installurl') && checkSecurityToken()) { 111fee60c9eSAndreas Gohr $installed = $extension->installFromURL($INPUT->post->str('installurl')); 112fee60c9eSAndreas Gohr foreach($installed as $ext => $info) { 113fee60c9eSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 114fee60c9eSAndreas Gohr } 11532fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 116fee60c9eSAndreas Gohr } elseif(isset($_FILES['installfile']) && checkSecurityToken()) { 117fee60c9eSAndreas Gohr $installed = $extension->installFromUpload('installfile'); 118fee60c9eSAndreas Gohr foreach($installed as $ext => $info) { 119fee60c9eSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 120fee60c9eSAndreas Gohr } 12132fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 12232fdfac2SAndreas Gohr } 12332fdfac2SAndreas Gohr 124fee60c9eSAndreas Gohr } catch(Exception $e) { 125fee60c9eSAndreas Gohr msg($e->getMessage(), -1); 12632fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 127fee60c9eSAndreas Gohr } 12832fdfac2SAndreas Gohr 129788f86d9SMichael Hamann } 130788f86d9SMichael Hamann 131788f86d9SMichael Hamann /** 13202779b18SMichael Hamann * Render HTML output 133788f86d9SMichael Hamann */ 134788f86d9SMichael Hamann public function html() { 135788f86d9SMichael Hamann ptln('<h1>'.$this->getLang('menu').'</h1>'); 13602779b18SMichael Hamann ptln('<div id="extension__manager">'); 137788f86d9SMichael Hamann 138d7410643SAndreas Gohr $this->gui->tabNavigation(); 139d7410643SAndreas Gohr 1405d7f3164SAndreas Gohr switch($this->gui->currentTab()) { 141d7410643SAndreas Gohr case 'search': 1421dd40c86SAndreas Gohr $this->gui->tabSearch(); 143d7410643SAndreas Gohr break; 1445d7f3164SAndreas Gohr case 'templates': 1451dd40c86SAndreas Gohr $this->gui->tabTemplates(); 1465d7f3164SAndreas Gohr break; 147ea9f3f90SAndreas Gohr case 'install': 148ea9f3f90SAndreas Gohr $this->gui->tabInstall(); 149ea9f3f90SAndreas Gohr break; 150d7410643SAndreas Gohr case 'plugins': 151d7410643SAndreas Gohr default: 1521dd40c86SAndreas Gohr $this->gui->tabPlugins(); 153d7410643SAndreas Gohr } 154d7410643SAndreas Gohr 15502779b18SMichael Hamann ptln('</div>'); 156788f86d9SMichael Hamann } 157788f86d9SMichael Hamann} 158788f86d9SMichael Hamann 159788f86d9SMichael Hamann// vim:ts=4:sw=4:et: