X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fcontent%2FContentHandler.php;h=7184980ede16741655a546fac1d73b6edb30ab07;hb=add1ebe2ab7cbbaf27f8f60a2d0b05769dff71a2;hp=f3d678108fe3ff77a1ecca14379b3715d964724b;hpb=83691ed06e8ec7ef1f6f7290b8c5c175ab9f4928;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php index f3d678108f..7184980ede 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -641,7 +641,12 @@ abstract class ContentHandler { * * @since 1.21 * - * @return array Always an empty array. + * @return array An array mapping action names (typically "view", "edit", "history" etc.) to + * either the full qualified class name of an Action class, a callable taking ( Page $page, + * IContextSource $context = null ) as parameters and returning an Action object, or an actual + * Action object. An empty array in this default implementation. + * + * @see Action::factory */ public function getActionOverrides() { return []; @@ -1243,4 +1248,91 @@ abstract class ContentHandler { return $ok; } + + /** + * Get fields definition for search index + * @param SearchEngine $engine + * @return SearchIndexField[] List of fields this content handler can provide. + * @since 1.28 + */ + public function getFieldsForSearchIndex( SearchEngine $engine ) { + /* Default fields: + /* + * namespace + * namespace_text + * redirect + * source_text + * suggest + * timestamp + * title + * text + * text_bytes + */ + return []; + } + + /** + * Add new field definition to array. + * @param SearchIndexField[] $fields + * @param SearchEngine $engine + * @param string $name + * @param int $type + * @return SearchIndexField[] new field defs + * @since 1.28 + */ + protected function addSearchField( &$fields, SearchEngine $engine, $name, $type ) { + $fields[$name] = $engine->makeSearchFieldMapping( $name, $type ); + return $fields; + } + + /** + * Return fields to be indexed by search engine + * as representation of this document. + * Overriding class should call parent function or take care of calling + * the SearchDataForIndex hook. + * @param WikiPage $page Page to index + * @param ParserOutput $output + * @param SearchEngine $engine Search engine for which we are indexing + * @return array Map of name=>value for fields + * @since 1.28 + */ + public function getDataForSearchIndex( WikiPage $page, ParserOutput $output, + SearchEngine $engine ) { + $fields = []; + $content = $page->getContent(); + if ( $content ) { + $text = $content->getTextForSearchIndex(); + $fields['text'] = $text; + $fields['source_text'] = $text; + $fields['text_bytes'] = $content->getSize(); + } + Hooks::run( 'SearchDataForIndex', [ &$fields, $this, $page, $output, $engine ] ); + return $fields; + } + + /** + * Produce page output suitable for indexing. + * + * Specific content handlers may override it if they need different content handling. + * + * @param WikiPage $page + * @param ParserCache $cache + * @return ParserOutput + */ + public function getParserOutputForIndexing( WikiPage $page, ParserCache $cache = null ) { + $parserOptions = $page->makeParserOptions( 'canonical' ); + $revId = $page->getRevision()->getId(); + if ( $cache ) { + $parserOutput = $cache->get( $page, $parserOptions ); + } + if ( empty( $parserOutput ) ) { + $parserOutput = + $page->getContent()->getParserOutput( $page->getTitle(), $revId, $parserOptions ); + if ( $cache ) { + $cache->save( $parserOutput, $page, $parserOptions ); + } + } + return $parserOutput; + } + }