172dda0b4SAndreas Gohr<?php 28553d24dSAndreas Gohr 38553d24dSAndreas Gohruse dokuwiki\Extension\ActionPlugin; 48553d24dSAndreas Gohruse dokuwiki\Extension\EventHandler; 58553d24dSAndreas Gohruse dokuwiki\Extension\Event; 6d4f83172SAndreas Gohr 772dda0b4SAndreas Gohr/** DokuWiki Plugin extension (Action Component) 872dda0b4SAndreas Gohr * 972dda0b4SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 1072dda0b4SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 1172dda0b4SAndreas Gohr */ 128553d24dSAndreas Gohrclass action_plugin_extension extends ActionPlugin 1318b1e90aSAndreas Gohr{ 1472dda0b4SAndreas Gohr /** 1572dda0b4SAndreas Gohr * Registers a callback function for a given event 1672dda0b4SAndreas Gohr * 17*5c483796SAndreas Gohr * @param EventHandler $controller DokuWiki's event controller object 1872dda0b4SAndreas Gohr * @return void 1972dda0b4SAndreas Gohr */ 208553d24dSAndreas Gohr public function register(EventHandler $controller) 2118b1e90aSAndreas Gohr { 2272dda0b4SAndreas Gohr $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info'); 2372dda0b4SAndreas Gohr } 2472dda0b4SAndreas Gohr 254c005e3fSAndreas Gohr /** 264c005e3fSAndreas Gohr * Create the detail info for a single plugin 274c005e3fSAndreas Gohr * 28*5c483796SAndreas Gohr * @param Event $event 294c005e3fSAndreas Gohr * @param $param 304c005e3fSAndreas Gohr */ 318553d24dSAndreas Gohr public function info(Event $event, $param) 3218b1e90aSAndreas Gohr { 33da5f0eeeSAndreas Gohr global $USERINFO; 3472dda0b4SAndreas Gohr global $INPUT; 35da5f0eeeSAndreas Gohr 36b15cd32dSjgpcx if ($event->data != 'plugin_extension') return; 37b15cd32dSjgpcx $event->preventDefault(); 38b15cd32dSjgpcx $event->stopPropagation(); 39b15cd32dSjgpcx 40dda9db03SAndreas Gohr /** @var admin_plugin_extension $admin */ 41dda9db03SAndreas Gohr $admin = plugin_load('admin', 'extension'); 42dda9db03SAndreas Gohr if (!$admin->isAccessibleByCurrentUser()) { 43da5f0eeeSAndreas Gohr http_status(403); 44da5f0eeeSAndreas Gohr echo 'Forbidden'; 45da5f0eeeSAndreas Gohr exit; 46da5f0eeeSAndreas Gohr } 47da5f0eeeSAndreas Gohr 4872dda0b4SAndreas Gohr $ext = $INPUT->str('ext'); 4972dda0b4SAndreas Gohr if (!$ext) { 50fd51614bSAndreas Gohr http_status(400); 5172dda0b4SAndreas Gohr echo 'no extension given'; 5272dda0b4SAndreas Gohr return; 5372dda0b4SAndreas Gohr } 5472dda0b4SAndreas Gohr 5572dda0b4SAndreas Gohr /** @var helper_plugin_extension_extension $extension */ 5672dda0b4SAndreas Gohr $extension = plugin_load('helper', 'extension_extension'); 5772dda0b4SAndreas Gohr $extension->setExtension($ext); 5872dda0b4SAndreas Gohr 59fd51614bSAndreas Gohr $act = $INPUT->str('act'); 60fd51614bSAndreas Gohr switch ($act) { 61fd51614bSAndreas Gohr case 'enable': 62fd51614bSAndreas Gohr case 'disable': 6396f679faSAndreas Gohr if (getSecurityToken() != $INPUT->str('sectok')) { 6496f679faSAndreas Gohr http_status(403); 6596f679faSAndreas Gohr echo 'Security Token did not match. Possible CSRF attack.'; 6696f679faSAndreas Gohr return; 6796f679faSAndreas Gohr } 68fd51614bSAndreas Gohr 6996f679faSAndreas Gohr $extension->$act(); //enables/disables 70fd51614bSAndreas Gohr $reverse = ($act == 'disable') ? 'enable' : 'disable'; 71fd51614bSAndreas Gohr 72fe2dcfd5SAndreas Gohr $return = [ 73fd51614bSAndreas Gohr 'state' => $act . 'd', // isn't English wonderful? :-) 74fd51614bSAndreas Gohr 'reverse' => $reverse, 75fe2dcfd5SAndreas Gohr 'label' => $extension->getLang('btn_' . $reverse), 76fe2dcfd5SAndreas Gohr ]; 77fd51614bSAndreas Gohr 78fd51614bSAndreas Gohr header('Content-Type: application/json'); 79fe2dcfd5SAndreas Gohr echo json_encode($return, JSON_THROW_ON_ERROR); 80fd51614bSAndreas Gohr break; 81fd51614bSAndreas Gohr 82fd51614bSAndreas Gohr case 'info': 83fd51614bSAndreas Gohr default: 8472dda0b4SAndreas Gohr /** @var helper_plugin_extension_list $list */ 8572dda0b4SAndreas Gohr $list = plugin_load('helper', 'extension_list'); 86fd51614bSAndreas Gohr header('Content-Type: text/html; charset=utf-8'); 8718b1e90aSAndreas Gohr echo $list->makeInfo($extension); 8872dda0b4SAndreas Gohr } 89fd51614bSAndreas Gohr } 9072dda0b4SAndreas Gohr} 91