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