InvalidationBase.php in Purge 8.3
File
src/Plugin/Purge/Invalidation/InvalidationBase.php
View source
<?php
namespace Drupal\purge\Plugin\Purge\Invalidation;
use Drupal\purge\Plugin\Purge\Invalidation\Exception\InvalidExpressionException;
use Drupal\purge\Plugin\Purge\Invalidation\Exception\InvalidStateException;
use Drupal\purge\Plugin\Purge\Invalidation\Exception\MissingExpressionException;
use Drupal\purge\Plugin\Purge\Purger\Exception\BadPluginBehaviorException;
use Symfony\Component\DependencyInjection\ContainerInterface;
abstract class InvalidationBase extends ImmutableInvalidationBase implements InvalidationInterface {
public function __construct(array $configuration, $plugin_id, $plugin_definition, $id, $expression) {
parent::__construct([], $plugin_id, $plugin_definition);
$this->id = $id;
$this->expression = $expression;
$this
->validateExpression();
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static([], $plugin_id, $plugin_definition, $configuration['id'], $configuration['expression']);
}
public function deleteProperty($key) {
if (is_null($this->context)) {
throw new \LogicException('Call ::setStateContext() before deleting properties!');
}
if (isset($this->properties[$this->context][$key])) {
unset($this->properties[$this->context][$key]);
if (empty($this->properties[$this->context])) {
unset($this->properties[$this->context]);
}
}
}
public function getId() {
return $this->id;
}
public function removeStateContext($purger_instance_id) {
if (!is_null($this->context)) {
throw new \LogicException('Cannot remove a state context in purger context.');
}
if (!isset($this->states[$purger_instance_id])) {
throw new \LogicException('Parameter $purger_instance_id is invalid!');
}
unset($this->states[$purger_instance_id]);
unset($this->properties[$purger_instance_id]);
}
public function setProperty($key, $value) {
if (is_null($this->context)) {
throw new \LogicException('Call ::setStateContext() before setting properties!');
}
if (!isset($this->properties[$this->context])) {
$this->properties[$this->context] = [];
}
$this->properties[$this->context][$key] = $value;
}
public function setState($state) {
if (!is_int($state)) {
throw new InvalidStateException('$state not an integer!');
}
if ($state < 0 || $state > 4) {
throw new InvalidStateException('$state is out of range!');
}
if (is_null($this->context)) {
throw new \LogicException('State cannot be set in NULL context!');
}
$this->states[$this->context] = $state;
}
public function setStateContext($purger_instance_id) {
$new_is_string = is_string($purger_instance_id);
$new_is_null = is_null($purger_instance_id);
if ($new_is_string && !strlen($purger_instance_id)) {
throw new \LogicException('Parameter $purger_instance_id is empty!');
}
elseif (!$new_is_string && !$new_is_null) {
throw new \LogicException('Parameter $purger_instance_id is not NULL or a non-empty string!');
}
elseif ($purger_instance_id === $this->context) {
return;
}
$old_is_string = is_string($this->context);
$both_strings = $old_is_string && $new_is_string;
$transferring = $both_strings && $this->context != $purger_instance_id;
if ($transferring || $old_is_string && $new_is_null) {
if (!in_array($this
->getState(), $this->statesAfterProcessing)) {
throw new BadPluginBehaviorException("Only NOT_SUPPORTED, PROCESSING, SUCCEEDED and FAILED are valid outbound states.");
}
}
$this->context = $purger_instance_id;
}
public function validateExpression() {
$d = $this
->getPluginDefinition();
$type = strtolower($d['label']);
if ($d['expression_required'] && is_null($this->expression)) {
throw new MissingExpressionException(sprintf("Argument required for %s invalidation.", $type));
}
elseif ($d['expression_required'] && empty($this->expression) && !$d['expression_can_be_empty']) {
throw new InvalidExpressionException(sprintf("Argument required for %s invalidation.", $type));
}
elseif (!$d['expression_required'] && !is_null($this->expression)) {
throw new InvalidExpressionException(sprintf("Argument given for %s invalidation.", $type));
}
elseif (!is_null($this->expression) && !is_string($this->expression) && $d['expression_must_be_string']) {
throw new InvalidExpressionException(sprintf("String argument required for %s invalidation.", $type));
}
}
}