You are here

class SearchApiString in Facets 8

Provides support for string facets within the Search API scope.

This is the default implementation that works with all backends and data types. While you could use this query type for every data type, other query types will usually be better suited for their specific data type.

For example, the SearchApiDate query type will handle its input as a DateTime value, while this class would only be able to work with it as a string.

Plugin annotation


@FacetsQueryType(
  id = "search_api_string",
  label = @Translation("String"),
)

Hierarchy

Expanded class hierarchy of SearchApiString

1 file declares its use of SearchApiString
SearchApiStringTest.php in tests/src/Unit/Plugin/query_type/SearchApiStringTest.php

File

src/Plugin/facets/query_type/SearchApiString.php, line 24

Namespace

Drupal\facets\Plugin\facets\query_type
View source
class SearchApiString extends QueryTypePluginBase {

  /**
   * {@inheritdoc}
   */
  public function execute() {
    $query = $this->query;

    // Only alter the query when there's an actual query object to alter.
    if (!empty($query)) {
      $operator = $this->facet
        ->getQueryOperator();
      $field_identifier = $this->facet
        ->getFieldIdentifier();
      $exclude = $this->facet
        ->getExclude();
      if ($query
        ->getProcessingLevel() === QueryInterface::PROCESSING_FULL) {

        // Set the options for the actual query.
        $options =& $query
          ->getOptions();
        $options['search_api_facets'][$field_identifier] = $this
          ->getFacetOptions();
      }

      // Add the filter to the query if there are active values.
      $active_items = $this->facet
        ->getActiveItems();
      if (count($active_items)) {
        $filter = $query
          ->createConditionGroup($operator, [
          'facet:' . $field_identifier,
        ]);
        foreach ($active_items as $value) {
          $filter
            ->addCondition($this->facet
            ->getFieldIdentifier(), $value, $exclude ? '<>' : '=');
        }
        $query
          ->addConditionGroup($filter);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function build() {
    $query_operator = $this->facet
      ->getQueryOperator();
    if (!empty($this->results)) {
      $facet_results = [];
      foreach ($this->results as $result) {
        if ($result['count'] || $query_operator == 'or') {
          $result_filter = $result['filter'];
          if ($result_filter[0] === '"') {
            $result_filter = substr($result_filter, 1);
          }
          if ($result_filter[strlen($result_filter) - 1] === '"') {
            $result_filter = substr($result_filter, 0, -1);
          }
          $count = $result['count'];
          $result = new Result($this->facet, $result_filter, $result_filter, $count);
          $facet_results[] = $result;
        }
      }
      $this->facet
        ->setResults($facet_results);
    }
    return $this->facet;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
DependencyTrait::$dependencies protected property The object's dependencies.
DependencyTrait::addDependencies protected function Adds multiple dependencies.
DependencyTrait::addDependency protected function Adds a dependency.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
QueryTypePluginBase::$facet protected property The facet that needs the query type.
QueryTypePluginBase::$linkGenerator protected property The injected link generator.
QueryTypePluginBase::$query protected property The backend native query object.
QueryTypePluginBase::$results protected property The results for the facet.
QueryTypePluginBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
QueryTypePluginBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration
QueryTypePluginBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
QueryTypePluginBase::getFacetOptions protected function Builds facet options that will be send to the backend. 1
QueryTypePluginBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
QueryTypePluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct 1
SearchApiString::build public function Builds the facet information, so it can be rendered. Overrides QueryTypeInterface::build
SearchApiString::execute public function Adds facet info to the query using the backend native query object. Overrides QueryTypeInterface::execute
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.