diff --git a/search_api.api.php b/search_api.api.php index 0a37e32..8f6a413 100644 --- a/search_api.api.php +++ b/search_api.api.php @@ -203,7 +203,7 @@ function hook_search_api_views_field_handler_mapping_alter(array &$mapping) { */ function hook_search_api_index_items_alter(\Drupal\search_api\IndexInterface $index, array &$items) { foreach ($items as $item_id => $item) { - list(, $raw_id) = \Drupal\search_api\Utility::splitCombinedId($item->getId()); + list(, $raw_id) = \Drupal\search_api\Utility\Utility::splitCombinedId($item->getId()); if ($raw_id % 5 == 0) { unset($items[$item_id]); } diff --git a/search_api.services.yml b/search_api.services.yml index f73d0f3..279b0b0 100644 --- a/search_api.services.yml +++ b/search_api.services.yml @@ -50,9 +50,13 @@ services: tags: - { name: event_subscriber } + search_api.data_type_helper: + class: \Drupal\search_api\Utility\DataTypeHelper + arguments: ['@module_handler', '@plugin.manager.search_api.data_type'] + search_api.fields_helper: - class: \Drupal\search_api\Item\FieldsHelper - arguments: ['@entity_field.manager', '@entity_type.bundle.info', '@module_handler', '@plugin.manager.search_api.data_type'] + class: \Drupal\search_api\Utility\FieldsHelper + arguments: ['@entity_field.manager', '@entity_type.bundle.info', '@search_api.data_type_helper'] search_api.index_task_manager: class: Drupal\search_api\Task\IndexTaskManager @@ -60,9 +64,9 @@ services: tags: - { name: event_subscriber } - search_api.results_static_cache: - class: Drupal\search_api\Query\ResultsCache - arguments: ['@request_stack'] + search_api.query_helper: + class: Drupal\search_api\Utility\QueryHelper + arguments: ['@request_stack', '@module_handler', '@plugin.manager.search_api.parse_mode'] search_api.server_task_manager: class: Drupal\search_api\Task\ServerTaskManager diff --git a/search_api.theme.inc b/search_api.theme.inc index 0649e14..dd03fda 100644 --- a/search_api.theme.inc +++ b/search_api.theme.inc @@ -10,7 +10,7 @@ use Drupal\Core\Url; use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\SearchApiException; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Returns HTML for a fields form table. diff --git a/search_api.views.inc b/search_api.views.inc index 90ba698..c7dc863 100644 --- a/search_api.views.inc +++ b/search_api.views.inc @@ -13,7 +13,7 @@ use Drupal\search_api\Entity\Index; use Drupal\search_api\Item\FieldInterface; use Drupal\search_api\SearchApiException; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Implements hook_views_data(). diff --git a/search_api_db/src/Plugin/search_api/backend/Database.php b/search_api_db/src/Plugin/search_api/backend/Database.php index 457593c..d167241 100644 --- a/search_api_db/src/Plugin/search_api/backend/Database.php +++ b/search_api_db/src/Plugin/search_api/backend/Database.php @@ -28,7 +28,7 @@ use Drupal\search_api\Query\ConditionGroupInterface; use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\SearchApiException; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\search_api_db\DatabaseCompatibility\DatabaseCompatibilityHandlerInterface; use Drupal\search_api_db\DatabaseCompatibility\GenericDatabase; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -778,7 +778,7 @@ protected function createFieldTable(FieldInterface $field = NULL, $db, $type = ' * * @param string $type * An indexed field's search type. One of the keys from - * \Drupal\search_api\Utility::getDefaultDataTypes(). + * \Drupal\search_api\Utility\Utility::getDefaultDataTypes(). * * @return array * Column configurations to use for the field's database column. diff --git a/src/Backend/BackendPluginBase.php b/src/Backend/BackendPluginBase.php index 24c01c1..8674d8a 100644 --- a/src/Backend/BackendPluginBase.php +++ b/src/Backend/BackendPluginBase.php @@ -9,7 +9,7 @@ use Drupal\search_api\IndexInterface; use Drupal\search_api\Plugin\ConfigurablePluginBase; use Drupal\search_api\ServerInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Defines a base class for backend plugins. diff --git a/src/Entity/Index.php b/src/Entity/Index.php index da7c96a..0feb804 100644 --- a/src/Entity/Index.php +++ b/src/Entity/Index.php @@ -17,7 +17,7 @@ use Drupal\search_api\SearchApiException; use Drupal\search_api\ServerInterface; use Drupal\search_api\Tracker\TrackerInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\user\TempStoreException; use Drupal\views\Views; use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; diff --git a/src/Form/IndexAddFieldsForm.php b/src/Form/IndexAddFieldsForm.php index 6c2d37d..a8167dc 100644 --- a/src/Form/IndexAddFieldsForm.php +++ b/src/Form/IndexAddFieldsForm.php @@ -16,7 +16,7 @@ use Drupal\search_api\DataType\DataTypePluginManager; use Drupal\search_api\Processor\ConfigurablePropertyInterface; use Drupal\search_api\UnsavedConfigurationInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\user\SharedTempStoreFactory; use Symfony\Component\DependencyInjection\ContainerInterface; diff --git a/src/Form/IndexFieldsForm.php b/src/Form/IndexFieldsForm.php index 81c91ba..95399d8 100644 --- a/src/Form/IndexFieldsForm.php +++ b/src/Form/IndexFieldsForm.php @@ -12,7 +12,7 @@ use Drupal\search_api\DataType\DataTypePluginManager; use Drupal\search_api\Processor\ConfigurablePropertyInterface; use Drupal\search_api\UnsavedConfigurationInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\user\SharedTempStoreFactory; use Symfony\Component\DependencyInjection\ContainerInterface; diff --git a/src/IndexInterface.php b/src/IndexInterface.php index add0c15..c40d1a0 100644 --- a/src/IndexInterface.php +++ b/src/IndexInterface.php @@ -84,7 +84,7 @@ public function getOption($name, $default = NULL); * identifiers, the values are arrays for specifying the field settings. The * structure of those arrays looks like this: * - type: The type set for this field. One of the types returned by - * \Drupal\search_api\Utility::getDefaultDataTypes(). + * \Drupal\search_api\Utility\Utility::getDefaultDataTypes(). * - boost: (optional) A boost value for terms found in this field during * searches. Usually only relevant for fulltext fields. Defaults to 1.0. * - processors: An array of all processors available for the index. The keys diff --git a/src/Item/Field.php b/src/Item/Field.php index c755d8b..8420b7b 100644 --- a/src/Item/Field.php +++ b/src/Item/Field.php @@ -7,7 +7,7 @@ use Drupal\search_api\IndexInterface; use Drupal\search_api\Processor\ConfigurablePropertyInterface; use Drupal\search_api\SearchApiException; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Represents a field on a search item that can be indexed. diff --git a/src/Item/Item.php b/src/Item/Item.php index 1f2f4b9..939275e 100644 --- a/src/Item/Item.php +++ b/src/Item/Item.php @@ -8,7 +8,7 @@ use Drupal\search_api\Processor\ProcessorPropertyInterface; use Drupal\search_api\SearchApiException; use Drupal\search_api\IndexInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Provides a default implementation for a search item. diff --git a/src/Plugin/search_api/datasource/ContentEntity.php b/src/Plugin/search_api/datasource/ContentEntity.php index 92974db..3093a6e 100644 --- a/src/Plugin/search_api/datasource/ContentEntity.php +++ b/src/Plugin/search_api/datasource/ContentEntity.php @@ -25,7 +25,7 @@ use Drupal\search_api\Plugin\PluginFormTrait; use Drupal\search_api\SearchApiException; use Drupal\search_api\IndexInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Symfony\Component\DependencyInjection\ContainerInterface; /** diff --git a/src/Plugin/search_api/processor/AggregatedFields.php b/src/Plugin/search_api/processor/AggregatedFields.php index 6e6554e..05c2938 100644 --- a/src/Plugin/search_api/processor/AggregatedFields.php +++ b/src/Plugin/search_api/processor/AggregatedFields.php @@ -6,7 +6,7 @@ use Drupal\search_api\Item\ItemInterface; use Drupal\search_api\Plugin\search_api\processor\Property\AggregatedFieldProperty; use Drupal\search_api\Processor\ProcessorPluginBase; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Adds customized aggregations of existing fields to the index. diff --git a/src/Plugin/search_api/processor/Highlight.php b/src/Plugin/search_api/processor/Highlight.php index 6405ee7..54e0da9 100644 --- a/src/Plugin/search_api/processor/Highlight.php +++ b/src/Plugin/search_api/processor/Highlight.php @@ -11,7 +11,7 @@ use Drupal\search_api\Processor\ProcessorPluginBase; use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\Query\ResultSetInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Adds a highlighted excerpt to results and highlights returned fields. diff --git a/src/Plugin/search_api/processor/HtmlFilter.php b/src/Plugin/search_api/processor/HtmlFilter.php index 6d109c8..8a936ec 100644 --- a/src/Plugin/search_api/processor/HtmlFilter.php +++ b/src/Plugin/search_api/processor/HtmlFilter.php @@ -9,7 +9,7 @@ use Drupal\search_api\Item\FieldInterface; use Drupal\search_api\Plugin\search_api\data_type\value\TextValueInterface; use Drupal\search_api\Processor\FieldsProcessorPluginBase; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Symfony\Component\Yaml\Dumper; use Symfony\Component\Yaml\Exception\ParseException; use Symfony\Component\Yaml\Parser; diff --git a/src/Plugin/search_api/processor/Property/AggregatedFieldProperty.php b/src/Plugin/search_api/processor/Property/AggregatedFieldProperty.php index 1612537..a5366c5 100644 --- a/src/Plugin/search_api/processor/Property/AggregatedFieldProperty.php +++ b/src/Plugin/search_api/processor/Property/AggregatedFieldProperty.php @@ -8,7 +8,7 @@ use Drupal\search_api\Item\FieldInterface; use Drupal\search_api\Processor\ConfigurablePropertyBase; use Drupal\search_api\Processor\ConfigurablePropertyInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Defines an "aggregated field" property. diff --git a/src/Plugin/search_api/processor/Stopwords.php b/src/Plugin/search_api/processor/Stopwords.php index fa05cfd..fb235dd 100644 --- a/src/Plugin/search_api/processor/Stopwords.php +++ b/src/Plugin/search_api/processor/Stopwords.php @@ -5,7 +5,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\search_api\Processor\FieldsProcessorPluginBase; use Drupal\search_api\Query\QueryInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Allows you to define stopwords which will be ignored in searches. diff --git a/src/Plugin/search_api/processor/Tokenizer.php b/src/Plugin/search_api/processor/Tokenizer.php index 2be40cd..89a3dd1 100644 --- a/src/Plugin/search_api/processor/Tokenizer.php +++ b/src/Plugin/search_api/processor/Tokenizer.php @@ -8,7 +8,7 @@ use Drupal\search_api\Item\FieldInterface; use Drupal\search_api\Plugin\search_api\data_type\value\TextValueInterface; use Drupal\search_api\Processor\FieldsProcessorPluginBase; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Splits text into individual words for searching. diff --git a/src/Plugin/search_api/tracker/Basic.php b/src/Plugin/search_api/tracker/Basic.php index 0a74ca1..16e9f20 100644 --- a/src/Plugin/search_api/tracker/Basic.php +++ b/src/Plugin/search_api/tracker/Basic.php @@ -4,7 +4,7 @@ use Drupal\Core\Database\Connection; use Drupal\search_api\Tracker\TrackerPluginBase; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Symfony\Component\DependencyInjection\ContainerInterface; /** diff --git a/src/Plugin/views/cache/SearchApiCache.php b/src/Plugin/views/cache/SearchApiCache.php index 18c1580..6867bca 100644 --- a/src/Plugin/views/cache/SearchApiCache.php +++ b/src/Plugin/views/cache/SearchApiCache.php @@ -66,9 +66,9 @@ public function cacheGet($type) { // et al. work. /** @var \Drupal\search_api\Query\ResultSetInterface $results */ $results = $cache->data['search_api results']; - /** @var \Drupal\search_api\Query\ResultsCacheInterface $static_results_cache */ - $static_results_cache = \Drupal::service('search_api.results_static_cache'); - $static_results_cache->addResults($results); + \Drupal::getContainer() + ->get('search_api.query_helper') + ->addResults($results); try { $this->getQuery()->setSearchApiResults($results); diff --git a/src/Plugin/views/field/SearchApiEntityField.php b/src/Plugin/views/field/SearchApiEntityField.php index fa8b790..46a13ef 100644 --- a/src/Plugin/views/field/SearchApiEntityField.php +++ b/src/Plugin/views/field/SearchApiEntityField.php @@ -5,7 +5,7 @@ use Drupal\Core\Form\FormHelper; use Drupal\Core\Form\FormStateInterface; use Drupal\search_api\Plugin\views\EntityFieldRenderer; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\field\Field; use Drupal\views\Plugin\views\field\MultiItemsFieldHandlerInterface; diff --git a/src/Plugin/views/field/SearchApiFieldTrait.php b/src/Plugin/views/field/SearchApiFieldTrait.php index 3397a9e..146a005 100644 --- a/src/Plugin/views/field/SearchApiFieldTrait.php +++ b/src/Plugin/views/field/SearchApiFieldTrait.php @@ -8,7 +8,7 @@ use Drupal\Core\TypedData\DataReferenceInterface; use Drupal\Core\TypedData\ListInterface; use Drupal\search_api\Plugin\views\SearchApiHandlerTrait; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\views\Plugin\views\field\MultiItemsFieldHandlerInterface; use Drupal\views\ResultRow; diff --git a/src/Plugin/views/query/SearchApiQuery.php b/src/Plugin/views/query/SearchApiQuery.php index 8b88a89..f407ab0 100644 --- a/src/Plugin/views/query/SearchApiQuery.php +++ b/src/Plugin/views/query/SearchApiQuery.php @@ -16,7 +16,7 @@ use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\Query\ResultSetInterface; use Drupal\search_api\UncacheableDependencyTrait; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\user\Entity\User; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\query\QueryPluginBase; diff --git a/src/Processor/FieldsProcessorPluginBase.php b/src/Processor/FieldsProcessorPluginBase.php index cd7c261..bbe6c82 100644 --- a/src/Processor/FieldsProcessorPluginBase.php +++ b/src/Processor/FieldsProcessorPluginBase.php @@ -7,7 +7,7 @@ use Drupal\Core\Plugin\PluginFormInterface; use Drupal\Core\Render\Element; use Drupal\search_api\Item\FieldInterface; -use Drupal\search_api\Item\FieldsHelperInterface; +use Drupal\search_api\Utility\DataTypeHelperInterface; use Drupal\search_api\Plugin\PluginFormTrait; use Drupal\search_api\Plugin\search_api\data_type\value\TextValueInterface; use Drupal\search_api\Query\ConditionGroupInterface; @@ -40,11 +40,11 @@ use PluginFormTrait; /** - * The field helper. + * The data type helper. * - * @var \Drupal\search_api\Item\FieldsHelperInterface|null + * @var \Drupal\search_api\Utility\DataTypeHelperInterface|null */ - protected $fieldHelper; + protected $dataTypeHelper; // @todo Add defaultConfiguration() implementation and find a cleaner solution // for all the isset($this->configuration['fields']) checks. @@ -56,31 +56,31 @@ public static function create(ContainerInterface $container, array $configuratio /** @var static $processor */ $processor = parent::create($container, $configuration, $plugin_id, $plugin_definition); - $processor->setFieldHelper($container->get('search_api.fields_helper')); + $processor->setDataTypeHelper($container->get('search_api.data_type_helper')); return $processor; } /** - * Retrieves the field helper. + * Retrieves the data type helper. * - * @return \Drupal\search_api\Item\FieldsHelperInterface - * The field helper. + * @return \Drupal\search_api\Utility\DataTypeHelperInterface + * The data type helper. */ - public function getFieldHelper() { - return $this->fieldHelper ?: \Drupal::service('search_api.fields_helper'); + public function getDataTypeHelper() { + return $this->dataTypeHelper ?: \Drupal::service('search_api.data_type_helper'); } /** - * Sets the field helper. + * Sets the data type helper. * - * @param \Drupal\search_api\Item\FieldsHelperInterface $field_helper - * The new field helper. + * @param \Drupal\search_api\Utility\DataTypeHelperInterface $data_type_helper + * The new data type helper. * * @return $this */ - public function setFieldHelper(FieldsHelperInterface $field_helper) { - $this->fieldHelper = $field_helper; + public function setDataTypeHelper(DataTypeHelperInterface $data_type_helper) { + $this->dataTypeHelper = $data_type_helper; return $this; } @@ -330,7 +330,7 @@ protected function testField($name, FieldInterface $field) { * TRUE if fields of that type should be processed, FALSE otherwise. */ protected function testType($type) { - return $this->getFieldHelper()->isTextType($type, array('text', 'string')); + return $this->getDataTypeHelper()->isTextType($type, array('text', 'string')); } /** diff --git a/src/Processor/ProcessorPluginBase.php b/src/Processor/ProcessorPluginBase.php index b680255..8f00c62 100644 --- a/src/Processor/ProcessorPluginBase.php +++ b/src/Processor/ProcessorPluginBase.php @@ -9,7 +9,7 @@ use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\Query\ResultSetInterface; use Drupal\search_api\SearchApiException; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Defines a base class from which other processors may extend. diff --git a/src/Query/Query.php b/src/Query/Query.php index f6f34d4..6c409bc 100644 --- a/src/Query/Query.php +++ b/src/Query/Query.php @@ -3,10 +3,13 @@ namespace Drupal\search_api\Query; use Drupal\Core\DependencyInjection\DependencySerializationTrait; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\search_api\IndexInterface; use Drupal\search_api\ParseMode\ParseModeInterface; +use Drupal\search_api\ParseMode\ParseModePluginManager; use Drupal\search_api\SearchApiException; +use Drupal\search_api\Utility\QueryHelperInterface; /** * Provides a standard implementation for a Search API query. @@ -43,13 +46,6 @@ class Query implements QueryInterface { protected $results; /** - * The result cache service. - * - * @var \Drupal\search_api\Query\ResultsCacheInterface - */ - protected $resultsCache; - - /** * The parse mode to use for fulltext search keys. * * @var \Drupal\search_api\ParseMode\ParseModeInterface|null @@ -145,12 +141,31 @@ class Query implements QueryInterface { protected $executed = FALSE; /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface|null + */ + protected $moduleHandler; + + /** + * The parse mode manager. + * + * @var \Drupal\search_api\ParseMode\ParseModePluginManager|null + */ + protected $parseModeManager; + + /** + * The result cache service. + * + * @var \Drupal\search_api\Utility\QueryHelperInterface + */ + protected $queryHelper; + + /** * Constructs a Query object. * * @param \Drupal\search_api\IndexInterface $index * The index the query should be executed on. - * @param \Drupal\search_api\Query\ResultsCacheInterface $results_cache - * The results cache that should be used for this query. * @param array $options * (optional) Associative array of options configuring this query. See * \Drupal\search_api\Query\QueryInterface::setOption() for a list of @@ -160,14 +175,13 @@ class Query implements QueryInterface { * Thrown if a search on that index (or with those options) won't be * possible. */ - public function __construct(IndexInterface $index, ResultsCacheInterface $results_cache, array $options = array()) { + public function __construct(IndexInterface $index, array $options = array()) { if (!$index->status()) { $index_label = $index->label(); throw new SearchApiException("Can't search on index '$index_label' which is disabled."); } $this->index = $index; $this->results = new ResultSet($this); - $this->resultsCache = $results_cache; $this->options = $options + array( 'conjunction' => 'AND', 'search id' => __CLASS__, @@ -178,8 +192,77 @@ public function __construct(IndexInterface $index, ResultsCacheInterface $result /** * {@inheritdoc} */ - public static function create(IndexInterface $index, ResultsCacheInterface $results_cache, array $options = array()) { - return new static($index, $results_cache, $options); + public static function create(IndexInterface $index, array $options = array()) { + return new static($index, $options); + } + + /** + * Retrieves the module handler. + * + * @return \Drupal\Core\Extension\ModuleHandlerInterface + * The module handler. + */ + public function getModuleHandler() { + return $this->moduleHandler ?: \Drupal::moduleHandler(); + } + + /** + * Sets the module handler. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The new module handler. + * + * @return $this + */ + public function setModuleHandler(ModuleHandlerInterface $module_handler) { + $this->moduleHandler = $module_handler; + return $this; + } + + /** + * Retrieves the parse mode manager. + * + * @return \Drupal\search_api\ParseMode\ParseModePluginManager + * The parse mode manager. + */ + public function getParseModeManager() { + return $this->parseModeManager ?: \Drupal::service('plugin.manager.search_api.parse_mode'); + } + + /** + * Sets the parse mode manager. + * + * @param \Drupal\search_api\ParseMode\ParseModePluginManager $parse_mode_manager + * The new parse mode manager. + * + * @return $this + */ + public function setParseModeManager(ParseModePluginManager $parse_mode_manager) { + $this->parseModeManager = $parse_mode_manager; + return $this; + } + + /** + * Retrieves the query helper. + * + * @return \Drupal\search_api\Utility\QueryHelperInterface + * The query helper. + */ + public function getQueryHelper() { + return $this->queryHelper ?: \Drupal::service('search_api.query_helper'); + } + + /** + * Sets the query helper. + * + * @param \Drupal\search_api\Utility\QueryHelperInterface $query_helper + * The new query helper. + * + * @return $this + */ + public function setQueryHelper(QueryHelperInterface $query_helper) { + $this->queryHelper = $query_helper; + return $this; } /** @@ -187,10 +270,8 @@ public static function create(IndexInterface $index, ResultsCacheInterface $resu */ public function getParseMode() { if (!$this->parseMode) { - $this->parseMode = \Drupal::getContainer() - ->get('plugin.manager.search_api.parse_mode') - ->createInstance('terms') - ->setConjunction($this->options['conjunction']); + $this->parseMode = $this->getParseModeManager()->createInstance('terms'); + $this->parseMode->setConjunction($this->options['conjunction']); } return $this->parseMode; } @@ -384,7 +465,7 @@ public function preExecute() { foreach ($this->tags as $tag) { $hooks[] = "search_api_query_$tag"; } - \Drupal::moduleHandler()->alter($hooks, $this); + $this->getModuleHandler()->alter($hooks, $this); } } @@ -404,10 +485,10 @@ public function postExecute() { foreach ($this->tags as $tag) { $hooks[] = "search_api_results_$tag"; } - \Drupal::moduleHandler()->alter($hooks, $this->results); + $this->getModuleHandler()->alter($hooks, $this->results); // Store the results in the static cache. - $this->resultsCache->addResults($this->results); + $this->getQueryHelper()->addResults($this->results); } /** diff --git a/src/Query/QueryInterface.php b/src/Query/QueryInterface.php index fc0db7b..fb8778e 100644 --- a/src/Query/QueryInterface.php +++ b/src/Query/QueryInterface.php @@ -2,8 +2,10 @@ namespace Drupal\search_api\Query; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\search_api\IndexInterface; use Drupal\search_api\ParseMode\ParseModeInterface; +use Drupal\search_api\ParseMode\ParseModePluginManager; /** * Represents a search query on a Search API index. @@ -55,8 +57,6 @@ * * @param \Drupal\search_api\IndexInterface $index * The index for which the query should be created. - * @param \Drupal\search_api\Query\ResultsCacheInterface $results_cache - * The results cache that should be used for this query. * @param array $options * (optional) The options to set for the query. * @@ -67,7 +67,7 @@ * Thrown if a search on that index (or with those options) won't be * possible. */ - public static function create(IndexInterface $index, ResultsCacheInterface $results_cache, array $options = array()); + public static function create(IndexInterface $index, array $options = array()); /** * Retrieves the parse mode. diff --git a/src/Tests/ExampleContentTrait.php b/src/Tests/ExampleContentTrait.php index 817c8a4..f20988b 100644 --- a/src/Tests/ExampleContentTrait.php +++ b/src/Tests/ExampleContentTrait.php @@ -3,7 +3,7 @@ namespace Drupal\search_api\Tests; use Drupal\search_api\Entity\Index; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Contains helpers to create data that can be used by tests. diff --git a/src/Tests/IntegrationTest.php b/src/Tests/IntegrationTest.php index fd66de4..88e983b 100644 --- a/src/Tests/IntegrationTest.php +++ b/src/Tests/IntegrationTest.php @@ -10,7 +10,7 @@ use Drupal\search_api\Entity\Server; use Drupal\search_api\Plugin\search_api\tracker\Basic; use Drupal\search_api\SearchApiException; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\search_api_test\Plugin\search_api\tracker\TestTracker; use Drupal\search_api_test\PluginTestTrait; diff --git a/src/Tests/ViewsTest.php b/src/Tests/ViewsTest.php index fae68b1..90ad9da 100644 --- a/src/Tests/ViewsTest.php +++ b/src/Tests/ViewsTest.php @@ -5,7 +5,7 @@ use Drupal\Component\Utility\Html; use Drupal\Core\Url; use Drupal\search_api\Entity\Index; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Tests the Views integration of the Search API. diff --git a/src/Utility/DataTypeHelper.php b/src/Utility/DataTypeHelper.php new file mode 100644 index 0000000..0eee4ed --- /dev/null +++ b/src/Utility/DataTypeHelper.php @@ -0,0 +1,165 @@ +moduleHandler = $moduleHandler; + $this->dataTypeManager = $dataTypeManager; + } + + /** + * {@inheritdoc} + */ + public function isTextType($type, array $textTypes = array('text')) { + if (in_array($type, $textTypes)) { + return TRUE; + } + $dataType = $this->dataTypeManager->createInstance($type); + if ($dataType && !$dataType->isDefault()) { + return in_array($dataType->getFallbackType(), $textTypes); + } + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function getFieldTypeMapping() { + // Check the cache first. + if (!isset($this->fieldTypeMapping)) { + // It's easier to write and understand this array in the form of + // $searchApiFieldType => array($dataTypes) and flip it below. + $defaultMapping = array( + 'text' => array( + 'field_item:string_long.string', + 'field_item:text_long.string', + 'field_item:text_with_summary.string', + 'text', + ), + 'string' => array( + 'string', + 'email', + 'uri', + 'filter_format', + 'duration_iso8601', + 'field_item:path', + ), + 'integer' => array( + 'integer', + 'timespan', + ), + 'decimal' => array( + 'decimal', + 'float', + ), + 'date' => array( + 'date', + 'datetime_iso8601', + 'timestamp', + ), + 'boolean' => array( + 'boolean', + ), + // Types we know about but want/have to ignore. + NULL => array( + 'language', + ), + ); + + foreach ($defaultMapping as $searchApiType => $dataTypes) { + foreach ($dataTypes as $dataType) { + $mapping[$dataType] = $searchApiType; + } + } + + // Allow other modules to intercept and define what default type they want + // to use for their data type. + $this->moduleHandler->alter('search_api_field_type_mapping', $mapping); + + $this->fieldTypeMapping = $mapping; + } + + return $this->fieldTypeMapping; + } + + /** + * {@inheritdoc} + */ + public function getDataTypeFallbackMapping(IndexInterface $index) { + // Check the cache first. + $indexId = $index->id(); + if (empty($this->dataTypeFallbackMapping[$indexId])) { + $server = NULL; + try { + $server = $index->getServerInstance(); + } + catch (SearchApiException $e) { + // If the server isn't available, just ignore it here and return all + // custom types. + } + $this->dataTypeFallbackMapping[$indexId] = array(); + $dataTypes = $this->dataTypeManager->getInstances(); + foreach ($dataTypes as $typeId => $dataType) { + // We know for sure that we do not need to fall back for the default + // data types as they are always present and are required to be + // supported by all backends. + if (!$dataType->isDefault() && (!$server || !$server->supportsDataType($typeId))) { + $this->dataTypeFallbackMapping[$indexId][$typeId] = $dataType->getFallbackType(); + } + } + } + + return $this->dataTypeFallbackMapping[$indexId]; + } + +} diff --git a/src/Utility/DataTypeHelperInterface.php b/src/Utility/DataTypeHelperInterface.php new file mode 100644 index 0000000..2cd1d28 --- /dev/null +++ b/src/Utility/DataTypeHelperInterface.php @@ -0,0 +1,49 @@ +entityFieldManager = $entityFieldManager; $this->entityBundleInfo = $entityBundleInfo; - $this->moduleHandler = $moduleHandler; - $this->dataTypeManager = $dataTypeManager; - } - - /** - * {@inheritdoc} - */ - public function isTextType($type, array $textTypes = array('text')) { - if (in_array($type, $textTypes)) { - return TRUE; - } - $dataType = $this->dataTypeManager->createInstance($type); - if ($dataType && !$dataType->isDefault()) { - return in_array($dataType->getFallbackType(), $textTypes); - } - return FALSE; - } - - /** - * {@inheritdoc} - */ - public function getFieldTypeMapping() { - // Check the cache first. - if (!isset($this->fieldTypeMapping)) { - // It's easier to write and understand this array in the form of - // $searchApiFieldType => array($dataTypes) and flip it below. - $defaultMapping = array( - 'text' => array( - 'field_item:string_long.string', - 'field_item:text_long.string', - 'field_item:text_with_summary.string', - 'text', - ), - 'string' => array( - 'string', - 'email', - 'uri', - 'filter_format', - 'duration_iso8601', - 'field_item:path', - ), - 'integer' => array( - 'integer', - 'timespan', - ), - 'decimal' => array( - 'decimal', - 'float', - ), - 'date' => array( - 'date', - 'datetime_iso8601', - 'timestamp', - ), - 'boolean' => array( - 'boolean', - ), - // Types we know about but want/have to ignore. - NULL => array( - 'language', - ), - ); - - foreach ($defaultMapping as $searchApiType => $dataTypes) { - foreach ($dataTypes as $dataType) { - $mapping[$dataType] = $searchApiType; - } - } - - // Allow other modules to intercept and define what default type they want - // to use for their data type. - $this->moduleHandler->alter('search_api_field_type_mapping', $mapping); - - $this->fieldTypeMapping = $mapping; - } - - return $this->fieldTypeMapping; - } - - /** - * {@inheritdoc} - */ - public function getDataTypeFallbackMapping(IndexInterface $index) { - // Check the cache first. - $indexId = $index->id(); - if (empty($this->dataTypeFallbackMapping[$indexId])) { - $server = NULL; - try { - $server = $index->getServerInstance(); - } - catch (SearchApiException $e) { - // If the server isn't available, just ignore it here and return all - // custom types. - } - $this->dataTypeFallbackMapping[$indexId] = array(); - $dataTypes = $this->dataTypeManager->getInstances(); - foreach ($dataTypes as $typeId => $dataType) { - // We know for sure that we do not need to fall back for the default - // data types as they are always present and are required to be - // supported by all backends. - if (!$dataType->isDefault() && (!$server || !$server->supportsDataType($typeId))) { - $this->dataTypeFallbackMapping[$indexId][$typeId] = $dataType->getFallbackType(); - } - } - } - - return $this->dataTypeFallbackMapping[$indexId]; + $this->dataTypeHelper = $dataTypeHelper; } /** @@ -394,7 +280,7 @@ public function createFieldFromProperty(IndexInterface $index, DataDefinitionInt } if (!isset($type)) { - $typeMapping = $this->getFieldTypeMapping(); + $typeMapping = $this->dataTypeHelper->getFieldTypeMapping(); $propertyType = $property->getDataType(); if (isset($typeMapping[$propertyType])) { $type = $typeMapping[$propertyType]; diff --git a/src/Item/FieldsHelperInterface.php b/src/Utility/FieldsHelperInterface.php similarity index 85% rename from src/Item/FieldsHelperInterface.php rename to src/Utility/FieldsHelperInterface.php index 316335d..9354691 100644 --- a/src/Item/FieldsHelperInterface.php +++ b/src/Utility/FieldsHelperInterface.php @@ -1,6 +1,6 @@ requestStack = $request_stack; + public function __construct(RequestStack $requestStack, ModuleHandlerInterface $moduleHandler, ParseModePluginManager $parseModeManager) { + $this->requestStack = $requestStack; + $this->moduleHandler = $moduleHandler; + $this->parseModeManager = $parseModeManager; $this->results = new \SplObjectStorage(); $this->null = (object) array(); } @@ -47,14 +71,20 @@ public function __construct(RequestStack $request_stack) { * {@inheritdoc} */ public function createQuery(IndexInterface $index, array $options = array()) { - return Query::create($index, $this, $options); + $query = Query::create($index, $options); + + $query->setModuleHandler($this->moduleHandler); + $query->setParseModeManager($this->parseModeManager); + $query->setQueryHelper($this); + + return $query; } /** * {@inheritdoc} */ public function addResults(ResultSetInterface $results) { - // @todo Create getter and setter methods for the search ID. + // @todo Create getter and setter methods for the search ID. See #2772829. $search_id = $results->getQuery()->getOption('search id', ''); $request = $this->getCurrentRequest(); if (!isset($this->results[$request])) { diff --git a/src/Query/ResultsCacheInterface.php b/src/Utility/QueryHelperInterface.php similarity index 88% rename from src/Query/ResultsCacheInterface.php rename to src/Utility/QueryHelperInterface.php index 6782235..8268f5d 100644 --- a/src/Query/ResultsCacheInterface.php +++ b/src/Utility/QueryHelperInterface.php @@ -1,13 +1,14 @@ get('search_api.fields_helper') + ->get('search_api.data_type_helper') ->isTextType($type, $text_types); } @@ -48,7 +49,7 @@ public static function isTextType($type, array $text_types = array('text')) { */ public static function getFieldTypeMapping() { return \Drupal::getContainer() - ->get('search_api.fields_helper') + ->get('search_api.data_type_helper') ->getFieldTypeMapping(); } @@ -66,7 +67,7 @@ public static function getFieldTypeMapping() { */ public static function getDataTypeFallbackMapping(IndexInterface $index) { return \Drupal::getContainer() - ->get('search_api.fields_helper') + ->get('search_api.data_type_helper') ->getDataTypeFallbackMapping($index); } @@ -221,7 +222,7 @@ public static function isFieldIdReserved($field_id) { */ public static function createQuery(IndexInterface $index, array $options = array()) { return \Drupal::getContainer() - ->get('search_api.results_static_cache') + ->get('search_api.query_helper') ->createQuery($index, $options); } diff --git a/tests/search_api_test/src/Plugin/search_api/backend/TestBackend.php b/tests/search_api_test/src/Plugin/search_api/backend/TestBackend.php index 887746f..e0db91a 100644 --- a/tests/search_api_test/src/Plugin/search_api/backend/TestBackend.php +++ b/tests/search_api_test/src/Plugin/search_api/backend/TestBackend.php @@ -8,7 +8,7 @@ use Drupal\search_api\IndexInterface; use Drupal\search_api\Plugin\PluginFormTrait; use Drupal\search_api\Query\QueryInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\search_api_test\TestPluginTrait; /** diff --git a/tests/search_api_test_hooks/search_api_test_hooks.module b/tests/search_api_test_hooks/search_api_test_hooks.module index 0535016..a46d467 100644 --- a/tests/search_api_test_hooks/search_api_test_hooks.module +++ b/tests/search_api_test_hooks/search_api_test_hooks.module @@ -9,7 +9,7 @@ use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\Query\ResultSetInterface; use Drupal\search_api\ServerInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Implements hook_search_api_backend_info_alter. diff --git a/tests/src/Kernel/BackendTestBase.php b/tests/src/Kernel/BackendTestBase.php index 59fdb99..4b11af4 100644 --- a/tests/src/Kernel/BackendTestBase.php +++ b/tests/src/Kernel/BackendTestBase.php @@ -13,7 +13,7 @@ use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\Query\ResultSetInterface; use Drupal\search_api\Tests\ExampleContentTrait; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Provides a base class for backend tests. diff --git a/tests/src/Kernel/CustomDataTypesTest.php b/tests/src/Kernel/CustomDataTypesTest.php index e0b5882..0eabe35 100644 --- a/tests/src/Kernel/CustomDataTypesTest.php +++ b/tests/src/Kernel/CustomDataTypesTest.php @@ -6,7 +6,7 @@ use Drupal\KernelTests\KernelTestBase; use Drupal\search_api\Entity\Index; use Drupal\search_api\Entity\Server; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Tests custom data types integration. diff --git a/tests/src/Kernel/DatasourceTaskTest.php b/tests/src/Kernel/DatasourceTaskTest.php index b8886b3..8bb83a0 100644 --- a/tests/src/Kernel/DatasourceTaskTest.php +++ b/tests/src/Kernel/DatasourceTaskTest.php @@ -7,7 +7,7 @@ use Drupal\language\Entity\ConfigurableLanguage; use Drupal\search_api\Entity\Index; use Drupal\search_api\Entity\Server; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Tests task integration of the content entity datasource. diff --git a/tests/src/Kernel/DependencyRemovalTest.php b/tests/src/Kernel/DependencyRemovalTest.php index ce52b52..1b7003a 100644 --- a/tests/src/Kernel/DependencyRemovalTest.php +++ b/tests/src/Kernel/DependencyRemovalTest.php @@ -7,7 +7,7 @@ use Drupal\field\Entity\FieldStorageConfig; use Drupal\search_api\Entity\Index; use Drupal\search_api\Entity\Server; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\search_api_test\PluginTestTrait; /** diff --git a/tests/src/Kernel/FieldValuesExtractionTest.php b/tests/src/Kernel/FieldValuesExtractionTest.php index b8e5f2b..110977f 100644 --- a/tests/src/Kernel/FieldValuesExtractionTest.php +++ b/tests/src/Kernel/FieldValuesExtractionTest.php @@ -3,7 +3,7 @@ namespace Drupal\Tests\search_api\Kernel; use Drupal\KernelTests\KernelTestBase; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Tests extraction of field values, as used during indexing. diff --git a/tests/src/Kernel/IndexChangesTest.php b/tests/src/Kernel/IndexChangesTest.php index 6b30b1a..b4c2133 100644 --- a/tests/src/Kernel/IndexChangesTest.php +++ b/tests/src/Kernel/IndexChangesTest.php @@ -6,7 +6,7 @@ use Drupal\KernelTests\KernelTestBase; use Drupal\search_api\Entity\Index; use Drupal\search_api\Entity\Server; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\search_api_test\PluginTestTrait; use Drupal\user\Entity\User; diff --git a/tests/src/Kernel/LanguageKernelTest.php b/tests/src/Kernel/LanguageKernelTest.php index bb1f438..17c42f0 100644 --- a/tests/src/Kernel/LanguageKernelTest.php +++ b/tests/src/Kernel/LanguageKernelTest.php @@ -8,7 +8,7 @@ use Drupal\language\Entity\ConfigurableLanguage; use Drupal\search_api\Entity\Index; use Drupal\search_api\Entity\Server; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Tests translation handling of the content entity datasource. diff --git a/tests/src/Kernel/Processor/ContentAccessTest.php b/tests/src/Kernel/Processor/ContentAccessTest.php index 52eaa87..e9f2f14 100644 --- a/tests/src/Kernel/Processor/ContentAccessTest.php +++ b/tests/src/Kernel/Processor/ContentAccessTest.php @@ -9,7 +9,7 @@ use Drupal\Core\TypedData\DataDefinitionInterface; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\search_api\Kernel\ResultsTrait; use Drupal\user\Entity\Role; use Drupal\user\Entity\User; diff --git a/tests/src/Kernel/Processor/ProcessorTestBase.php b/tests/src/Kernel/Processor/ProcessorTestBase.php index 3e8712f..b28304b 100644 --- a/tests/src/Kernel/Processor/ProcessorTestBase.php +++ b/tests/src/Kernel/Processor/ProcessorTestBase.php @@ -6,7 +6,7 @@ use Drupal\search_api\Entity\Index; use Drupal\search_api\Entity\Server; use Drupal\search_api\Item\Field; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\system\Entity\Action; /** diff --git a/tests/src/Kernel/Processor/RenderedItemTest.php b/tests/src/Kernel/Processor/RenderedItemTest.php index 67df37f..e2fed7f 100644 --- a/tests/src/Kernel/Processor/RenderedItemTest.php +++ b/tests/src/Kernel/Processor/RenderedItemTest.php @@ -7,7 +7,7 @@ use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; use Drupal\search_api\Entity\Index; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\user\Entity\Role; use Drupal\user\Entity\User; diff --git a/tests/src/Kernel/QueryTest.php b/tests/src/Kernel/QueryTest.php index 035665c..f94399b 100644 --- a/tests/src/Kernel/QueryTest.php +++ b/tests/src/Kernel/QueryTest.php @@ -172,8 +172,7 @@ public function testQueryCloning() { * Tests that serialization of queries works correctly. */ public function testQuerySerialization() { - $results_cache = $this->container->get('search_api.results_static_cache'); - $query = Query::create($this->index, $results_cache); + $query = Query::create($this->index); $tags = array('tag1', 'tag2'); $query->keys('foo bar') ->addCondition('field1', 'value', '<') diff --git a/tests/src/Kernel/ResultsTrait.php b/tests/src/Kernel/ResultsTrait.php index 7129613..ffa6573 100644 --- a/tests/src/Kernel/ResultsTrait.php +++ b/tests/src/Kernel/ResultsTrait.php @@ -3,7 +3,7 @@ namespace Drupal\Tests\search_api\Kernel; use Drupal\search_api\Query\ResultSetInterface; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Defines a trait for testing results. diff --git a/tests/src/Unit/Plugin/Processor/AggregatedFieldsTest.php b/tests/src/Unit/Plugin/Processor/AggregatedFieldsTest.php index 74c1463..0ce01e4 100644 --- a/tests/src/Unit/Plugin/Processor/AggregatedFieldsTest.php +++ b/tests/src/Unit/Plugin/Processor/AggregatedFieldsTest.php @@ -8,7 +8,7 @@ use Drupal\search_api\Plugin\search_api\processor\AggregatedFields; use Drupal\search_api\Processor\ProcessorInterface; use Drupal\search_api\Processor\ProcessorProperty; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/FieldsProcessorPluginBaseTest.php b/tests/src/Unit/Plugin/Processor/FieldsProcessorPluginBaseTest.php index b216baf..f63b359 100644 --- a/tests/src/Unit/Plugin/Processor/FieldsProcessorPluginBaseTest.php +++ b/tests/src/Unit/Plugin/Processor/FieldsProcessorPluginBaseTest.php @@ -5,7 +5,7 @@ use Drupal\search_api\Plugin\search_api\data_type\value\TextToken; use Drupal\search_api\Plugin\search_api\data_type\value\TextValue; use Drupal\search_api\Query\Condition; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/HighlightTest.php b/tests/src/Unit/Plugin/Processor/HighlightTest.php index 6de97c3..922529a 100644 --- a/tests/src/Unit/Plugin/Processor/HighlightTest.php +++ b/tests/src/Unit/Plugin/Processor/HighlightTest.php @@ -10,7 +10,7 @@ use Drupal\search_api\Processor\ProcessorProperty; use Drupal\search_api\Query\QueryInterface; use Drupal\search_api\Query\ResultSet; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/HtmlFilterTest.php b/tests/src/Unit/Plugin/Processor/HtmlFilterTest.php index 6dbdbf3..b289edb 100644 --- a/tests/src/Unit/Plugin/Processor/HtmlFilterTest.php +++ b/tests/src/Unit/Plugin/Processor/HtmlFilterTest.php @@ -3,7 +3,7 @@ namespace Drupal\Tests\search_api\Unit\Plugin\Processor; use Drupal\search_api\Plugin\search_api\processor\HtmlFilter; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/NodeStatusTest.php b/tests/src/Unit/Plugin/Processor/NodeStatusTest.php index e95e87a..a1abf22 100644 --- a/tests/src/Unit/Plugin/Processor/NodeStatusTest.php +++ b/tests/src/Unit/Plugin/Processor/NodeStatusTest.php @@ -4,7 +4,7 @@ use Drupal\Core\Entity\Plugin\DataType\EntityAdapter; use Drupal\search_api\Plugin\search_api\processor\NodeStatus; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/RoleFilterTest.php b/tests/src/Unit/Plugin/Processor/RoleFilterTest.php index 9f48275..1f0d1a4 100644 --- a/tests/src/Unit/Plugin/Processor/RoleFilterTest.php +++ b/tests/src/Unit/Plugin/Processor/RoleFilterTest.php @@ -4,7 +4,7 @@ use Drupal\Core\Entity\Plugin\DataType\EntityAdapter; use Drupal\search_api\Plugin\search_api\processor\RoleFilter; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/StopwordsTest.php b/tests/src/Unit/Plugin/Processor/StopwordsTest.php index 70425fa..c0eeea2 100644 --- a/tests/src/Unit/Plugin/Processor/StopwordsTest.php +++ b/tests/src/Unit/Plugin/Processor/StopwordsTest.php @@ -3,7 +3,7 @@ namespace Drupal\Tests\search_api\Unit\Plugin\Processor; use Drupal\search_api\Plugin\search_api\processor\Stopwords; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /** diff --git a/tests/src/Unit/Plugin/Processor/TestFieldsProcessorPlugin.php b/tests/src/Unit/Plugin/Processor/TestFieldsProcessorPlugin.php index 922fc69..e9dbd0b 100644 --- a/tests/src/Unit/Plugin/Processor/TestFieldsProcessorPlugin.php +++ b/tests/src/Unit/Plugin/Processor/TestFieldsProcessorPlugin.php @@ -5,7 +5,7 @@ use Drupal\search_api\Item\FieldInterface; use Drupal\search_api\Plugin\search_api\data_type\value\TextValue; use Drupal\search_api\Processor\FieldsProcessorPluginBase; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Mimics a processor working on individual fields of items. diff --git a/tests/src/Unit/Plugin/Processor/TestItemsTrait.php b/tests/src/Unit/Plugin/Processor/TestItemsTrait.php index 8cefb6d..c267efa 100644 --- a/tests/src/Unit/Plugin/Processor/TestItemsTrait.php +++ b/tests/src/Unit/Plugin/Processor/TestItemsTrait.php @@ -6,10 +6,11 @@ use Drupal\Core\TypedData\ComplexDataInterface; use Drupal\search_api\IndexInterface; use Drupal\search_api\Item\FieldInterface; -use Drupal\search_api\Item\FieldsHelper; +use Drupal\search_api\Utility\DataTypeHelper; +use Drupal\search_api\Utility\FieldsHelper; use Drupal\search_api\Item\Item; use Drupal\search_api\Query\Query; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; /** * Provides common methods for test cases that need to create search items. @@ -106,7 +107,7 @@ public function createItems(IndexInterface $index, $count, array $fields, Comple } /** - * Adds mock data type plugin manager and results cache services to \Drupal. + * Adds a container with several mock services commonly needed by our tests. */ protected function setUpMockContainer() { /** @var \Drupal\Tests\UnitTestCase|\Drupal\Tests\search_api\Unit\Plugin\Processor\TestItemsTrait $this */ @@ -116,31 +117,32 @@ protected function setUpMockContainer() { $dataTypeManager->method('getInstances') ->will($this->returnValue(array())); - $entityFieldManager = $this->getMockBuilder('Drupal\Core\Entity\EntityFieldManagerInterface') + $moduleHandler = $this->getMockBuilder('Drupal\Core\Extension\ModuleHandlerInterface') ->disableOriginalConstructor() ->getMock(); - $entityBundleInfo = $this->getMockBuilder('Drupal\Core\Entity\EntityTypeBundleInfoInterface') + $dataTypeHelper = new DataTypeHelper($moduleHandler, $dataTypeManager); + + $entityFieldManager = $this->getMockBuilder('Drupal\Core\Entity\EntityFieldManagerInterface') ->disableOriginalConstructor() ->getMock(); - $moduleHandler = $this->getMockBuilder('Drupal\Core\Extension\ModuleHandlerInterface') + $entityBundleInfo = $this->getMockBuilder('Drupal\Core\Entity\EntityTypeBundleInfoInterface') ->disableOriginalConstructor() ->getMock(); - $fieldsHelper = new FieldsHelper($entityFieldManager, $entityBundleInfo, $moduleHandler, $dataTypeManager); + $fieldsHelper = new FieldsHelper($entityFieldManager, $entityBundleInfo, $dataTypeHelper); - $resultsStaticCache = $this->getMockBuilder('Drupal\search_api\Query\ResultsCache') - ->disableOriginalConstructor() - ->getMock(); - $resultsStaticCache->method('createQuery') - ->willReturnCallback(function (IndexInterface $index, array $options = array()) use ($resultsStaticCache) { - return Query::create($index, $resultsStaticCache, $options); + $queryHelper = $this->getMock('Drupal\search_api\Utility\QueryHelperInterface'); + $queryHelper->method('createQuery') + ->willReturnCallback(function (IndexInterface $index, array $options = array()) { + return Query::create($index, $options); }); - $resultsStaticCache->method('getResults') + $queryHelper->method('getResults') ->will($this->returnValue(array())); $this->container = new ContainerBuilder(); $this->container->set('plugin.manager.search_api.data_type', $dataTypeManager); + $this->container->set('search_api.data_type_helper', $dataTypeHelper); $this->container->set('search_api.fields_helper', $fieldsHelper); - $this->container->set('search_api.results_static_cache', $resultsStaticCache); + $this->container->set('search_api.query_helper', $queryHelper); \Drupal::setContainer($this->container); } diff --git a/tests/src/Unit/Plugin/Processor/TokenizerTest.php b/tests/src/Unit/Plugin/Processor/TokenizerTest.php index 2b46854..f6981ea 100644 --- a/tests/src/Unit/Plugin/Processor/TokenizerTest.php +++ b/tests/src/Unit/Plugin/Processor/TokenizerTest.php @@ -4,7 +4,7 @@ use Drupal\Component\Utility\Unicode; use Drupal\search_api\Plugin\search_api\processor\Tokenizer; -use Drupal\search_api\Utility; +use Drupal\search_api\Utility\Utility; use Drupal\Tests\UnitTestCase; /**