Bug: T231636 Depends-On: I2cd24e73726394e3200a570c45d5e86b6849bfa9 Depends-On: I4fa3e6aad872434ca397325ed7a83f94973661d0 Change-Id: Ie6233561de78457cae5e4e44e220feec2d1272d8
60 lines
1.5 KiB
PHP
60 lines
1.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Trait useful for SearchResultSet implementations.
|
|
* It holds the functions that are rarely needed to be overridden.
|
|
*
|
|
* This trait can be used directly by extensions providing a SearchEngine.
|
|
*
|
|
* @ingroup Search
|
|
* @phan-file-suppress PhanUndeclaredMethod
|
|
*/
|
|
trait SearchResultSetTrait {
|
|
/**
|
|
* Set of result's extra data, indexed per result id
|
|
* and then per data item name.
|
|
* The structure is:
|
|
* PAGE_ID => [ augmentor name => data, ... ]
|
|
* @var array[]
|
|
*/
|
|
private $extraData = [];
|
|
|
|
/**
|
|
* Sets augmented data for result set.
|
|
* @param string $name Extra data item name
|
|
* @param array[] $data Extra data as PAGEID => data
|
|
*/
|
|
public function setAugmentedData( $name, $data ) {
|
|
foreach ( $data as $id => $resultData ) {
|
|
$this->extraData[$id][$name] = $resultData;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns extra data for specific result and store it in SearchResult object.
|
|
* @param SearchResult $result
|
|
*/
|
|
public function augmentResult( SearchResult $result ) {
|
|
$id = $result->getTitle()->getArticleID();
|
|
if ( $id === -1 ) {
|
|
return;
|
|
}
|
|
$result->setExtensionData( function () use ( $id ) {
|
|
return $this->extraData[$id] ?? [];
|
|
} );
|
|
}
|
|
|
|
/**
|
|
* @return int|null The offset the current page starts at. Typically
|
|
* this should be null to allow the UI to decide on its own, but in
|
|
* special cases like interleaved AB tests specifying explicitly is
|
|
* necessary.
|
|
*/
|
|
public function getOffset() {
|
|
return null;
|
|
}
|
|
|
|
final public function getIterator() {
|
|
return new ArrayIterator( $this->extractResults() );
|
|
}
|
|
}
|