Mglaser has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/304747

Change subject: StateBar: Now uses API instead of ajax call
......................................................................

StateBar: Now uses API instead of ajax call

Converted ajax call to API.

Change-Id: Ib8228d6995b19a6205b66008f027d5a5ad01222b
---
M StateBar/StateBar.class.php
M StateBar/StateBar.setup.php
M StateBar/i18n/en.json
M StateBar/i18n/qqq.json
A StateBar/includes/api/BSApiStateBarTasks.php
M StateBar/resources/bluespice.StateBar.js
6 files changed, 104 insertions(+), 89 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceExtensions 
refs/changes/47/304747/1

diff --git a/StateBar/StateBar.class.php b/StateBar/StateBar.class.php
index c0dcf3c..91ff5c0 100644
--- a/StateBar/StateBar.class.php
+++ b/StateBar/StateBar.class.php
@@ -90,7 +90,7 @@
        /**
         * Registers StateBar sort variables
         */
-       private function registerSortVars() {
+       public function registerSortVars() {
                wfRunHooks( 'BSStateBarAddSortTopVars', array( 
&$this->aSortTopVars ) );
 
                $aDefaultSortTopVars = array(
@@ -150,59 +150,6 @@
        }
 
        /**
-        * AJAX interface for BlueSpice SateBar body views
-        * @return string The JSON formatted response
-        */
-       public static function ajaxCollectBodyViews() {
-               global $wgUser;
-               $aResult = array(
-                       "success" => false,
-                       "views" => array(),
-                       "message" => '',
-               );
-
-               $iArticleID = RequestContext::getMain()->getRequest()->getInt( 
'articleID', 0 );
-               if( $iArticleID === 0 ) {
-                       $aResult['message'] = 
wfMessage("bs-statebar-ajax-nobodyviews")->plain();
-                       return FormatJson::encode($aResult);
-               }
-
-               $oStateBar = BsExtensionManager::getExtension( 'StateBar' );
-               $oStateBar->registerSortVars();
-
-               $oTitle = $oStateBar->checkContext(
-                       Title::newFromID( $iArticleID ),
-                       true //because you already have the possible redirected 
title!
-                                //also prevents from get wrong data in 
redirect redirect
-               );
-               if( is_null($oTitle) ) {
-                       $aResult['message'] = 
wfMessage("bs-statebar-ajax-nobodyviews")->plain();
-                       return json_encode( $aResult );
-               }
-
-               $aBodyViews = array();
-               wfRunHooks( 'BSStateBarBeforeBodyViewAdd', array( $oStateBar, 
&$aBodyViews, $wgUser, $oTitle ) );
-               if( empty($aBodyViews) ) {
-                       $aResult['success'] = true;
-                       $aResult['message'] = 
wfMessage('bs-statebar-ajax-nobodyviews')->plain();
-                       return json_encode( $aResult );
-               }
-
-               $aSortBodyVars = BsConfig::get('MW::StateBar::SortBodyVars');
-               if( !empty($aSortBodyVars) ) {
-                       $aBodyViews = $oStateBar->reorderViews( $aBodyViews, 
$aSortBodyVars );
-               }
-
-               //execute all views to an array with numeric index
-               $aExecutedBodyViews = array();
-               foreach( $aBodyViews as $oView ) $aExecutedBodyViews[] = 
$oView->execute();
-
-               $aResult['views'] = $aExecutedBodyViews;
-               $aResult['success'] = true;
-               return FormatJson::encode( $aResult );
-       }
-
-       /**
         * Inject tags into InsertMagic
         * @param Object $oResponse reference
         * $param String $type
@@ -243,7 +190,7 @@
         * @param bool $bRedirect
         * @return Title - null when context check fails
         */
-       private function checkContext( $oTitle, $bRedirect = false ) {
+       public function checkContext( $oTitle, $bRedirect = false ) {
                if ( is_null( $oTitle ) ) return null;
                if ( $oTitle->exists() === false ) return null;
                if ( $oTitle->getNamespace() === NS_SPECIAL ) return null;
diff --git a/StateBar/StateBar.setup.php b/StateBar/StateBar.setup.php
index 44308a1..b8610ca 100644
--- a/StateBar/StateBar.setup.php
+++ b/StateBar/StateBar.setup.php
@@ -27,4 +27,6 @@
 $wgAutoloadClasses['ViewStateBarTopElement'] = 
__DIR__.'/views/view.StateBarTopElement.php';
 $wgAutoloadClasses['ViewStateBarBodyElement'] = 
__DIR__.'/views/view.StateBarBodyElement.php';
 
-$wgAjaxExportList[] = 'StateBar::ajaxCollectBodyViews';
+$wgAutoloadClasses['BSApiStateBarTasks'] = __DIR__ . 
'/includes/api/BSApiStateBarTasks.php';
+
+$wgAPIModules['bs-statebar-tasks'] = 'BSApiStateBarTasks';
diff --git a/StateBar/i18n/en.json b/StateBar/i18n/en.json
index 9f23807..d638229 100644
--- a/StateBar/i18n/en.json
+++ b/StateBar/i18n/en.json
@@ -12,5 +12,6 @@
        "bs-statebar-viewtoggler": "DETAILS",
        "bs-statebar-viewtoggler-tooltip": "Show detailed information",
        "bs-statebar-switch-description": "Hides the status bar on this page.",
-       "bs-statebar-ajax-nobodyviews": "No information available."
+       "bs-statebar-ajax-nobodyviews": "No information available.",
+       "apihelp-bs-statebar-tasks-description": "Provides operations for 
StateBar extension"
 }
diff --git a/StateBar/i18n/qqq.json b/StateBar/i18n/qqq.json
index 98be0ce..39f01a9 100644
--- a/StateBar/i18n/qqq.json
+++ b/StateBar/i18n/qqq.json
@@ -14,5 +14,6 @@
        "bs-statebar-viewtoggler": "Text for the toggle details window, written 
in caps due to consistency\n{{Identical|Detail}}",
        "bs-statebar-viewtoggler-tooltip": "Span title for show detailed 
information",
        "bs-statebar-switch-description": "Behaviour switch __NOSTATEBAR__ 
description for hiding the status bar on this page shown in InsertMagic.",
-       "bs-statebar-ajax-nobodyviews": "Text if no information available about 
this page shown in folded out status bar."
+       "bs-statebar-ajax-nobodyviews": "Text if no information available about 
this page shown in folded out status bar.",
+       "apihelp-bs-statebar-tasks-description": "Describes the API endpoint 
that handles statebar tasks"
 }
diff --git a/StateBar/includes/api/BSApiStateBarTasks.php 
b/StateBar/includes/api/BSApiStateBarTasks.php
new file mode 100644
index 0000000..dec3a23
--- /dev/null
+++ b/StateBar/includes/api/BSApiStateBarTasks.php
@@ -0,0 +1,59 @@
+<?php
+
+class BSApiStateBarTasks extends BSApiTasksBase {
+
+       protected $aTasks = [ 'collectBodyViews' ];
+
+       protected function getRequiredTaskPermissions() {
+               return [ 'collectBodyViews' => [ 'read' ] ];
+       }
+
+       public function task_collectBodyViews( $oTaskData, $aParams ) {
+               $oResponse = $this->makeStandardReturn();
+
+               $oUser = $this->getUser();
+
+               $iArticleID = $this->getContext()->getWikiPage()->getId();
+
+               if( $iArticleID === 0 ) {
+                       $oResponse->message = wfMessage( 
'bs-statebar-ajax-nobodyviews' )->plain();
+                       return $oResponse;
+               }
+
+               $oStateBar = BsExtensionManager::getExtension( 'StateBar' );
+               $oStateBar->registerSortVars();
+
+               $oTitle = $oStateBar->checkContext(
+                       Title::newFromID( $iArticleID ),
+                       true //because you already have the possible redirected 
title!
+                                //also prevents from getting wrong data in 
redirect redirect
+               );
+               if( is_null( $oTitle ) ) {
+                       $oResponse->message = wfMessage( 
'bs-statebar-ajax-nobodyviews' )->plain();
+                       return $oResult;
+               }
+
+               $aBodyViews = array();
+               wfRunHooks( 'BSStateBarBeforeBodyViewAdd', array( $oStateBar, 
&$aBodyViews, $oUser, $oTitle ) );
+               if( empty( $aBodyViews ) ) {
+                       $oResponse->success = true;
+                       $oResponse->message = wfMessage( 
'bs-statebar-ajax-nobodyviews' )->plain();
+                       return $oResult;
+               }
+
+               $aSortBodyVars = BsConfig::get('MW::StateBar::SortBodyVars');
+               if( !empty( $aSortBodyVars ) ) {
+                       $aBodyViews = $oStateBar->reorderViews( $aBodyViews, 
$aSortBodyVars );
+               }
+
+               //execute all views to an array with numeric index
+               $aExecutedBodyViews = array();
+               foreach( $aBodyViews as $oView ) $aExecutedBodyViews[] = 
$oView->execute();
+
+               $oResponse->payload['views'] = $aExecutedBodyViews;
+               $oResponse->success = true;
+               return $oResponse;
+
+       }
+
+}
diff --git a/StateBar/resources/bluespice.StateBar.js 
b/StateBar/resources/bluespice.StateBar.js
index a98d3ac..c8ecb9f 100644
--- a/StateBar/resources/bluespice.StateBar.js
+++ b/StateBar/resources/bluespice.StateBar.js
@@ -31,45 +31,50 @@
                } );
                //TODO: Use CAIContext!
                var params = {
-                       action:'ajax',
-                       rs:'StateBar::ajaxCollectBodyViews',
                        articleID: mw.config.get( "wgArticleId" )
                };
 
                $(document).trigger( 'BsStateBarBodyBeforeLoad', [params] );
