diff --git a/lib/plugins/extension/action.php b/lib/plugins/extension/action.php index 3f2ccaace18473df16bf2c26870e2daf85b9b587..9e48f134b1f7d527804450ddf60d73d0d33febee 100644 --- a/lib/plugins/extension/action.php +++ b/lib/plugins/extension/action.php @@ -28,25 +28,23 @@ class action_plugin_extension extends DokuWiki_Action_Plugin { * @param Doku_Event $event * @param $param */ - public function info(Doku_Event &$event, $param){ + public function info(Doku_Event &$event, $param) { global $USERINFO; global $INPUT; - if($event->data != 'plugin_extension') return; $event->preventDefault(); $event->stopPropagation(); - if(empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])){ + if(empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])) { http_status(403); echo 'Forbidden'; exit; } - header('Content-Type: text/html; charset=utf-8'); - $ext = $INPUT->str('ext'); if(!$ext) { + http_status(400); echo 'no extension given'; return; } @@ -55,11 +53,32 @@ class action_plugin_extension extends DokuWiki_Action_Plugin { $extension = plugin_load('helper', 'extension_extension'); $extension->setExtension($ext); - /** @var helper_plugin_extension_list $list */ - $list = plugin_load('helper', 'extension_list'); - - - echo $list->make_info($extension); + $act = $INPUT->str('act'); + switch($act) { + case 'enable': + case 'disable': + $json = new JSON(); + $extension->$act(); //enables/disables + + $reverse = ($act == 'disable') ? 'enable' : 'disable'; + + $return = array( + 'state' => $act.'d', // isn't English wonderful? :-) + 'reverse' => $reverse, + 'label' => $extension->getLang('btn_'.$reverse) + ); + + header('Content-Type: application/json'); + echo $json->encode($return); + break; + + case 'info': + default: + /** @var helper_plugin_extension_list $list */ + $list = plugin_load('helper', 'extension_list'); + header('Content-Type: text/html; charset=utf-8'); + echo $list->make_info($extension); + } } } diff --git a/lib/plugins/extension/script.js b/lib/plugins/extension/script.js index bd3c977588d77d9bf0cd13156f03de4866a957f0..fab88162d8c6c1f62e23bcb9e5745ffc326435ad 100644 --- a/lib/plugins/extension/script.js +++ b/lib/plugins/extension/script.js @@ -1,9 +1,11 @@ jQuery(function(){ + var $extmgr = jQuery('#extension__manager'); + /** * Confirm uninstalling */ - jQuery('#extension__manager input.uninstall').click(function(e){ + $extmgr.find('input.uninstall').click(function(e){ if(!window.confirm(LANG.plugins.extension.reallydel)){ e.preventDefault(); return false; @@ -15,7 +17,7 @@ jQuery(function(){ * very simple lightbox * @link http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/super-simple-lightbox-with-css-and-jquery/ */ - jQuery('#extension__manager a.extension_screenshot').click(function(e) { + $extmgr.find('a.extension_screenshot').click(function(e) { e.preventDefault(); //Get clicked link href @@ -41,10 +43,49 @@ jQuery(function(){ return false; }); + /** + * Enable/Disable extension via AJAX + */ + $extmgr.find('input.disable, input.enable').click(function (e) { + e.preventDefault(); + var $btn = jQuery(this); + + // get current state + var extension = $btn.attr('name').split('[')[2]; + extension = extension.substr(0, extension.length - 1); + var act = ($btn.hasClass('disable')) ? 'disable' : 'enable'; + + // disable while we wait + $btn.attr('disabled', 'disabled'); + $btn.css('cursor', 'wait'); + + // execute + jQuery.get( + DOKU_BASE + 'lib/exe/ajax.php', + { + call: 'plugin_extension', + ext: extension, + act: act + }, + function (data) { + $btn.css('cursor', '') + .removeAttr('disabled') + .removeClass('disable') + .removeClass('enable') + .val(data.label) + .addClass(data.reverse) + .parents('li') + .removeClass('disabled') + .removeClass('enabled') + .addClass(data.state); + } + ); + }); + /** * AJAX detail infos */ - jQuery('#extension__manager a.info').click(function(e){ + $extmgr.find('a.info').click(function(e){ e.preventDefault(); var $link = jQuery(this); @@ -60,7 +101,8 @@ jQuery(function(){ DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_extension', - ext: $link.data('extid') + ext: $link.data('extid'), + act: 'info' }, function(data){ $link.parent().append(data);