X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fsearch%2FSearchEngine.php;h=9817b6cc999408e1eb2e8b91edeea0e843d03b95;hp=90bfebd21319bb753314d7cd5bf6bfc879c6a8b6;hb=c584722cc2e3d33edae58d46c2149063b3fc6d72;hpb=9964ca1a390c446397dcd466916ffed356cdc3c9 diff --git a/includes/search/SearchEngine.php b/includes/search/SearchEngine.php index 90bfebd213..9817b6cc99 100644 --- a/includes/search/SearchEngine.php +++ b/includes/search/SearchEngine.php @@ -104,12 +104,25 @@ abstract class SearchEngine { * @since 1.18 * @param string $feature * @param mixed $data - * @return bool */ public function setFeatureData( $feature, $data ) { $this->features[$feature] = $data; } + /** + * Way to retrieve custom data set by setFeatureData + * or by the engine itself. + * @since 1.29 + * @param string $feature feature name + * @return mixed the feature value or null if unset + */ + public function getFeatureData( $feature ) { + if ( isset ( $this->features[$feature] ) ) { + return $this->features[$feature]; + } + return null; + } + /** * When overridden in derived class, performs database-specific conversions * on text to be used for searching or updating search index. @@ -707,8 +720,21 @@ abstract class SearchEngine { public function getSearchIndexFields() { $models = ContentHandler::getContentModels(); $fields = []; + $seenHandlers = new SplObjectStorage(); foreach ( $models as $model ) { - $handler = ContentHandler::getForModelID( $model ); + try { + $handler = ContentHandler::getForModelID( $model ); + } + catch ( MWUnknownContentModelException $e ) { + // If we can find no handler, ignore it + continue; + } + // Several models can have the same handler, so avoid processing it repeatedly + if ( $seenHandlers->contains( $handler ) ) { + // We already did this one + continue; + } + $seenHandlers->attach( $handler ); $handlerFields = $handler->getFieldsForSearchIndex( $this ); foreach ( $handlerFields as $fieldName => $fieldData ) { if ( empty( $fields[$fieldName] ) ) {