-               $.getJSON(
-                       mw.config.get( "wgScriptPath" ) + '/index.php',
-                       params,
-                       function( result ) {
-                               $(document).trigger( 'BsStateBarBodyLoad', 
[result] );
-                               $('#sStateBarBodyLoadView').slideToggle('fast');
+               bs.api.tasks.execSilent(
+                       'statebar',
+                       'collectBodyViews',
+                       params
+               ).done(function( result ){
+                       $( document ).trigger( 'BsStateBarBodyLoad', [result] );
+                       $( '#sStateBarBodyLoadView' ).slideToggle( 'fast' );
 
-                               if ( result['views'].length < 1 ) {
-                                       var messageItem = $('<div 
class="bs-statebar-body-item style="display:none"><p>' + result['message'] + 
'</p></div>').filter('DIV.bs-statebar-body-item');
-                                       
BsStateBar.oStateBarView.append(messageItem.slideToggle('fast'));
-                                       $.each( 
BsStateBar.aRegisteredToggleClickElements, function( key, value ) {
-                                               
BsStateBar.viewTogglerClick(value);
-                                       });
-                                       return;
-                               }
-
-                               $.each(result['views'], function( key, value ) {
-                                       var bodyItem = 
$(value).filter('DIV.bs-statebar-body-item');
-                                       bodyItem.hide();
-                                       
BsStateBar.oStateBarView.append(bodyItem.slideToggle('fast'));
-                               });
-                               if ($("#footer-info").length !== 0 ){
-                                       BsStateBar.oStateBarView.append($("<div 
class='clearfix'></div>"));
-                                       
BsStateBar.oStateBarView.append($("#footer-info"));
-                               }
-
-                               $(document).trigger( 
'BsStateBarBodyLoadComplete', [result['views'], result] );
-
-                               
$.each(BsStateBar.aRegisteredToggleClickElements, function( key, value ) {
+                       if ( result.payload['views'].length < 1 ) {
+                               var messageItem = $(
+                                               '<div 
class="bs-statebar-body-item style="display:none"><p>'
+                                               + result.message
+                                               + '</p></div>'
+                                       )
+                                       .filter( 'DIV.bs-statebar-body-item' );
+                               BsStateBar.oStateBarView.append(
+                                               messageItem.slideToggle( 'fast' 
)
+                               );
+                               $.each( 
BsStateBar.aRegisteredToggleClickElements, function( key, value ) {
                                        BsStateBar.viewTogglerClick(value);
                                });
+                               return;
                        }
-               );
+
+                       $.each( result.payload['views'], function( key, value ) 
{
+                               var bodyItem = $( value ).filter( 
'DIV.bs-statebar-body-item' );
+                               bodyItem.hide();
+                               BsStateBar.oStateBarView.append( 
bodyItem.slideToggle( 'fast' ) );
+                       });
+                       if ( $( "#footer-info" ).length !== 0 ){
+                               BsStateBar.oStateBarView.append( $( "<div 
class='clearfix'></div>" ) );
+                               BsStateBar.oStateBarView.append( $( 
"#footer-info" ) );
+                       }
+
+                       $(document).trigger( 'BsStateBarBodyLoadComplete', [ 
result.payload['views'], result ] );
+
+                       $.each(BsStateBar.aRegisteredToggleClickElements, 
function( key, value ) {
+                               BsStateBar.viewTogglerClick( value );
+                       });
+               });
                this.bAjaxCallComplete = true;
        },
 

-- 
To view, visit https://gerrit.wikimedia.org/r/304747
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib8228d6995b19a6205b66008f027d5a5ad01222b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions
Gerrit-Branch: master
Gerrit-Owner: Mglaser <gla...@hallowelt.biz>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to