1<?php 2/** 3 * DokuWiki Plugin extension (Admin Component) 4 * 5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6 * @author Michael Hamann <michael@content-space.de> 7 */ 8 9// must be run within Dokuwiki 10if(!defined('DOKU_INC')) die(); 11 12/** 13 * Admin part of the extension manager 14 */ 15class admin_plugin_extension extends DokuWiki_Admin_Plugin { 16 protected $infoFor = null; 17 18 /** 19 * @return int sort number in admin menu 20 */ 21 public function getMenuSort() { 22 return 0; 23 } 24 25 /** 26 * @return bool true if only access for superuser, false is for superusers and moderators 27 */ 28 public function forAdminOnly() { 29 return true; 30 } 31 32 /** 33 * Execute the requested action(s) and initialize the plugin repository 34 */ 35 public function handle() { 36 global $INPUT; 37 // initialize the remote repository 38 /* @var helper_plugin_extension_repository $repository */ 39 $repository = $this->loadHelper('extension_repository'); 40 $repository->init(); 41 42 if(!$repository->hasAccess()){ 43 $url = helper_plugin_extension_list::tabURL('', array('purge'=>1)); 44 45 msg('The DokuWiki extension repository can not be reached currently. 46 Online Features are not available. [<a href="'.$url.'">retry</a>]', -1); 47 } 48 49 /* @var helper_plugin_extension_extension $extension */ 50 $extension = $this->loadHelper('extension_extension'); 51 52 if ($INPUT->post->has('fn')) { 53 $actions = $INPUT->post->arr('fn'); 54 foreach ($actions as $action => $extensions) { 55 foreach ($extensions as $extname => $label) { 56 switch ($action) { 57 case 'info': 58 $this->infoFor = $extname; 59 break; 60 case 'install': 61 msg('Not implemented'); 62 break; 63 case 'reinstall': 64 case 'update': 65 $extension->setExtension($extname, false); 66 $status = $extension->installOrUpdate(); 67 if ($status !== true) { 68 msg($status, -1); 69 } else { 70 msg(sprintf($this->getLang('msg_update_success'), hsc($extension->getName())), 1); 71 } 72 break; 73 case 'uninstall': 74 $extension->setExtension($extname, false); 75 $status = $extension->uninstall(); 76 if ($status !== true) { 77 msg($status, -1); 78 } else { 79 msg(sprintf($this->getLang('msg_delete_success'), hsc($extension->getName())), 1); 80 } 81 break; 82 case 'enable'; 83 $extension->setExtension($extname, false); 84 $status = $extension->enable(); 85 if ($status !== true) { 86 msg($status, -1); 87 } else { 88 msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getName())), 1); 89 } 90 break; 91 case 'disable'; 92 $extension->setExtension($extname, false); 93 $status = $extension->disable(); 94 if ($status !== true) { 95 msg($status, -1); 96 } else { 97 msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getName())), 1); 98 } 99 break; 100 } 101 } 102 } 103 } 104 } 105 106 /** 107 * Render HTML output 108 */ 109 public function html() { 110 /* @var Doku_Plugin_Controller $plugin_controller */ 111 global $plugin_controller; 112 ptln('<h1>'.$this->getLang('menu').'</h1>'); 113 ptln('<div id="extension__manager">'); 114 115 $pluginlist = $plugin_controller->getList('', true); 116 /* @var helper_plugin_extension_extension $extension */ 117 $extension = $this->loadHelper('extension_extension'); 118 /* @var helper_plugin_extension_list $list */ 119 $list = $this->loadHelper('extension_list'); 120 $list->start_form(); 121 foreach ($pluginlist as $name) { 122 $extension->setExtension($name, false); 123 $list->add_row($extension, $name == $this->infoFor); 124 } 125 $list->end_form(); 126 $list->render(); 127 ptln('</div>'); 128 } 129} 130 131// vim:ts=4:sw=4:et: