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; 17*d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 18*d7410643SAndreas Gohr protected $gui; 19*d7410643SAndreas Gohr 20*d7410643SAndreas Gohr /** 21*d7410643SAndreas Gohr * Constructor 22*d7410643SAndreas Gohr * 23*d7410643SAndreas Gohr * loads additional helpers 24*d7410643SAndreas Gohr */ 25*d7410643SAndreas Gohr public function __construct(){ 26*d7410643SAndreas Gohr $this->gui = plugin_load('helper', 'extension_gui'); 27*d7410643SAndreas 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'); 51788f86d9SMichael Hamann $repository->init(); 5202779b18SMichael Hamann 53e45b5c14SAndreas Gohr if(!$repository->hasAccess()){ 54*d7410643SAndreas Gohr $url = $this->gui->tabURL('', array('purge'=>1)); 55e45b5c14SAndreas Gohr 56e45b5c14SAndreas Gohr msg('The DokuWiki extension repository can not be reached currently. 57e45b5c14SAndreas Gohr Online Features are not available. [<a href="'.$url.'">retry</a>]', -1); 58e45b5c14SAndreas Gohr } 59e45b5c14SAndreas Gohr 6002779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 6102779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 6202779b18SMichael Hamann 6302779b18SMichael Hamann if ($INPUT->post->has('fn')) { 6402779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 6502779b18SMichael Hamann foreach ($actions as $action => $extensions) { 6602779b18SMichael Hamann foreach ($extensions as $extname => $label) { 6702779b18SMichael Hamann switch ($action) { 6802779b18SMichael Hamann case 'info': 6902779b18SMichael Hamann $this->infoFor = $extname; 7002779b18SMichael Hamann break; 7102779b18SMichael Hamann case 'install': 7202779b18SMichael Hamann msg('Not implemented'); 7302779b18SMichael Hamann break; 7402779b18SMichael Hamann case 'reinstall': 7502779b18SMichael Hamann case 'update': 7602779b18SMichael Hamann $extension->setExtension($extname, false); 7702779b18SMichael Hamann $status = $extension->installOrUpdate(); 7802779b18SMichael Hamann if ($status !== true) { 7902779b18SMichael Hamann msg($status, -1); 8002779b18SMichael Hamann } else { 8102779b18SMichael Hamann msg(sprintf($this->getLang('msg_update_success'), hsc($extension->getName())), 1); 8202779b18SMichael Hamann } 8302779b18SMichael Hamann break; 8402779b18SMichael Hamann case 'uninstall': 8502779b18SMichael Hamann $extension->setExtension($extname, false); 8602779b18SMichael Hamann $status = $extension->uninstall(); 8702779b18SMichael Hamann if ($status !== true) { 8802779b18SMichael Hamann msg($status, -1); 8902779b18SMichael Hamann } else { 9002779b18SMichael Hamann msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getName())), 1); 9102779b18SMichael Hamann } 9202779b18SMichael Hamann break; 9302779b18SMichael Hamann case 'enable'; 9402779b18SMichael Hamann $extension->setExtension($extname, false); 9502779b18SMichael Hamann $status = $extension->enable(); 9602779b18SMichael Hamann if ($status !== true) { 9702779b18SMichael Hamann msg($status, -1); 9802779b18SMichael Hamann } else { 9902779b18SMichael Hamann msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getName())), 1); 10002779b18SMichael Hamann } 10102779b18SMichael Hamann break; 10202779b18SMichael Hamann case 'disable'; 10302779b18SMichael Hamann $extension->setExtension($extname, false); 10402779b18SMichael Hamann $status = $extension->disable(); 10502779b18SMichael Hamann if ($status !== true) { 10602779b18SMichael Hamann msg($status, -1); 10702779b18SMichael Hamann } else { 10802779b18SMichael Hamann msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getName())), 1); 10902779b18SMichael Hamann } 11002779b18SMichael Hamann break; 11102779b18SMichael Hamann } 11202779b18SMichael Hamann } 11302779b18SMichael Hamann } 11402779b18SMichael Hamann } 115788f86d9SMichael Hamann } 116788f86d9SMichael Hamann 117788f86d9SMichael Hamann /** 11802779b18SMichael Hamann * Render HTML output 119788f86d9SMichael Hamann */ 120788f86d9SMichael Hamann public function html() { 121788f86d9SMichael Hamann /* @var Doku_Plugin_Controller $plugin_controller */ 122788f86d9SMichael Hamann global $plugin_controller; 123*d7410643SAndreas Gohr global $INPUT; 124788f86d9SMichael Hamann ptln('<h1>'.$this->getLang('menu').'</h1>'); 12502779b18SMichael Hamann ptln('<div id="extension__manager">'); 126788f86d9SMichael Hamann 127*d7410643SAndreas Gohr $this->gui->tabNavigation(); 128*d7410643SAndreas Gohr 129*d7410643SAndreas Gohr switch($INPUT->str('tab','plugins')){ 130*d7410643SAndreas Gohr case 'search': 131*d7410643SAndreas Gohr echo 'search interface'; 132*d7410643SAndreas Gohr break; 133*d7410643SAndreas Gohr case 'plugins': 134*d7410643SAndreas Gohr default: 135*d7410643SAndreas Gohr // FIXME move to function? 136*d7410643SAndreas Gohr 137788f86d9SMichael Hamann $pluginlist = $plugin_controller->getList('', true); 138788f86d9SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 139788f86d9SMichael Hamann $extension = $this->loadHelper('extension_extension'); 14002779b18SMichael Hamann /* @var helper_plugin_extension_list $list */ 14102779b18SMichael Hamann $list = $this->loadHelper('extension_list'); 14202779b18SMichael Hamann $list->start_form(); 143788f86d9SMichael Hamann foreach ($pluginlist as $name) { 144788f86d9SMichael Hamann $extension->setExtension($name, false); 14502779b18SMichael Hamann $list->add_row($extension, $name == $this->infoFor); 146788f86d9SMichael Hamann } 14702779b18SMichael Hamann $list->end_form(); 14802779b18SMichael Hamann $list->render(); 149*d7410643SAndreas Gohr } 150*d7410643SAndreas Gohr 151*d7410643SAndreas Gohr 15202779b18SMichael Hamann ptln('</div>'); 153788f86d9SMichael Hamann } 154788f86d9SMichael Hamann} 155788f86d9SMichael Hamann 156788f86d9SMichael Hamann// vim:ts=4:sw=4:et: