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:
Roan Kattouw 2016-05-09 11:08:00 -07:00
parent f034a35e33
commit cd4194bd40

View file

@ -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'];