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 902779b18SMichael Hamann/** 1002779b18SMichael Hamann * Admin part of the extension manager 1102779b18SMichael Hamann */ 12788f86d9SMichael Hamannclass admin_plugin_extension extends DokuWiki_Admin_Plugin { 1302779b18SMichael Hamann protected $infoFor = null; 14d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 15d7410643SAndreas Gohr protected $gui; 16d7410643SAndreas Gohr 17d7410643SAndreas Gohr /** 18d7410643SAndreas Gohr * Constructor 19d7410643SAndreas Gohr * 20d7410643SAndreas Gohr * loads additional helpers 21d7410643SAndreas Gohr */ 22d7410643SAndreas Gohr public function __construct() { 23d7410643SAndreas Gohr $this->gui = plugin_load('helper', 'extension_gui'); 24d7410643SAndreas Gohr } 25788f86d9SMichael Hamann 26788f86d9SMichael Hamann /** 27788f86d9SMichael Hamann * @return int sort number in admin menu 28788f86d9SMichael Hamann */ 29788f86d9SMichael Hamann public function getMenuSort() { 30788f86d9SMichael Hamann return 0; 31788f86d9SMichael Hamann } 32788f86d9SMichael Hamann 33788f86d9SMichael Hamann /** 34788f86d9SMichael Hamann * @return bool true if only access for superuser, false is for superusers and moderators 35788f86d9SMichael Hamann */ 36788f86d9SMichael Hamann public function forAdminOnly() { 37788f86d9SMichael Hamann return true; 38788f86d9SMichael Hamann } 39788f86d9SMichael Hamann 40788f86d9SMichael Hamann /** 4102779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 42788f86d9SMichael Hamann */ 43788f86d9SMichael Hamann public function handle() { 4402779b18SMichael Hamann global $INPUT; 4502779b18SMichael Hamann // initialize the remote repository 46788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 47788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 4855332151SAndreas Gohr 49e45b5c14SAndreas Gohr if(!$repository->hasAccess()) { 50d7410643SAndreas Gohr $url = $this->gui->tabURL('', array('purge' => 1)); 517944abddSAndreas Gohr msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1); 52e45b5c14SAndreas Gohr } 53e45b5c14SAndreas Gohr 541ec86040SAndreas Gohr if(!in_array('ssl', stream_get_transports())) { 551ec86040SAndreas Gohr msg($this->getLang('nossl'), -1); 561ec86040SAndreas Gohr } 571ec86040SAndreas Gohr 5802779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 5902779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 6002779b18SMichael Hamann 6132fdfac2SAndreas Gohr try { 62fee60c9eSAndreas Gohr if($INPUT->post->has('fn') && checkSecurityToken()) { 6302779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 6402779b18SMichael Hamann foreach($actions as $action => $extensions) { 6502779b18SMichael Hamann foreach($extensions as $extname => $label) { 6602779b18SMichael Hamann switch($action) { 6702779b18SMichael Hamann case 'install': 6802779b18SMichael Hamann case 'reinstall': 6902779b18SMichael Hamann case 'update': 70519895b5SAndreas Gohr $extension->setExtension($extname); 715c0b30bfSAndreas Gohr $installed = $extension->installOrUpdate(); 72fee60c9eSAndreas Gohr foreach($installed as $ext => $info) { 73*64159a61SAndreas Gohr msg( 74*64159a61SAndreas Gohr sprintf( 75*64159a61SAndreas Gohr $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'), 76*64159a61SAndreas Gohr $info['base'] 77*64159a61SAndreas Gohr ), 78*64159a61SAndreas Gohr 1 79*64159a61SAndreas Gohr ); 805c0b30bfSAndreas Gohr } 8102779b18SMichael Hamann break; 8202779b18SMichael Hamann case 'uninstall': 83519895b5SAndreas Gohr $extension->setExtension($extname); 8402779b18SMichael Hamann $status = $extension->uninstall(); 857e8500eeSGerrit Uitslag if($status) { 86*64159a61SAndreas Gohr msg( 87*64159a61SAndreas Gohr sprintf( 88*64159a61SAndreas Gohr $this->getLang('msg_delete_success'), 89*64159a61SAndreas Gohr hsc($extension->getDisplayName()) 90*64159a61SAndreas Gohr ), 91*64159a61SAndreas Gohr 1 92*64159a61SAndreas Gohr ); 937e8500eeSGerrit Uitslag } else { 94*64159a61SAndreas Gohr msg( 95*64159a61SAndreas Gohr sprintf( 96*64159a61SAndreas Gohr $this->getLang('msg_delete_failed'), 97*64159a61SAndreas Gohr hsc($extension->getDisplayName()) 98*64159a61SAndreas Gohr ), 99*64159a61SAndreas Gohr -1 100*64159a61SAndreas Gohr ); 10102779b18SMichael Hamann } 10202779b18SMichael Hamann break; 10302779b18SMichael Hamann 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 { 109813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1); 11002779b18SMichael Hamann } 11102779b18SMichael Hamann break; 11202779b18SMichael Hamann case 'disable'; 113519895b5SAndreas Gohr $extension->setExtension($extname); 11402779b18SMichael Hamann $status = $extension->disable(); 11502779b18SMichael Hamann if($status !== true) { 11602779b18SMichael Hamann msg($status, -1); 11702779b18SMichael Hamann } else { 118813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1); 11902779b18SMichael Hamann } 12002779b18SMichael Hamann break; 12102779b18SMichael Hamann } 12202779b18SMichael Hamann } 12302779b18SMichael Hamann } 12432fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 125fee60c9eSAndreas Gohr } elseif($INPUT->post->str('installurl') && checkSecurityToken()) { 126fee60c9eSAndreas Gohr $installed = $extension->installFromURL($INPUT->post->str('installurl')); 127fee60c9eSAndreas Gohr foreach($installed as $ext => $info) { 128fee60c9eSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 129fee60c9eSAndreas Gohr } 13032fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 131fee60c9eSAndreas Gohr } elseif(isset($_FILES['installfile']) && checkSecurityToken()) { 132fee60c9eSAndreas Gohr $installed = $extension->installFromUpload('installfile'); 133fee60c9eSAndreas Gohr foreach($installed as $ext => $info) { 134fee60c9eSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 135fee60c9eSAndreas Gohr } 13632fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 13732fdfac2SAndreas Gohr } 13832fdfac2SAndreas Gohr 139fee60c9eSAndreas Gohr } catch(Exception $e) { 140fee60c9eSAndreas Gohr msg($e->getMessage(), -1); 14132fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 142fee60c9eSAndreas Gohr } 14332fdfac2SAndreas Gohr 144788f86d9SMichael Hamann } 145788f86d9SMichael Hamann 146788f86d9SMichael Hamann /** 14702779b18SMichael Hamann * Render HTML output 148788f86d9SMichael Hamann */ 149788f86d9SMichael Hamann public function html() { 150788f86d9SMichael Hamann ptln('<h1>'.$this->getLang('menu').'</h1>'); 15102779b18SMichael Hamann ptln('<div id="extension__manager">'); 152788f86d9SMichael Hamann 153d7410643SAndreas Gohr $this->gui->tabNavigation(); 154d7410643SAndreas Gohr 1555d7f3164SAndreas Gohr switch($this->gui->currentTab()) { 156d7410643SAndreas Gohr case 'search': 1571dd40c86SAndreas Gohr $this->gui->tabSearch(); 158d7410643SAndreas Gohr break; 1595d7f3164SAndreas Gohr case 'templates': 1601dd40c86SAndreas Gohr $this->gui->tabTemplates(); 1615d7f3164SAndreas Gohr break; 162ea9f3f90SAndreas Gohr case 'install': 163ea9f3f90SAndreas Gohr $this->gui->tabInstall(); 164ea9f3f90SAndreas Gohr break; 165d7410643SAndreas Gohr case 'plugins': 166d7410643SAndreas Gohr default: 1671dd40c86SAndreas Gohr $this->gui->tabPlugins(); 168d7410643SAndreas Gohr } 169d7410643SAndreas Gohr 17002779b18SMichael Hamann ptln('</div>'); 171788f86d9SMichael Hamann } 172788f86d9SMichael Hamann} 173788f86d9SMichael Hamann 174788f86d9SMichael Hamann// vim:ts=4:sw=4:et: 175