Merge "Support interwiki searches in API"

This commit is contained in:
jenkins-bot 2014-02-26 18:03:58 +00:00 committed by Gerrit Code Review
commit 96b04cef36
2 changed files with 54 additions and 2 deletions

View file

@ -63,6 +63,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
$limit = $params['limit'];
$query = $params['search'];
$what = $params['what'];
$interwiki = $params['interwiki'];
$searchInfo = array_flip( $params['info'] );
$prop = array_flip( $params['prop'] );
@ -197,10 +198,52 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
$result = $matches->next();
}
$hasInterwikiResults = false;
if ( $interwiki && $resultPageSet === null && $matches->hasInterwikiResults() ) {
$matches = $matches->getInterwikiResults();
$iwprefixes = array();
$hasInterwikiResults = true;
// Include number of results if requested
if ( isset( $searchInfo['totalhits'] ) ) {
$totalhits = $matches->getTotalHits();
if ( $totalhits !== null ) {
$apiResult->addValue( array( 'query', 'interwikisearchinfo' ),
'totalhits', $totalhits );
}
}
$result = $matches->next();
while ( $result ) {
$title = $result->getTitle();
$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();
}
}
if ( is_null( $resultPageSet ) ) {
$apiResult->setIndexedTagName_internal( array(
'query', $this->getModuleName()
), 'p' );
if ( $hasInterwikiResults ) {
$apiResult->setIndexedTagName_internal( array(
'query', 'interwiki' . $this->getModuleName()
), 'p' );
}
} else {
$resultPageSet->populateFromTitles( $titles );
}
@ -264,7 +307,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
ApiBase::PARAM_MIN => 1,
ApiBase::PARAM_MAX => ApiBase::LIMIT_SML1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_SML2
)
),
'interwiki' => false,
);
$alternatives = SearchEngine::getSearchTypes();
@ -303,7 +347,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
),
'redirects' => 'Include redirect pages in the search',
'offset' => 'Use this value to continue paging (return by query)',
'limit' => 'How many total pages to return'
'limit' => 'How many total pages to return',
'interwiki' => 'Include interwiki results in the search, if available'
);
if ( count( SearchEngine::getSearchTypes() ) > 1 ) {

View file

@ -974,6 +974,13 @@ class SearchResult {
return '';
}
/**
* @return string interwiki namespace of the title (since we likely can't resolve it locally)
*/
function getInterwikiNamespaceText() {
return '';
}
/**
* Did this match file contents (eg: PDF/DJVU)?
*/