You are here

class RouteCondition in Route Condition 2.0.x

Same name and namespace in other branches
  1. 8 src/Plugin/Condition/RouteCondition.php \Drupal\route_condition\Plugin\Condition\RouteCondition

Provides a 'Route' condition.

Plugin annotation


@Condition(
  id = "route",
  label = @Translation("Route"),
)

Hierarchy

Expanded class hierarchy of RouteCondition

File

src/Plugin/Condition/RouteCondition.php, line 20

Namespace

Drupal\route_condition\Plugin\Condition
View source
class RouteCondition extends ConditionPluginBase implements ConditionInterface, ContainerFactoryPluginInterface {

  /**
   * The CurrentRouteMatch service.
   *
   * @var \Drupal\Core\Routing\CurrentRouteMatch
   */
  protected $currentRouteMatch;

  /**
   * Constructs a Route condition plugin.
   *
   * @param \Drupal\Core\Routing\CurrentRouteMatch $current_route_match
   *   The CurrentRouteMatch service.
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param array $plugin_definition
   *   The plugin implementation definition.
   */
  public function __construct(CurrentRouteMatch $current_route_match, array $configuration, $plugin_id, array $plugin_definition) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->currentRouteMatch = $current_route_match;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($container
      ->get('current_route_match'), $configuration, $plugin_id, $plugin_definition);
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'routes' => '',
    ] + parent::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form['routes'] = [
      '#type' => 'textarea',
      '#title' => $this
        ->t('Routes'),
      '#default_value' => $this->configuration['routes'],
      '#description' => $this
        ->t("Specify route names. Enter one route per line. The '*' character is a wildcard. An example route is %canonical-wildcard for every entity's canonical view. Prepend the ~ character (tilde) to exclude the route.", [
        '%canonical-wildcard' => 'entity.*.canonical',
      ]),
      '#attached' => [
        'library' => [
          'route_condition/drupal.routeCondition',
        ],
      ],
    ];
    return parent::buildConfigurationForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    $this->configuration['routes'] = $form_state
      ->getValue('routes');
    parent::submitConfigurationForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function summary() {
    $routes = array_map('trim', explode("\n", $this->configuration['routes']));
    $routes = implode(', ', $routes);
    if (!empty($this->configuration['negate'])) {
      return $this
        ->t('Do not return true on the following routes: @routes', [
        '@routes' => $routes,
      ]);
    }
    return $this
      ->t('Return true on the following routes: @routes', [
      '@routes' => $routes,
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function evaluate() {

    // Convert routes to lowercase.
    $routes = mb_strtolower($this->configuration['routes']);
    $routes = str_replace([
      "\r\n",
      "\r",
    ], "\n", $routes);
    $routes = explode("\n", $routes);
    if (!$routes) {
      return TRUE;
    }
    $current_route = $this->currentRouteMatch
      ->getCurrentRouteMatch();
    $current_route_name = $current_route
      ->getRouteName();
    foreach ($routes as $route) {
      $negate = isset($route[0]) && $route[0] === '~';
      $route = ltrim($route, '~');
      if ($route === $current_route_name || $this
        ->evaluateRouteWildcards($route, $current_route_name)) {
        return !$negate;
      }
    }
    return FALSE;
  }

  /**
   * Evaluate wildcards in route patterns.
   *
   * @param string $route_pattern
   *   The route to evaluate for wildcards.
   * @param string $current_route_name
   *   The current request route name.
   *
   * @return bool
   *   Indication whether the provided route pattern matches the current route.
   */
  protected function evaluateRouteWildcards($route_pattern, $current_route_name) {
    if (strpos($route_pattern, '*') === FALSE) {
      return FALSE;
    }
    $escaped_route_pattern = str_replace('.', '\\.', $route_pattern);
    $route_pattern_wildcards = str_replace('*', '.*', $escaped_route_pattern);
    $regex = "{^{$route_pattern_wildcards}\$}";
    return (bool) preg_match($regex, $current_route_name);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConditionPluginBase::$executableManager protected property The condition manager to proxy execute calls through.
ConditionPluginBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
ConditionPluginBase::execute public function Executes the plugin. Overrides ExecutableInterface::execute
ConditionPluginBase::getConfiguration public function Gets this plugin's configuration. Overrides ConfigurableInterface::getConfiguration
ConditionPluginBase::isNegated public function Determines whether condition result will be negated. Overrides ConditionInterface::isNegated
ConditionPluginBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration
ConditionPluginBase::setExecutableManager public function Sets the executable manager class. Overrides ConditionInterface::setExecutableManager
ConditionPluginBase::validateConfigurationForm public function Form validation handler. Overrides PluginFormInterface::validateConfigurationForm
ContextAwarePluginAssignmentTrait::addContextAssignmentElement protected function Builds a form element for assigning a context to a given slot.
ContextAwarePluginAssignmentTrait::contextHandler protected function Wraps the context handler.
ContextAwarePluginAssignmentTrait::t abstract protected function Ensures the t() method is available.
ContextAwarePluginTrait::$context protected property The data objects representing the context of this plugin.
ContextAwarePluginTrait::$initializedContextConfig protected property Tracks whether the context has been initialized from configuration.
ContextAwarePluginTrait::getCacheContexts public function 9
ContextAwarePluginTrait::getCacheMaxAge public function 7
ContextAwarePluginTrait::getCacheTags public function 4
ContextAwarePluginTrait::getContext public function
ContextAwarePluginTrait::getContextDefinition public function
ContextAwarePluginTrait::getContextDefinitions public function
ContextAwarePluginTrait::getContextMapping public function
ContextAwarePluginTrait::getContexts public function
ContextAwarePluginTrait::getContextValue public function
ContextAwarePluginTrait::getContextValues public function
ContextAwarePluginTrait::getPluginDefinition abstract protected function 1
ContextAwarePluginTrait::setContext public function 1
ContextAwarePluginTrait::setContextMapping public function
ContextAwarePluginTrait::setContextValue public function
ContextAwarePluginTrait::validateContexts public function
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
ExecutablePluginBase::getConfig public function Gets all configuration values.
ExecutablePluginBase::getConfigDefinition public function Gets the definition of a configuration option.
ExecutablePluginBase::getConfigDefinitions public function Gets an array of definitions of available configuration options.
ExecutablePluginBase::setConfig public function Sets the value of a particular configuration option.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
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::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
RouteCondition::$currentRouteMatch protected property The CurrentRouteMatch service.
RouteCondition::buildConfigurationForm public function Form constructor. Overrides ConditionPluginBase::buildConfigurationForm
RouteCondition::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
RouteCondition::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConditionPluginBase::defaultConfiguration
RouteCondition::evaluate public function Evaluates the condition and returns TRUE or FALSE accordingly. Overrides ConditionInterface::evaluate
RouteCondition::evaluateRouteWildcards protected function Evaluate wildcards in route patterns.
RouteCondition::submitConfigurationForm public function Form submission handler. Overrides ConditionPluginBase::submitConfigurationForm
RouteCondition::summary public function Provides a human readable summary of the condition's configuration. Overrides ConditionInterface::summary
RouteCondition::__construct public function Constructs a Route condition plugin. Overrides ConditionPluginBase::__construct
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
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