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