From 524e4277580ef9352905afd4c7d0a5f0a2d2a617 Mon Sep 17 00:00:00 2001 From: Chad Horohoe Date: Wed, 26 Nov 2014 10:46:31 -0800 Subject: [PATCH] Fix up interwiki search results in API getInterwikiResults() returns an array of result objects, not just a single result object Change-Id: I4ea3f814c276e6fb9fd2b86ea405047aa3783fc7 --- includes/api/ApiQuerySearch.php | 73 +++++++++++++++++---------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/includes/api/ApiQuerySearch.php b/includes/api/ApiQuerySearch.php index 66ef8db555..c6999df8e3 100644 --- a/includes/api/ApiQuerySearch.php +++ b/includes/api/ApiQuerySearch.php @@ -204,47 +204,50 @@ class ApiQuerySearch extends ApiQueryGeneratorBase { } $hasInterwikiResults = false; + $totalhits = null; if ( $interwiki && $resultPageSet === null && $matches->hasInterwikiResults() ) { - $matches = $matches->getInterwikiResults(); - $hasInterwikiResults = true; + foreach( $matches->getInterwikiResults() as $matches ) { + $matches = $matches->getInterwikiResults(); + $hasInterwikiResults = true; - // Include number of results if requested - if ( $resultPageSet === null && isset( $searchInfo['totalhits'] ) ) { - $totalhits = $matches->getTotalHits(); - if ( $totalhits !== null ) { - $apiResult->addValue( array( 'query', 'interwikisearchinfo' ), - 'totalhits', $totalhits ); + // Include number of results if requested + if ( $resultPageSet === null && isset( $searchInfo['totalhits'] ) ) { + $totalhits += $matches->getTotalHits(); } - } - $result = $matches->next(); - while ( $result ) { - $title = $result->getTitle(); - - if ( $resultPageSet === null ) { - $vals = array( - 'namespace' => $result->getInterwikiNamespaceText(), - 'title' => $title->getText(), - 'url' => $title->getFullUrl(), - ); - - // Add item to results and see whether it fits - $fit = $apiResult->addValue( - array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix() ), - null, - $vals - ); - - if ( !$fit ) { - // We hit the limit. We can't really provide any meaningful - // pagination info so just bail out - break; + $result = $matches->next(); + while ( $result ) { + $title = $result->getTitle(); + + if ( $resultPageSet === null ) { + $vals = array( + 'namespace' => $result->getInterwikiNamespaceText(), + 'title' => $title->getText(), + 'url' => $title->getFullUrl(), + ); + + // Add item to results and see whether it fits + $fit = $apiResult->addValue( + array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix() ), + null, + $vals + ); + + if ( !$fit ) { + // We hit the limit. We can't really provide any meaningful + // pagination info so just bail out + break; + } + } else { + $titles[] = $title; } - } else { - $titles[] = $title; - } - $result = $matches->next(); + $result = $matches->next(); + } + } + if ( $totalhits !== null ) { + $apiResult->addValue( array( 'query', 'interwikisearchinfo' ), + 'totalhits', $totalhits ); } } -- 2.20.1