You are here

class ResetFacetsProcessor in Facets 8

Provides a processor that adds a link to reset facet filters.

Plugin annotation


@SummaryProcessor(
  id = "reset_facets",
  label = @Translation("Adds reset facets link."),
  description = @Translation("When checked, this facet will add a link to reset enabled facets."),
  stages = {
    "build" = 30
  }
)

Hierarchy

Expanded class hierarchy of ResetFacetsProcessor

1 file declares its use of ResetFacetsProcessor
ResetFacetsProcessorTest.php in modules/facets_summary/tests/src/Unit/Plugin/Processor/ResetFacetsProcessorTest.php

File

modules/facets_summary/src/Plugin/facets_summary/processor/ResetFacetsProcessor.php, line 24

Namespace

Drupal\facets_summary\Plugin\facets_summary\processor
View source
class ResetFacetsProcessor extends ProcessorPluginBase implements BuildProcessorInterface {

  /**
   * {@inheritdoc}
   */
  public function build(FacetsSummaryInterface $facets_summary, array $build, array $facets) {
    $configuration = $facets_summary
      ->getProcessorConfigs()[$this
      ->getPluginId()];
    $hasReset = FALSE;

    // Do nothing if there are no selected facets.
    if (empty($build['#items'])) {
      return $build;
    }
    $request = \Drupal::requestStack()
      ->getMasterRequest();
    $query_params = $request->query
      ->all();

    // Bypass all active facets and remove them from the query parameters array.
    foreach ($facets as $facet) {
      $url_alias = $facet
        ->getUrlAlias();
      $filter_key = $facet
        ->getFacetSourceConfig()
        ->getFilterKey() ?: 'f';
      if ($facet
        ->getActiveItems()) {

        // This removes query params when using the query url processor.
        if (isset($query_params[$filter_key])) {
          foreach ($query_params[$filter_key] as $delta => $param) {
            if (strpos($param, $url_alias . ':') !== FALSE) {
              unset($query_params[$filter_key][$delta]);
            }
          }
          if (!$query_params[$filter_key]) {
            unset($query_params[$filter_key]);
          }
        }
        $hasReset = TRUE;
      }
    }
    if (!$hasReset) {
      return $build;
    }
    $url = Url::fromUserInput($facets_summary
      ->getFacetSource()
      ->getPath());
    $url
      ->setOptions([
      'query' => $query_params,
    ]);

    // Check if reset link text is not set or it contains only whitespaces.
    // Set text from settings or set default text.
    if (empty($configuration['settings']['link_text']) || strlen(trim($configuration['settings']['link_text'])) === 0) {
      $itemText = t('Reset');
    }
    else {
      $itemText = $configuration['settings']['link_text'];
    }
    $item = (new Link($itemText, $url))
      ->toRenderable();
    $item['#wrapper_attributes'] = [
      'class' => [
        'facet-summary-item--clear',
      ],
    ];
    array_unshift($build['#items'], $item);
    return $build;
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state, FacetsSummaryInterface $facets_summary) {

    // By default, there should be no config form.
    $config = $this
      ->getConfiguration();
    $build['link_text'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Reset facets link text'),
      '#default_value' => $config['link_text'],
    ];
    return $build;
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'link_text' => '',
    ];
  }

}

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
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.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 92
ProcessorInterface::STAGE_BUILD constant Processing stage: build.
ProcessorPluginBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
ProcessorPluginBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
ProcessorPluginBase::getDefaultWeight public function Returns the default weight for a specific processing stage. Overrides ProcessorInterface::getDefaultWeight
ProcessorPluginBase::getDescription public function Retrieves the processor description. Overrides ProcessorInterface::getDescription
ProcessorPluginBase::isHidden public function Determines whether this processor should be hidden from the user. Overrides ProcessorInterface::isHidden
ProcessorPluginBase::isLocked public function Determines whether this processor should always be enabled. Overrides ProcessorInterface::isLocked
ProcessorPluginBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
ProcessorPluginBase::submitConfigurationForm public function Submits a configuration form for this processor. Overrides ProcessorInterface::submitConfigurationForm
ProcessorPluginBase::supportsStage public function Checks whether this processor implements a particular stage. Overrides ProcessorInterface::supportsStage
ProcessorPluginBase::validateConfigurationForm public function Validates a configuration form for this processor. Overrides ProcessorInterface::validateConfigurationForm
ResetFacetsProcessor::build public function Alter the items in the summary before creating the renderable array. Overrides BuildProcessorInterface::build
ResetFacetsProcessor::buildConfigurationForm public function Adds a configuration form for this processor. Overrides ProcessorPluginBase::buildConfigurationForm
ResetFacetsProcessor::defaultConfiguration public function Gets default configuration for this plugin. Overrides ProcessorPluginBase::defaultConfiguration
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.