You are here

class ScheduledTransitionsLocalTask in Scheduled Transitions 2.x

Same name and namespace in other branches
  1. 8 src/Plugin/Menu/LocalTask/ScheduledTransitionsLocalTask.php \Drupal\scheduled_transitions\Plugin\Menu\LocalTask\ScheduledTransitionsLocalTask

Provides a local task showing count of scheduled transitions for an entity.

Hierarchy

Expanded class hierarchy of ScheduledTransitionsLocalTask

2 files declare their use of ScheduledTransitionsLocalTask
ScheduledTransitionsLocalTasks.php in src/Plugin/Derivative/ScheduledTransitionsLocalTasks.php
ScheduledTransitionsLocalTaskUnitTest.php in tests/src/Unit/ScheduledTransitionsLocalTaskUnitTest.php

File

src/Plugin/Menu/LocalTask/ScheduledTransitionsLocalTask.php, line 23

Namespace

Drupal\scheduled_transitions\Plugin\Menu\LocalTask
View source
class ScheduledTransitionsLocalTask extends LocalTaskDefault implements ContainerFactoryPluginInterface {
  use StringTranslationTrait;

  /**
   * The current route match.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  protected $routeMatch;

  /**
   * Utilities for Scheduled Transitions module.
   *
   * @var \Drupal\scheduled_transitions\ScheduledTransitionsUtilityInterface
   */
  protected $scheduledTransitionsUtility;

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * The language manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface
   */
  protected $languageManager;

  /**
   * Constructs a new ScheduledTransitionsLocalTask.
   *
   * @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.
   * @param \Drupal\Core\Routing\RouteMatchInterface $routeMatch
   *   The current route match.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
   *   The entity type manager.
   * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager
   *   The language manager.
   * @param \Drupal\Core\StringTranslation\TranslationInterface $stringTranslation
   *   The string translation service.
   */
  public function __construct(array $configuration, $plugin_id, array $plugin_definition, RouteMatchInterface $routeMatch, EntityTypeManagerInterface $entityTypeManager, LanguageManagerInterface $languageManager, TranslationInterface $stringTranslation) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->routeMatch = $routeMatch;
    $this->entityTypeManager = $entityTypeManager;
    $this->languageManager = $languageManager;
    $this->stringTranslation = $stringTranslation;
  }

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

  /**
   * {@inheritdoc}
   */
  public function getTitle(Request $request = NULL) {
    $entity = $this
      ->getEntityFromRouteMatch();
    if ($entity) {
      $transitionStorage = $this->entityTypeManager
        ->getStorage('scheduled_transition');
      $count = $transitionStorage
        ->getQuery()
        ->condition('entity__target_type', $entity
        ->getEntityTypeId())
        ->condition('entity__target_id', $entity
        ->id())
        ->condition('entity_revision_langcode', $this->languageManager
        ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
        ->getId())
        ->count()
        ->execute();
      return $this
        ->t('@title (@count)', [
        '@title' => parent::getTitle($request),
        '@count' => $count,
      ]);
    }
    return NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheTags() : array {
    $tags = parent::getCacheTags();
    $entity = $this
      ->getEntityFromRouteMatch();
    if ($entity) {
      $tags[] = ScheduledTransitionsUtility::createScheduledTransitionsCacheTag($entity);
    }
    return $tags;
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheContexts() : array {
    $contexts = parent::getCacheContexts();
    $contexts[] = 'url';
    return $contexts;
  }

  /**
   * Get entity from route match.
   *
   * @return \Drupal\Core\Entity\ContentEntityInterface|null
   *   The entity from route match.
   */
  protected function getEntityFromRouteMatch() : ?ContentEntityInterface {
    [
      1 => $entityTypeId,
    ] = explode('.', $this->pluginDefinition['base_route']);

    // Get the first parameter in the route definition matching the entity type,
    // since the upcasted entity parameter could be something like {entity}.
    $parameters = $this->routeMatch
      ->getParameters()
      ->all();
    foreach ($parameters as $parameter) {
      if ($parameter instanceof ContentEntityInterface && $parameter
        ->getEntityTypeId() === $entityTypeId) {
        return $parameter;
      }
    }
    return NULL;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
LocalTaskDefault::$active protected property TRUE if this plugin is forced active for options attributes.
LocalTaskDefault::$routeProvider protected property The route provider to load routes by name.
LocalTaskDefault::getActive public function Gets the active status. Overrides LocalTaskInterface::getActive
LocalTaskDefault::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides CacheableDependencyInterface::getCacheMaxAge
LocalTaskDefault::getOptions public function Returns options for rendering a link to the local task. Overrides LocalTaskInterface::getOptions
LocalTaskDefault::getRouteName public function Get the route name from the settings. Overrides LocalTaskInterface::getRouteName
LocalTaskDefault::getRouteParameters public function Returns the route parameters needed to render a link for the local task. Overrides LocalTaskInterface::getRouteParameters 1
LocalTaskDefault::getWeight public function Returns the weight of the local task. Overrides LocalTaskInterface::getWeight
LocalTaskDefault::routeProvider protected function Returns the route provider.
LocalTaskDefault::setActive public function Sets the active status. Overrides LocalTaskInterface::setActive
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 2
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.
ScheduledTransitionsLocalTask::$entityTypeManager protected property The entity type manager.
ScheduledTransitionsLocalTask::$languageManager protected property The language manager.
ScheduledTransitionsLocalTask::$routeMatch protected property The current route match.
ScheduledTransitionsLocalTask::$scheduledTransitionsUtility protected property Utilities for Scheduled Transitions module.
ScheduledTransitionsLocalTask::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
ScheduledTransitionsLocalTask::getCacheContexts public function The cache contexts associated with this object. Overrides LocalTaskDefault::getCacheContexts
ScheduledTransitionsLocalTask::getCacheTags public function The cache tags associated with this object. Overrides LocalTaskDefault::getCacheTags
ScheduledTransitionsLocalTask::getEntityFromRouteMatch protected function Get entity from route match.
ScheduledTransitionsLocalTask::getTitle public function Returns the localized title to be shown for this tab. Overrides LocalTaskDefault::getTitle
ScheduledTransitionsLocalTask::__construct public function Constructs a new ScheduledTransitionsLocalTask. Overrides PluginBase::__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
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.