172dda0b4SAndreas Gohr<?php 272dda0b4SAndreas Gohr/** DokuWiki Plugin extension (Action Component) 372dda0b4SAndreas Gohr * 472dda0b4SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 572dda0b4SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 672dda0b4SAndreas Gohr */ 772dda0b4SAndreas Gohr 8*18b1e90aSAndreas Gohrclass action_plugin_extension extends DokuWiki_Action_Plugin 9*18b1e90aSAndreas Gohr{ 1072dda0b4SAndreas Gohr 1172dda0b4SAndreas Gohr /** 1272dda0b4SAndreas Gohr * Registers a callback function for a given event 1372dda0b4SAndreas Gohr * 1472dda0b4SAndreas Gohr * @param Doku_Event_Handler $controller DokuWiki's event controller object 1572dda0b4SAndreas Gohr * @return void 1672dda0b4SAndreas Gohr */ 17*18b1e90aSAndreas Gohr public function register(Doku_Event_Handler $controller) 18*18b1e90aSAndreas Gohr { 1972dda0b4SAndreas Gohr 2072dda0b4SAndreas Gohr $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info'); 2172dda0b4SAndreas Gohr } 2272dda0b4SAndreas Gohr 234c005e3fSAndreas Gohr /** 244c005e3fSAndreas Gohr * Create the detail info for a single plugin 254c005e3fSAndreas Gohr * 264c005e3fSAndreas Gohr * @param Doku_Event $event 274c005e3fSAndreas Gohr * @param $param 284c005e3fSAndreas Gohr */ 29*18b1e90aSAndreas Gohr public function info(Doku_Event &$event, $param) 30*18b1e90aSAndreas Gohr { 31da5f0eeeSAndreas Gohr global $USERINFO; 3272dda0b4SAndreas Gohr global $INPUT; 33da5f0eeeSAndreas Gohr 34b15cd32dSjgpcx if ($event->data != 'plugin_extension') return; 35b15cd32dSjgpcx $event->preventDefault(); 36b15cd32dSjgpcx $event->stopPropagation(); 37b15cd32dSjgpcx 38da5f0eeeSAndreas Gohr if (empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])) { 39da5f0eeeSAndreas Gohr http_status(403); 40da5f0eeeSAndreas Gohr echo 'Forbidden'; 41da5f0eeeSAndreas Gohr exit; 42da5f0eeeSAndreas Gohr } 43da5f0eeeSAndreas Gohr 4472dda0b4SAndreas Gohr $ext = $INPUT->str('ext'); 4572dda0b4SAndreas Gohr if (!$ext) { 46fd51614bSAndreas Gohr http_status(400); 4772dda0b4SAndreas Gohr echo 'no extension given'; 4872dda0b4SAndreas Gohr return; 4972dda0b4SAndreas Gohr } 5072dda0b4SAndreas Gohr 5172dda0b4SAndreas Gohr /** @var helper_plugin_extension_extension $extension */ 5272dda0b4SAndreas Gohr $extension = plugin_load('helper', 'extension_extension'); 5372dda0b4SAndreas Gohr $extension->setExtension($ext); 5472dda0b4SAndreas Gohr 55fd51614bSAndreas Gohr $act = $INPUT->str('act'); 56fd51614bSAndreas Gohr switch ($act) { 57fd51614bSAndreas Gohr case 'enable': 58fd51614bSAndreas Gohr case 'disable': 59fd51614bSAndreas Gohr $json = new JSON(); 60fd51614bSAndreas Gohr $extension->$act(); //enables/disables 61fd51614bSAndreas Gohr 62fd51614bSAndreas Gohr $reverse = ($act == 'disable') ? 'enable' : 'disable'; 63fd51614bSAndreas Gohr 64fd51614bSAndreas Gohr $return = array( 65fd51614bSAndreas Gohr 'state' => $act.'d', // isn't English wonderful? :-) 66fd51614bSAndreas Gohr 'reverse' => $reverse, 67fd51614bSAndreas Gohr 'label' => $extension->getLang('btn_'.$reverse) 68fd51614bSAndreas Gohr ); 69fd51614bSAndreas Gohr 70fd51614bSAndreas Gohr header('Content-Type: application/json'); 71fd51614bSAndreas Gohr echo $json->encode($return); 72fd51614bSAndreas Gohr break; 73fd51614bSAndreas Gohr 74fd51614bSAndreas Gohr case 'info': 75fd51614bSAndreas Gohr default: 7672dda0b4SAndreas Gohr /** @var helper_plugin_extension_list $list */ 7772dda0b4SAndreas Gohr $list = plugin_load('helper', 'extension_list'); 78fd51614bSAndreas Gohr header('Content-Type: text/html; charset=utf-8'); 79*18b1e90aSAndreas Gohr echo $list->makeInfo($extension); 8072dda0b4SAndreas Gohr } 81fd51614bSAndreas Gohr } 8272dda0b4SAndreas Gohr} 83