Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 26
Hooks
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 26
 onApiOpenSearchSuggest
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 26
<?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;
                }
            }
        }
    }
}