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 12*02779b18SMichael Hamann/** 13*02779b18SMichael Hamann * Admin part of the extension manager 14*02779b18SMichael Hamann */ 15788f86d9SMichael Hamannclass admin_plugin_extension extends DokuWiki_Admin_Plugin { 16*02779b18SMichael Hamann protected $infoFor = null; 17788f86d9SMichael Hamann 18788f86d9SMichael Hamann /** 19788f86d9SMichael Hamann * @return int sort number in admin menu 20788f86d9SMichael Hamann */ 21788f86d9SMichael Hamann public function getMenuSort() { 22788f86d9SMichael Hamann return 0; 23788f86d9SMichael Hamann } 24788f86d9SMichael Hamann 25788f86d9SMichael Hamann /** 26788f86d9SMichael Hamann * @return bool true if only access for superuser, false is for superusers and moderators 27788f86d9SMichael Hamann */ 28788f86d9SMichael Hamann public function forAdminOnly() { 29788f86d9SMichael Hamann return true; 30788f86d9SMichael Hamann } 31788f86d9SMichael Hamann 32788f86d9SMichael Hamann /** 33*02779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 34788f86d9SMichael Hamann */ 35788f86d9SMichael Hamann public function handle() { 36*02779b18SMichael Hamann global $INPUT; 37*02779b18SMichael Hamann // initialize the remote repository 38788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 39788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 40788f86d9SMichael Hamann $repository->init(); 41*02779b18SMichael Hamann 42*02779b18SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 43*02779b18SMichael Hamann $extension = $this->loadHelper('extension_extension'); 44*02779b18SMichael Hamann 45*02779b18SMichael Hamann if ($INPUT->post->has('fn')) { 46*02779b18SMichael Hamann $actions = $INPUT->post->arr('fn'); 47*02779b18SMichael Hamann foreach ($actions as $action => $extensions) { 48*02779b18SMichael Hamann foreach ($extensions as $extname => $label) { 49*02779b18SMichael Hamann switch ($action) { 50*02779b18SMichael Hamann case 'info': 51*02779b18SMichael Hamann $this->infoFor = $extname; 52*02779b18SMichael Hamann break; 53*02779b18SMichael Hamann case 'install': 54*02779b18SMichael Hamann msg('Not implemented'); 55*02779b18SMichael Hamann break; 56*02779b18SMichael Hamann case 'reinstall': 57*02779b18SMichael Hamann case 'update': 58*02779b18SMichael Hamann $extension->setExtension($extname, false); 59*02779b18SMichael Hamann $status = $extension->installOrUpdate(); 60*02779b18SMichael Hamann if ($status !== true) { 61*02779b18SMichael Hamann msg($status, -1); 62*02779b18SMichael Hamann } else { 63*02779b18SMichael Hamann msg(sprintf($this->getLang('msg_update_success'), hsc($extension->getName())), 1); 64*02779b18SMichael Hamann } 65*02779b18SMichael Hamann break; 66*02779b18SMichael Hamann case 'uninstall': 67*02779b18SMichael Hamann $extension->setExtension($extname, false); 68*02779b18SMichael Hamann $status = $extension->uninstall(); 69*02779b18SMichael Hamann if ($status !== true) { 70*02779b18SMichael Hamann msg($status, -1); 71*02779b18SMichael Hamann } else { 72*02779b18SMichael Hamann msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getName())), 1); 73*02779b18SMichael Hamann } 74*02779b18SMichael Hamann break; 75*02779b18SMichael Hamann case 'enable'; 76*02779b18SMichael Hamann $extension->setExtension($extname, false); 77*02779b18SMichael Hamann $status = $extension->enable(); 78*02779b18SMichael Hamann if ($status !== true) { 79*02779b18SMichael Hamann msg($status, -1); 80*02779b18SMichael Hamann } else { 81*02779b18SMichael Hamann msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getName())), 1); 82*02779b18SMichael Hamann } 83*02779b18SMichael Hamann break; 84*02779b18SMichael Hamann case 'disable'; 85*02779b18SMichael Hamann $extension->setExtension($extname, false); 86*02779b18SMichael Hamann $status = $extension->disable(); 87*02779b18SMichael Hamann if ($status !== true) { 88*02779b18SMichael Hamann msg($status, -1); 89*02779b18SMichael Hamann } else { 90*02779b18SMichael Hamann msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getName())), 1); 91*02779b18SMichael Hamann } 92*02779b18SMichael Hamann break; 93*02779b18SMichael Hamann } 94*02779b18SMichael Hamann } 95*02779b18SMichael Hamann } 96*02779b18SMichael Hamann } 97788f86d9SMichael Hamann } 98788f86d9SMichael Hamann 99788f86d9SMichael Hamann /** 100*02779b18SMichael Hamann * Render HTML output 101788f86d9SMichael Hamann */ 102788f86d9SMichael Hamann public function html() { 103788f86d9SMichael Hamann /* @var Doku_Plugin_Controller $plugin_controller */ 104788f86d9SMichael Hamann global $plugin_controller; 105788f86d9SMichael Hamann ptln('<h1>'.$this->getLang('menu').'</h1>'); 106*02779b18SMichael Hamann ptln('<div id="extension__manager">'); 107788f86d9SMichael Hamann 108788f86d9SMichael Hamann $pluginlist = $plugin_controller->getList('', true); 109788f86d9SMichael Hamann /* @var helper_plugin_extension_extension $extension */ 110788f86d9SMichael Hamann $extension = $this->loadHelper('extension_extension'); 111*02779b18SMichael Hamann /* @var helper_plugin_extension_list $list */ 112*02779b18SMichael Hamann $list = $this->loadHelper('extension_list'); 113*02779b18SMichael Hamann $list->start_form(); 114788f86d9SMichael Hamann foreach ($pluginlist as $name) { 115788f86d9SMichael Hamann $extension->setExtension($name, false); 116*02779b18SMichael Hamann $list->add_row($extension, $name == $this->infoFor); 117788f86d9SMichael Hamann } 118*02779b18SMichael Hamann $list->end_form(); 119*02779b18SMichael Hamann $list->render(); 120*02779b18SMichael Hamann ptln('</div>'); 121788f86d9SMichael Hamann } 122788f86d9SMichael Hamann} 123788f86d9SMichael Hamann 124788f86d9SMichael Hamann// vim:ts=4:sw=4:et: