diff --git a/1846860-8--dynamic_field_info.patch b/1846860-8--dynamic_field_info.patch deleted file mode 100644 index 8f540243..00000000 --- a/1846860-8--dynamic_field_info.patch +++ /dev/null @@ -1,210 +0,0 @@ -diff --git a/includes/service.inc b/includes/service.inc -index 4455235..20e57b8 100644 ---- a/includes/service.inc -+++ b/includes/service.inc -@@ -27,28 +27,6 @@ class SearchApiSolrService extends SearchApiAbstractService { - protected $solr; - - /** -- * An array of all recognized types. -- * -- * Maps the type names to the prefixes used for identifying them in the Solr -- * schema. -- * -- * @var array -- */ -- protected static $type_prefixes = array( -- 'text' => 'tm', -- 'tokens' => 'tm', -- 'string' => 's', -- 'integer' => 'i', -- 'decimal' => 'f', -- 'date' => 'd', -- 'duration' => 'i', -- 'boolean' => 'b', -- 'uri' => 's', -- 'location' => 'loc', -- 'geohash' => 'geo', -- ); -- -- /** - * Static cache for getFieldNames(). - * - * @var array -@@ -290,7 +268,8 @@ class SearchApiSolrService extends SearchApiAbstractService { - * Overrides SearchApiAbstractService::supportsFeature(). - */ - public function supportsFeature($feature) { -- $supported = drupal_map_assoc(array( -+ // Search API features. -+ $supported = array( - 'search_api_autocomplete', - 'search_api_facets', - 'search_api_facets_operator_or', -@@ -300,7 +279,14 @@ class SearchApiSolrService extends SearchApiAbstractService { - 'search_api_spellcheck', - 'search_api_data_type_location', - 'search_api_data_type_geohash', -- )); -+ ); -+ -+ // Custom data types. -+ foreach (search_api_solr_get_dynamic_field_info() as $type => $info) { -+ $supported[] = 'search_api_data_type_' . $type; -+ } -+ -+ $supported = drupal_map_assoc($supported); - return isset($supported[$feature]); - } - -@@ -495,8 +481,9 @@ class SearchApiSolrService extends SearchApiAbstractService { - } - - $inner_type = search_api_extract_inner_type($type); -- $pref = isset(self::$type_prefixes[$inner_type]) ? self::$type_prefixes[$inner_type] : ''; -- if ($pref != 'tm') { -+ $type_info = search_api_solr_get_dynamic_field_info($inner_type); -+ $pref = isset($type_info['prefix']) ? $type_info['prefix']: ''; -+ if (empty($type_info['always multiValued'])) { - $pref .= $type == $inner_type ? 's' : 'm'; - } - if (!empty($this->options['clean_ids'])) { -diff --git a/search_api_solr.api.php b/search_api_solr.api.php -index a64c477..cc9b208 100644 ---- a/search_api_solr.api.php -+++ b/search_api_solr.api.php -@@ -101,5 +101,45 @@ function hook_search_api_solr_multi_query_alter(array &$call_args, SearchApiMult - } - - /** -+ * Define how Search API Solr should index different data types. -+ * -+ * It is important to make sure that any types you define are also declared to -+ * Search API using hook_search_api_data_type_info(). -+ * -+ * @return array -+ * An array containing data type definitions, keyed by their type identifier -+ * and containing the following keys: -+ * - prefix: The prefix used by the dynamic field type. -+ * - always multiValued: (optional) Whether the single/multiple prefix should -+ * be skipped for this data type. Defaults to FALSE. -+ * -+ * @see hook_search_api_solr_dynamic_field_info_alter() -+ * @see search_api_solr_get_dynamic_field_info() -+ * @see hook_search_api_data_type_info(). -+ */ -+function hook_search_api_solr_dynamic_field_info() { -+ return array( -+ 'example_type' => array( -+ 'prefix' => 'ex', -+ // Could be omitted, as FALSE is the default. -+ 'always multiValued' => FALSE, -+ ), -+ ); -+} -+ -+/** -+ * Alter the data type indexing info. -+ * -+ * @param array $infos -+ * The item type info array, keyed by type identifier. -+ * -+ * @see hook_search_api_solr_dynamic_field_info() -+ */ -+function hook_search_api_solr_dynamic_field_info_alter(array &$infos) { -+ // Change the prefix used for example_type. -+ $info['example_type']['prefix'] = 'ex2'; -+} -+ -+/** - * @} End of "addtogroup hooks". - */ -diff --git a/search_api_solr.module b/search_api_solr.module -index cfab380..52ae956 100644 ---- a/search_api_solr.module -+++ b/search_api_solr.module -@@ -113,6 +113,84 @@ function search_api_solr_search_api_server_update(SearchApiServer $server) { - } - - /** -+ * Returns either all dynamic field types, or a specific one. -+ * -+ * @param $type -+ * If specified, the type whose definition should be returned. -+ * -+ * @return array -+ * If $type was not given, an array containing all custom dynamic fields, in -+ * the format specified by hook_search_api_solr_dynamic_field_info(). -+ * Otherwise, the definition for the given type, or NULL if it is unknown. -+ * -+ * @see hook_search_api_solr_dynamic_field_info(). -+ */ -+function search_api_solr_get_dynamic_field_info($type = NULL) { -+ $types = &drupal_static(__FUNCTION__); -+ if (!isset($types)) { -+ $types = module_invoke_all('search_api_solr_dynamic_field_info'); -+ $types = $types ? $types : array(); -+ drupal_alter('search_api_solr_dynamic_field_info', $types); -+ } -+ if (isset($type)) { -+ return isset($types[$type]) ? $types[$type] : NULL; -+ } -+ return $types; -+} -+ -+/** -+ * Implements hook_search_api_solr_dynamic_field_info(). -+ */ -+function search_api_solr_search_api_solr_dynamic_field_info() { -+ return array( -+ 'text' => array( -+ 'prefix' => 'tm', -+ 'always multiValued' => TRUE, -+ ), -+ 'tokens' => array( -+ 'prefix' => 'tm', -+ 'always multiValued' => TRUE, -+ ), -+ 'string' => array( -+ 'prefix' => 's', -+ 'always multiValued' => FALSE, -+ ), -+ 'integer' => array( -+ 'prefix' => 'i', -+ 'always multiValued' => FALSE, -+ ), -+ 'decimal' => array( -+ 'prefix' => 'f', -+ 'always multiValued' => FALSE, -+ ), -+ 'date' => array( -+ 'prefix' => 'd', -+ 'always multiValued' => FALSE, -+ ), -+ 'duration' => array( -+ 'prefix' => 'i', -+ 'always multiValued' => FALSE, -+ ), -+ 'boolean' => array( -+ 'prefix' => 'b', -+ 'always multiValued' => FALSE, -+ ), -+ 'uri' => array( -+ 'prefix' => 's', -+ 'always multiValued' => FALSE, -+ ), -+ 'location' => array( -+ 'prefix' => 'loc', -+ 'always multiValued' => FALSE, -+ ), -+ 'geohash' => array( -+ 'prefix' => 'geohash', -+ 'always multiValued' => FALSE, -+ ), -+ ); -+} -+ -+/** - * Retrieves a list of all config files of a server. - * - * @param SearchApiServer $server