1<?php 2/** DokuWiki Plugin extension (Action Component) 3 * 4 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 5 * @author Andreas Gohr <andi@splitbrain.org> 6 */ 7 8class action_plugin_extension extends DokuWiki_Action_Plugin 9{ 10 11 /** 12 * Registers a callback function for a given event 13 * 14 * @param Doku_Event_Handler $controller DokuWiki's event controller object 15 * @return void 16 */ 17 public function register(Doku_Event_Handler $controller) 18 { 19 20 $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info'); 21 } 22 23 /** 24 * Create the detail info for a single plugin 25 * 26 * @param Doku_Event $event 27 * @param $param 28 */ 29 public function info(Doku_Event &$event, $param) 30 { 31 global $USERINFO; 32 global $INPUT; 33 34 if ($event->data != 'plugin_extension') return; 35 $event->preventDefault(); 36 $event->stopPropagation(); 37 38 if (empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])) { 39 http_status(403); 40 echo 'Forbidden'; 41 exit; 42 } 43 44 $ext = $INPUT->str('ext'); 45 if (!$ext) { 46 http_status(400); 47 echo 'no extension given'; 48 return; 49 } 50 51 /** @var helper_plugin_extension_extension $extension */ 52 $extension = plugin_load('helper', 'extension_extension'); 53 $extension->setExtension($ext); 54 55 $act = $INPUT->str('act'); 56 switch ($act) { 57 case 'enable': 58 case 'disable': 59 $extension->$act(); //enables/disables 60 61 $reverse = ($act == 'disable') ? 'enable' : 'disable'; 62 63 $return = array( 64 'state' => $act.'d', // isn't English wonderful? :-) 65 'reverse' => $reverse, 66 'label' => $extension->getLang('btn_'.$reverse) 67 ); 68 69 header('Content-Type: application/json'); 70 json_encode($return); 71 break; 72 73 case 'info': 74 default: 75 /** @var helper_plugin_extension_list $list */ 76 $list = plugin_load('helper', 'extension_list'); 77 header('Content-Type: text/html; charset=utf-8'); 78 echo $list->makeInfo($extension); 79 } 80 } 81} 82