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 */ 12*18b1e90aSAndreas Gohrclass admin_plugin_extension extends DokuWiki_Admin_Plugin 13*18b1e90aSAndreas Gohr{ 1402779b18SMichael Hamann protected $infoFor = null; 15d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 16d7410643SAndreas Gohr protected $gui; 17d7410643SAndreas Gohr 18d7410643SAndreas Gohr /** 19d7410643SAndreas Gohr * Constructor 20d7410643SAndreas Gohr * 21d7410643SAndreas Gohr * loads additional helpers 22d7410643SAndreas Gohr */ 23*18b1e90aSAndreas Gohr public function __construct() 24*18b1e90aSAndreas Gohr { 25d7410643SAndreas Gohr $this->gui = plugin_load('helper', 'extension_gui'); 26d7410643SAndreas Gohr } 27788f86d9SMichael Hamann 28788f86d9SMichael Hamann /** 29788f86d9SMichael Hamann * @return int sort number in admin menu 30788f86d9SMichael Hamann */ 31*18b1e90aSAndreas Gohr public function getMenuSort() 32*18b1e90aSAndreas Gohr { 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 */ 39*18b1e90aSAndreas Gohr public function forAdminOnly() 40*18b1e90aSAndreas Gohr { 41788f86d9SMichael Hamann return true; 42788f86d9SMichael Hamann } 43788f86d9SMichael Hamann 44788f86d9SMichael Hamann /** 4502779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 46788f86d9SMichael Hamann */ 47*18b1e90aSAndreas Gohr public function handle() 48*18b1e90aSAndreas Gohr { 4902779b18SMichael Hamann global $INPUT; 5002779b18SMichael Hamann // initialize the remote repository 51788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 52788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 5355332151SAndreas Gohr 54e45b5c14SAndreas Gohr if (!$repository->hasAccess()) { 55d7410643SAndreas Gohr $url = $this->gui->tabURL('', array('purge' => 1)); 567944abddSAndreas Gohr msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1); 57e45b5c14SAndreas Gohr } 58e45b5c14SAndreas Gohr 591ec86040SAndreas Gohr if (!in_array('ssl', stream_get_transports())) { 601ec86040SAndreas Gohr msg($this->getLang('nossl'), -1); 611ec86040SAndreas Gohr } 621ec86040SAndreas Gohr 6302779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 6402779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 6502779b18SMichael Hamann 6632fdfac2SAndreas Gohr try { 67fee60c9eSAndreas Gohr if ($INPUT->post->has('fn') && checkSecurityToken()) { 6802779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 6902779b18SMichael Hamann foreach ($actions as $action => $extensions) { 7002779b18SMichael Hamann foreach ($extensions as $extname => $label) { 7102779b18SMichael Hamann switch ($action) { 7202779b18SMichael Hamann case 'install': 7302779b18SMichael Hamann case 'reinstall': 7402779b18SMichael Hamann case 'update': 75519895b5SAndreas Gohr $extension->setExtension($extname); 765c0b30bfSAndreas Gohr $installed = $extension->installOrUpdate(); 77fee60c9eSAndreas Gohr foreach ($installed as $ext => $info) { 7864159a61SAndreas Gohr msg( 7964159a61SAndreas Gohr sprintf( 8064159a61SAndreas Gohr $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'), 8164159a61SAndreas Gohr $info['base'] 8264159a61SAndreas Gohr ), 8364159a61SAndreas Gohr 1 8464159a61SAndreas Gohr ); 855c0b30bfSAndreas Gohr } 8602779b18SMichael Hamann break; 8702779b18SMichael Hamann case 'uninstall': 88519895b5SAndreas Gohr $extension->setExtension($extname); 8902779b18SMichael Hamann $status = $extension->uninstall(); 907e8500eeSGerrit Uitslag if ($status) { 9164159a61SAndreas Gohr msg( 9264159a61SAndreas Gohr sprintf( 9364159a61SAndreas Gohr $this->getLang('msg_delete_success'), 9464159a61SAndreas Gohr hsc($extension->getDisplayName()) 9564159a61SAndreas Gohr ), 9664159a61SAndreas Gohr 1 9764159a61SAndreas Gohr ); 987e8500eeSGerrit Uitslag } else { 9964159a61SAndreas Gohr msg( 10064159a61SAndreas Gohr sprintf( 10164159a61SAndreas Gohr $this->getLang('msg_delete_failed'), 10264159a61SAndreas Gohr hsc($extension->getDisplayName()) 10364159a61SAndreas Gohr ), 10464159a61SAndreas Gohr -1 10564159a61SAndreas Gohr ); 10602779b18SMichael Hamann } 10702779b18SMichael Hamann break; 108*18b1e90aSAndreas Gohr case 'enable': 109519895b5SAndreas Gohr $extension->setExtension($extname); 11002779b18SMichael Hamann $status = $extension->enable(); 11102779b18SMichael Hamann if ($status !== true) { 11202779b18SMichael Hamann msg($status, -1); 11302779b18SMichael Hamann } else { 114813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1); 11502779b18SMichael Hamann } 11602779b18SMichael Hamann break; 117*18b1e90aSAndreas Gohr case 'disable': 118519895b5SAndreas Gohr $extension->setExtension($extname); 11902779b18SMichael Hamann $status = $extension->disable(); 12002779b18SMichael Hamann if ($status !== true) { 12102779b18SMichael Hamann msg($status, -1); 12202779b18SMichael Hamann } else { 123813d7e09SAndreas Gohr msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1); 12402779b18SMichael Hamann } 12502779b18SMichael Hamann break; 12602779b18SMichael Hamann } 12702779b18SMichael Hamann } 12802779b18SMichael Hamann } 12932fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 130fee60c9eSAndreas Gohr } elseif ($INPUT->post->str('installurl') && checkSecurityToken()) { 131fee60c9eSAndreas Gohr $installed = $extension->installFromURL($INPUT->post->str('installurl')); 132fee60c9eSAndreas Gohr foreach ($installed as $ext => $info) { 133fee60c9eSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 134fee60c9eSAndreas Gohr } 13532fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 136fee60c9eSAndreas Gohr } elseif (isset($_FILES['installfile']) && checkSecurityToken()) { 137fee60c9eSAndreas Gohr $installed = $extension->installFromUpload('installfile'); 138fee60c9eSAndreas Gohr foreach ($installed as $ext => $info) { 139fee60c9eSAndreas Gohr msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1); 140fee60c9eSAndreas Gohr } 14132fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 14232fdfac2SAndreas Gohr } 143fee60c9eSAndreas Gohr } catch (Exception $e) { 144fee60c9eSAndreas Gohr msg($e->getMessage(), -1); 14532fdfac2SAndreas Gohr send_redirect($this->gui->tabURL('', array(), '&', true)); 146fee60c9eSAndreas Gohr } 147788f86d9SMichael Hamann } 148788f86d9SMichael Hamann 149788f86d9SMichael Hamann /** 15002779b18SMichael Hamann * Render HTML output 151788f86d9SMichael Hamann */ 152*18b1e90aSAndreas Gohr public function html() 153*18b1e90aSAndreas Gohr { 154788f86d9SMichael Hamann ptln('<h1>'.$this->getLang('menu').'</h1>'); 15502779b18SMichael Hamann ptln('<div id="extension__manager">'); 156788f86d9SMichael Hamann 157d7410643SAndreas Gohr $this->gui->tabNavigation(); 158d7410643SAndreas Gohr 1595d7f3164SAndreas Gohr switch ($this->gui->currentTab()) { 160d7410643SAndreas Gohr case 'search': 1611dd40c86SAndreas Gohr $this->gui->tabSearch(); 162d7410643SAndreas Gohr break; 1635d7f3164SAndreas Gohr case 'templates': 1641dd40c86SAndreas Gohr $this->gui->tabTemplates(); 1655d7f3164SAndreas Gohr break; 166ea9f3f90SAndreas Gohr case 'install': 167ea9f3f90SAndreas Gohr $this->gui->tabInstall(); 168ea9f3f90SAndreas Gohr break; 169d7410643SAndreas Gohr case 'plugins': 170d7410643SAndreas Gohr default: 1711dd40c86SAndreas Gohr $this->gui->tabPlugins(); 172d7410643SAndreas Gohr } 173d7410643SAndreas Gohr 17402779b18SMichael Hamann ptln('</div>'); 175788f86d9SMichael Hamann } 176788f86d9SMichael Hamann} 177788f86d9SMichael Hamann 178788f86d9SMichael Hamann// vim:ts=4:sw=4:et: 179