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 818b1e90aSAndreas Gohrclass action_plugin_extension extends DokuWiki_Action_Plugin 918b1e90aSAndreas 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 */ 1718b1e90aSAndreas Gohr public function register(Doku_Event_Handler $controller) 1818b1e90aSAndreas Gohr { 1972dda0b4SAndreas Gohr $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info'); 2072dda0b4SAndreas Gohr } 2172dda0b4SAndreas Gohr 224c005e3fSAndreas Gohr /** 234c005e3fSAndreas Gohr * Create the detail info for a single plugin 244c005e3fSAndreas Gohr * 254c005e3fSAndreas Gohr * @param Doku_Event $event 264c005e3fSAndreas Gohr * @param $param 274c005e3fSAndreas Gohr */ 28cf833595SSatoshi Sahara public function info(Doku_Event $event, $param) 2918b1e90aSAndreas Gohr { 30da5f0eeeSAndreas Gohr global $USERINFO; 3172dda0b4SAndreas Gohr global $INPUT; 32da5f0eeeSAndreas Gohr 33b15cd32dSjgpcx if ($event->data != 'plugin_extension') return; 34b15cd32dSjgpcx $event->preventDefault(); 35b15cd32dSjgpcx $event->stopPropagation(); 36b15cd32dSjgpcx 37dda9db03SAndreas Gohr /** @var admin_plugin_extension $admin */ 38dda9db03SAndreas Gohr $admin = plugin_load('admin', 'extension'); 39dda9db03SAndreas Gohr if (!$admin->isAccessibleByCurrentUser()) { 40da5f0eeeSAndreas Gohr http_status(403); 41da5f0eeeSAndreas Gohr echo 'Forbidden'; 42da5f0eeeSAndreas Gohr exit; 43da5f0eeeSAndreas Gohr } 44da5f0eeeSAndreas Gohr 4572dda0b4SAndreas Gohr $ext = $INPUT->str('ext'); 4672dda0b4SAndreas Gohr if (!$ext) { 47fd51614bSAndreas Gohr http_status(400); 4872dda0b4SAndreas Gohr echo 'no extension given'; 4972dda0b4SAndreas Gohr return; 5072dda0b4SAndreas Gohr } 5172dda0b4SAndreas Gohr 5272dda0b4SAndreas Gohr /** @var helper_plugin_extension_extension $extension */ 5372dda0b4SAndreas Gohr $extension = plugin_load('helper', 'extension_extension'); 5472dda0b4SAndreas Gohr $extension->setExtension($ext); 5572dda0b4SAndreas Gohr 56fd51614bSAndreas Gohr $act = $INPUT->str('act'); 57fd51614bSAndreas Gohr switch ($act) { 58fd51614bSAndreas Gohr case 'enable': 59fd51614bSAndreas Gohr case 'disable': 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'); 71*cd80a505SSatoshi Sahara 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'); 7918b1e90aSAndreas Gohr echo $list->makeInfo($extension); 8072dda0b4SAndreas Gohr } 81fd51614bSAndreas Gohr } 8272dda0b4SAndreas Gohr} 83