summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2014-02-15 10:10:38 +0100
committerAndreas Gohr <andi@splitbrain.org>2014-02-15 10:11:09 +0100
commitfd51614b39b1320c5723e8195f0bf69c25baaeb7 (patch)
tree81b1fe7209a211f698e154eefc9e1c4e15535b90 /lib
parentc6d9f1e80eef25fbd528d58f43d23001d9202237 (diff)
downloadrpg-fd51614b39b1320c5723e8195f0bf69c25baaeb7.tar.gz
rpg-fd51614b39b1320c5723e8195f0bf69c25baaeb7.tar.bz2
enable/disable extensions via AJAX FS#2927
Diffstat (limited to 'lib')
-rw-r--r--lib/plugins/extension/action.php39
-rw-r--r--lib/plugins/extension/script.js50
2 files changed, 75 insertions, 14 deletions
diff --git a/lib/plugins/extension/action.php b/lib/plugins/extension/action.php
index 3f2ccaace..9e48f134b 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 bd3c97758..fab88162d 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
@@ -42,9 +44,48 @@ jQuery(function(){
});
/**
+ * 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);