File: Hooks.php

package info (click to toggle)
mediawiki 1%3A1.35.13-1%2Bdeb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 274,932 kB
  • sloc: php: 677,563; javascript: 572,709; sql: 11,565; python: 4,447; xml: 3,145; sh: 892; perl: 788; ruby: 496; pascal: 365; makefile: 128
file content (48 lines) | stat: -rw-r--r-- 1,246 bytes parent folder | download | duplicates (3)
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
<?php

namespace TextExtracts;

use ApiBase;
use ApiMain;
use ApiResult;
use FauxRequest;
use MediaWiki\MediaWikiServices;

/**
 * @license GPL-2.0-or-later
 */
class Hooks {

	/**
	 * ApiOpenSearchSuggest hook handler
	 * @param array &$results Array of search results
	 */
	public static function onApiOpenSearchSuggest( &$results ) {
		$config = MediaWikiServices::getInstance()->getConfigFactory()->makeConfig( 'textextracts' );
		if ( !$config->get( 'ExtractsExtendOpenSearchXml' ) || $results === [] ) {
			return;
		}

		foreach ( array_chunk( array_keys( $results ), ApiBase::LIMIT_SML1 ) as $pageIds ) {
			$api = new ApiMain( new FauxRequest(
				[
					'action' => 'query',
					'prop' => 'extracts',
					'explaintext' => true,
					'exintro' => true,
					'exlimit' => count( $pageIds ),
					'pageids' => implode( '|', $pageIds ),
				] )
			);
			$api->execute();
			$data = $api->getResult()->getResultData( [ 'query', 'pages' ] );
			foreach ( $pageIds as $id ) {
				$contentKey = $data[$id]['extract'][ApiResult::META_CONTENT] ?? '*';
				if ( isset( $data[$id]['extract'][$contentKey] ) ) {
					$results[$id]['extract'] = $data[$id]['extract'][$contentKey];
					$results[$id]['extract trimmed'] = false;
				}
			}
		}
	}
}