blob: e98a16d593f3356cd492a88988f0bd57d2cf7790 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<?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(): ArrayIterator {
return new ArrayIterator( $this->extractResults() );
}
}
|