1788f86d9SMichael Hamann<?php 2d4f83172SAndreas Gohr 38553d24dSAndreas Gohruse dokuwiki\Extension\AdminPlugin; 4*80bc92fbSAndreas Gohruse dokuwiki\plugin\extension\Extension; 5*80bc92fbSAndreas Gohruse dokuwiki\plugin\extension\Gui; 6*80bc92fbSAndreas Gohruse dokuwiki\plugin\extension\Installer; 7d4f83172SAndreas Gohr 8788f86d9SMichael Hamann/** 9788f86d9SMichael Hamann * DokuWiki Plugin extension (Admin Component) 10788f86d9SMichael Hamann * 11788f86d9SMichael Hamann * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 12788f86d9SMichael Hamann * @author Michael Hamann <michael@content-space.de> 13788f86d9SMichael Hamann */ 14788f86d9SMichael Hamann 1502779b18SMichael Hamann/** 1602779b18SMichael Hamann * Admin part of the extension manager 1702779b18SMichael Hamann */ 188553d24dSAndreas Gohrclass admin_plugin_extension extends AdminPlugin 1918b1e90aSAndreas Gohr{ 20fe2dcfd5SAndreas Gohr protected $infoFor; 21d7410643SAndreas Gohr /** @var helper_plugin_extension_gui */ 22d7410643SAndreas Gohr protected $gui; 23d7410643SAndreas Gohr 24d7410643SAndreas Gohr /** 25d7410643SAndreas Gohr * Constructor 26d7410643SAndreas Gohr * 27d7410643SAndreas Gohr * loads additional helpers 28d7410643SAndreas Gohr */ 2918b1e90aSAndreas Gohr public function __construct() 3018b1e90aSAndreas Gohr { 31d7410643SAndreas Gohr $this->gui = plugin_load('helper', 'extension_gui'); 32d7410643SAndreas Gohr } 33788f86d9SMichael Hamann 34788f86d9SMichael Hamann /** 35788f86d9SMichael Hamann * @return int sort number in admin menu 36788f86d9SMichael Hamann */ 3718b1e90aSAndreas Gohr public function getMenuSort() 3818b1e90aSAndreas Gohr { 39788f86d9SMichael Hamann return 0; 40788f86d9SMichael Hamann } 41788f86d9SMichael Hamann 42788f86d9SMichael Hamann /** 43788f86d9SMichael Hamann * @return bool true if only access for superuser, false is for superusers and moderators 44788f86d9SMichael Hamann */ 4518b1e90aSAndreas Gohr public function forAdminOnly() 4618b1e90aSAndreas Gohr { 47788f86d9SMichael Hamann return true; 48788f86d9SMichael Hamann } 49788f86d9SMichael Hamann 50788f86d9SMichael Hamann /** 5102779b18SMichael Hamann * Execute the requested action(s) and initialize the plugin repository 52*80bc92fbSAndreas Gohr * 53*80bc92fbSAndreas Gohr * @todo repo init and ssl check still missing 54788f86d9SMichael Hamann */ 5518b1e90aSAndreas Gohr public function handle() 5618b1e90aSAndreas Gohr { 5702779b18SMichael Hamann global $INPUT; 58*80bc92fbSAndreas Gohr 59*80bc92fbSAndreas Gohr if (!$INPUT->post->has('fn') && !$INPUT->post->str('installurl') && !isset($_FILES['installfile'])) { 60*80bc92fbSAndreas Gohr return; // nothing to do 61*80bc92fbSAndreas Gohr } 62*80bc92fbSAndreas Gohr if (!checkSecurityToken()) return; 63*80bc92fbSAndreas Gohr 64*80bc92fbSAndreas Gohr $installer = new Installer($INPUT->post->bool('overwrite')); 65*80bc92fbSAndreas Gohr try { 66*80bc92fbSAndreas Gohr foreach ($INPUT->post->arr('fn') as $action => $extensions) { 67*80bc92fbSAndreas Gohr foreach ($extensions as $extension => $label) { 68*80bc92fbSAndreas Gohr $ext = Extension::createFromId($extension); 69*80bc92fbSAndreas Gohr switch ($action) { 70*80bc92fbSAndreas Gohr case 'install': 71*80bc92fbSAndreas Gohr case 'reinstall': 72*80bc92fbSAndreas Gohr case 'update': 73*80bc92fbSAndreas Gohr $installer->installExtension($ext); 74*80bc92fbSAndreas Gohr break; 75*80bc92fbSAndreas Gohr case 'uninstall': 76*80bc92fbSAndreas Gohr $installer->uninstall($ext); 77*80bc92fbSAndreas Gohr break; 78*80bc92fbSAndreas Gohr case 'enable': 79*80bc92fbSAndreas Gohr $ext->enable(); 80*80bc92fbSAndreas Gohr break; 81*80bc92fbSAndreas Gohr case 'disable': 82*80bc92fbSAndreas Gohr $ext->disable(); 83*80bc92fbSAndreas Gohr break; 84*80bc92fbSAndreas Gohr } 85*80bc92fbSAndreas Gohr } 86*80bc92fbSAndreas Gohr } 87*80bc92fbSAndreas Gohr if ($INPUT->post->str('installurl')) { 88*80bc92fbSAndreas Gohr $installer->installFromURL($INPUT->post->str('installurl')); 89*80bc92fbSAndreas Gohr } 90*80bc92fbSAndreas Gohr if (isset($_FILES['installfile'])) { 91*80bc92fbSAndreas Gohr $installer->installFromUpload('installfile'); 92*80bc92fbSAndreas Gohr } 93*80bc92fbSAndreas Gohr } catch (Exception $e) { 94*80bc92fbSAndreas Gohr msg(hsc($e->getMessage()), -1); 95*80bc92fbSAndreas Gohr } 96*80bc92fbSAndreas Gohr 97*80bc92fbSAndreas Gohr $processed = $installer->getProcessed(); 98*80bc92fbSAndreas Gohr foreach ($processed as $id => $status) { 99*80bc92fbSAndreas Gohr if ($status == Installer::STATUS_INSTALLED) { 100*80bc92fbSAndreas Gohr msg(sprintf($this->getLang('msg_install_success'), $id), 1); 101*80bc92fbSAndreas Gohr } else if ($status == Installer::STATUS_UPDATED) { 102*80bc92fbSAndreas Gohr msg(sprintf($this->getLang('msg_update_success'), $id), 1); 103*80bc92fbSAndreas Gohr } else if ($status == Installer::STATUS_SKIPPED) { 104*80bc92fbSAndreas Gohr msg(sprintf($this->getLang('msg_nooverwrite'), $id), 0); 105*80bc92fbSAndreas Gohr } else if ($status == Installer::STATUS_REMOVED) { 106*80bc92fbSAndreas Gohr msg(sprintf($this->getLang('msg_delete_success'), $id), 1); 107*80bc92fbSAndreas Gohr } 108*80bc92fbSAndreas Gohr } 109*80bc92fbSAndreas Gohr 110*80bc92fbSAndreas Gohr send_redirect((new Gui())->tabURL('', [], '&', true)); 111*80bc92fbSAndreas Gohr return; 112*80bc92fbSAndreas Gohr 113*80bc92fbSAndreas Gohr // FIXME old stuff below 114*80bc92fbSAndreas Gohr 11502779b18SMichael Hamann // initialize the remote repository 116788f86d9SMichael Hamann /* @var helper_plugin_extension_repository $repository */ 117788f86d9SMichael Hamann $repository = $this->loadHelper('extension_repository'); 11855332151SAndreas Gohr 11998d21c04SAndreas Gohr if (!$repository->hasAccess(!$INPUT->bool('purge'))) { 120a72f333fSSatoshi Sahara $url = $this->gui->tabURL('', ['purge' => 1], '&'); 121cf833595SSatoshi Sahara msg($this->getLang('repo_error') . 1220a034b36SAndreas Gohr ' [<a href="' . $url . '" rel="noreferrer">' . $this->getLang('repo_retry') . '</a>]', -1); 123e45b5c14SAndreas Gohr } 124e45b5c14SAndreas Gohr 1251ec86040SAndreas Gohr if (!in_array('ssl', stream_get_transports())) { 1261ec86040SAndreas Gohr msg($this->getLang('nossl'), -1); 1271ec86040SAndreas Gohr } 128788f86d9SMichael Hamann } 129788f86d9SMichael Hamann 130788f86d9SMichael Hamann /** 13102779b18SMichael Hamann * Render HTML output 132788f86d9SMichael Hamann */ 13318b1e90aSAndreas Gohr public function html() 13418b1e90aSAndreas Gohr { 1354fd6a1d7SAndreas Gohr echo '<h1>' . $this->getLang('menu') . '</h1>'; 1364fd6a1d7SAndreas Gohr 137981e70caSAndreas Gohr $gui = new \dokuwiki\plugin\extension\GuiAdmin(); 138981e70caSAndreas Gohr echo $gui->render(); 139788f86d9SMichael Hamann } 140788f86d9SMichael Hamann} 141788f86d9SMichael Hamann 142788f86d9SMichael Hamann// vim:ts=4:sw=4:et: 143