Merge "Support interwiki searches in API"
This commit is contained in:
commit
96b04cef36
2 changed files with 54 additions and 2 deletions
|
|
@ -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 ) {
|
||||
|
|
|
|||
|
|
@ -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)?
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue