You are here

abstract class ImmutableInvalidationBase in Purge 8.3

Provides base implementations the immutable invalidation object.

Immutable invalidations are not used in real-life cache invalidation, as \Drupal\purge\Plugin\Purge\Purger\PurgersServiceInterface doesn't accept them. However, as they are read-only, they are used by user interfaces to see what is in the queue without actually claiming or changing it.

Hierarchy

Expanded class hierarchy of ImmutableInvalidationBase

1 file declares its use of ImmutableInvalidationBase
PluginTestBase.php in tests/src/Kernel/Invalidation/PluginTestBase.php

File

src/Plugin/Purge/Invalidation/ImmutableInvalidationBase.php, line 15

Namespace

Drupal\purge\Plugin\Purge\Invalidation
View source
abstract class ImmutableInvalidationBase extends PluginBase implements ImmutableInvalidationInterface {

  /**
   * Unique runtime ID for this instance.
   *
   * @var int
   */
  protected $id;

  /**
   * The instance ID of the purger that is about to process this object.
   *
   * @var string|null
   */
  protected $context = NULL;

  /**
   * Mixed expression (or NULL) that describes what needs to be invalidated.
   *
   * @var mixed|null
   */
  protected $expression = NULL;

  /**
   * Purger metadata.
   *
   * This property is a associative array, each purger has its own key. Values
   * are also associated arrays, in which metadata is stored key-value.
   *
   * @var array[]
   */
  protected $properties = [];

  /**
   * Invalidation states per purger.
   *
   * Associative list of which the keys refer to purger instances and the values
   * are \Drupal\purge\Plugin\Purge\Invalidation\InvStatesInterface constants.
   *
   * @var int[]
   */
  protected $states = [];

  /**
   * Valid post-processing states.
   *
   * When a purger is done processing, it can't leave objects as FRESH. This
   * list is basically a whitelist that's checked after processing.
   *
   * @var int[]
   */
  protected $statesAfterProcessing = [
    self::NOT_SUPPORTED,
    self::PROCESSING,
    self::SUCCEEDED,
    self::FAILED,
  ];

  /**
   * {@inheritdoc}
   */
  public function __toString() {
    return is_null($this->expression) ? '' : $this->expression;
  }

  /**
   * {@inheritdoc}
   */
  public function getExpression() {
    return $this->expression;
  }

  /**
   * {@inheritdoc}
   */
  public function getProperties() {
    if (!is_null($this->context)) {
      throw new \LogicException('Cannot retrieve properties in purger context.');
    }
    return $this->properties;
  }

  /**
   * {@inheritdoc}
   */
  public function getProperty($key) {
    if (is_null($this->context)) {
      throw new \LogicException('Call ::setStateContext() before retrieving properties!');
    }
    if (isset($this->properties[$this->context][$key])) {
      return $this->properties[$this->context][$key];
    }
    return NULL;
  }

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

    // Regardless of the context, when there are no states stored we're FRESH.
    if (empty($this->states)) {
      return self::FRESH;
    }

