Merge "Fixes for more robust dealing with content handlers."
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 30 Jan 2017 16:06:25 +0000 (16:06 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 30 Jan 2017 16:06:25 +0000 (16:06 +0000)
1  2 
includes/search/SearchEngine.php

@@@ -109,20 -109,6 +109,20 @@@ abstract class SearchEngine 
                $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.
        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] ) ) {