mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-09-23 18:30:06 +00:00
Avoid invalid API response when server-side cross-wiki requests fail
If all server-side cross-wiki requests fail, we'd return an empty API response. This is invalid, the frontend expects things like list:[] to still be there. Change-Id: I72fc5a017647ca28abbc061992fa4868ca5737f4
This commit is contained in:
parent
f034a35e33
commit
cd4194bd40
|
@ -57,13 +57,8 @@ class ApiEchoNotifications extends ApiQueryBase {
|
|||
$results += $this->getForeignNotifications( $foreignWikis, $requestParams );
|
||||
}
|
||||
|
||||
if ( !$results ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// after getting local & foreign results, merge them all together
|
||||
$result = $this->mergeResults( $results, $params );
|
||||
$this->getResult()->setIndexedTagName( $result, 'notification' );
|
||||
if ( $params['groupbysection'] ) {
|
||||
foreach ( $params['sections'] as $section ) {
|
||||
if ( in_array( 'list', $params['prop'] ) ) {
|
||||
|
@ -397,6 +392,9 @@ class ApiEchoNotifications extends ApiQueryBase {
|
|||
*/
|
||||
protected function mergeResults( array $results, array $params ) {
|
||||
$master = array_shift( $results );
|
||||
if ( !$master ) {
|
||||
$master = array();
|
||||
}
|
||||
|
||||
if ( in_array( 'list', $params['prop'] ) ) {
|
||||
$master = $this->mergeList( $master, $results, $params['groupbysection'] );
|
||||
|
@ -426,12 +424,18 @@ class ApiEchoNotifications extends ApiQueryBase {
|
|||
|
||||
if ( $groupBySection ) {
|
||||
foreach ( EchoAttributeManager::$sections as $section ) {
|
||||
if ( !isset( $master[$section]['list'] ) ) {
|
||||
$master[$section]['list'] = array();
|
||||
}
|
||||
foreach ( $results as $result ) {
|
||||
$master[$section]['list'] = array_merge( $master[$section]['list'], $result[$section]['list'] );
|
||||
}
|
||||
usort( $master[$section]['list'], $sort );
|
||||
}
|
||||
} else {
|
||||
if ( !isset( $master['list'] ) ) {
|
||||
$master['list'] = array();
|
||||
}
|
||||
foreach ( $results as $result ) {
|
||||
$master['list'] = array_merge( $master['list'], $result['list'] );
|
||||
}
|
||||
|
@ -450,6 +454,9 @@ class ApiEchoNotifications extends ApiQueryBase {
|
|||
protected function mergeCount( array $master, array $results, $groupBySection ) {
|
||||
if ( $groupBySection ) {
|
||||
foreach ( EchoAttributeManager::$sections as $section ) {
|
||||
if ( !isset( $master[$section]['rawcount'] ) ) {
|
||||
$master[$section]['rawcount'] = 0;
|
||||
}
|
||||
foreach ( $results as $result ) {
|
||||
$master[$section]['rawcount'] += $result[$section]['rawcount'];
|
||||
}
|
||||
|
@ -457,6 +464,9 @@ class ApiEchoNotifications extends ApiQueryBase {
|
|||
}
|
||||
}
|
||||
|
||||
if ( !isset( $master['rawcount'] ) ) {
|
||||
$master['rawcount'] = 0;
|
||||
}
|
||||
foreach ( $results as $result ) {
|
||||
// regardless of groupbysection, totals are always included
|
||||
$master['rawcount'] += $result['rawcount'];
|
||||
|
|
Loading…
Reference in a new issue