    // In general context, we need to resolve what the invalidation state is.
    if ($this->context === NULL) {
      $totals = [
        self::SUCCEEDED => 0,
        self::NOT_SUPPORTED => 0,
      ];
      $total = count($this->states);
      foreach ($this->states as $state) {
        if (isset($totals[$state])) {
          $totals[$state]++;
        }
      }

      // If all purgers failed to support it, its unsupported.
      if ($totals[self::NOT_SUPPORTED] === $total) {
        return self::NOT_SUPPORTED;
      }
      elseif ($totals[self::SUCCEEDED] === $total) {
        return self::SUCCEEDED;
      }
      elseif (in_array(self::FAILED, $this->states)) {
        return self::FAILED;
      }
      elseif (in_array(self::PROCESSING, $this->states)) {
        return self::PROCESSING;
      }
      elseif (in_array(self::NOT_SUPPORTED, $this->states)) {
        if (in_array(self::FAILED, $this->states)) {
          return self::FAILED;
        }
        elseif (in_array(self::PROCESSING, $this->states)) {
          return self::PROCESSING;
        }
        elseif (in_array(self::SUCCEEDED, $this->states)) {
          return self::SUCCEEDED;
        }
      }
      throw new \LogicException("Invalidation state data integrity violation");
    }
    else {
      if (isset($this->states[$this->context])) {
        return $this->states[$this->context];
      }
      return self::FRESH;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getStateString() {
    $mapping = [
      self::FRESH => 'FRESH',
      self::PROCESSING => 'PROCESSING',
      self::SUCCEEDED => 'SUCCEEDED',
      self::FAILED => 'FAILED',
      self::NOT_SUPPORTED => 'NOT_SUPPORTED',
    ];
    return $mapping[$this
      ->getState()];
  }

  /**
   * {@inheritdoc}
   */
  public function getStateStringTranslated() {
    $mapping = [
      self::FRESH => $this
        ->t('New'),
      self::PROCESSING => $this
        ->t('Currently invalidating'),
      self::SUCCEEDED => $this
        ->t('Succeeded'),
      self::FAILED => $this
        ->t('Failed'),
      self::NOT_SUPPORTED => $this
        ->t('Not supported'),
    ];
    return $mapping[$this
      ->getState()];
  }

  /**
   * {@inheritdoc}
   */
  public function getStates() {
    return $this->states;
  }

  /**
   * {@inheritdoc}
   */
  public function getStateContexts() {
    if (!is_null($this->context)) {
      throw new \LogicException('Cannot retrieve state contexts in purger context.');
    }
    return array_keys($this->states);
  }

  /**
   * {@inheritdoc}
   */
  public function getType() {
    return $this
      ->getPluginId();
  }

}

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
ImmutableInvalidationBase::$context protected property The instance ID of the purger that is about to process this object.
ImmutableInvalidationBase::$expression protected property Mixed expression (or NULL) that describes what needs to be invalidated. 1
ImmutableInvalidationBase::$id protected property Unique runtime ID for this instance.
ImmutableInvalidationBase::$properties protected property Purger metadata.
ImmutableInvalidationBase::$states protected property Invalidation states per purger.
ImmutableInvalidationBase::$statesAfterProcessing protected property Valid post-processing states.
ImmutableInvalidationBase::getExpression public function Get the invalidation expression. Overrides ImmutableInvalidationInterface::getExpression 1
ImmutableInvalidationBase::getProperties public function Get all stored properties. Overrides ImmutableInvalidationInterface::getProperties
ImmutableInvalidationBase::getProperty public function Retrieve a purger specific property value. Overrides ImmutableInvalidationInterface::getProperty
ImmutableInvalidationBase::getState public function Get the current or general state of the invalidation. Overrides ImmutableInvalidationInterface::getState 1
ImmutableInvalidationBase::getStateContexts public function Get all stored state contexts. Overrides ImmutableInvalidationInterface::getStateContexts
ImmutableInvalidationBase::getStates public function Get all invalidation states. Overrides ImmutableInvalidationInterface::getStates
ImmutableInvalidationBase::getStateString public function Get the current state as string. Overrides ImmutableInvalidationInterface::getStateString 1
ImmutableInvalidationBase::getStateStringTranslated public function Get the current state as user translated string. Overrides ImmutableInvalidationInterface::getStateStringTranslated
ImmutableInvalidationBase::getType public function Get the type of invalidation. Overrides ImmutableInvalidationInterface::getType
ImmutableInvalidationBase::__toString public function Return the string expression of the invalidation. Overrides ImmutableInvalidationInterface::__toString 1
InvStatesInterface::FAILED constant The invalidation failed and will be offered again later.
InvStatesInterface::FRESH constant Invalidation is new and no processing has been attempted on it yet.
InvStatesInterface::NOT_SUPPORTED constant The type of invalidation isn't supported and will be offered again later.
InvStatesInterface::PROCESSING constant The invalidation is processing.
InvStatesInterface::SUCCEEDED constant The invalidation succeeded.
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
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.