diff --git a/core/lib/Drupal/Core/Executable/ExecutableException.php b/core/lib/Drupal/Core/Executable/ExecutableException.php index 1f105c4..7ea5d98 100644 --- a/core/lib/Drupal/Core/Executable/ExecutableException.php +++ b/core/lib/Drupal/Core/Executable/ExecutableException.php @@ -1,7 +1,8 @@ executableManager = $executableManager; + } + + /** + * Implements \Drupal\Core\Executable\ExecutableInterface::getExecutableManager(). + */ + public function getExecutableManager() { + return $this->executableManager; + } + + /** * Gets all configuration values. * * @see \Drupal\Component\Plugin\PluginBase::$configuration @@ -76,10 +99,5 @@ public function setConfig($key, $value) { return $this; } - /** - * Implements \Drupal\Core\Executable\ExecutableInterface::execute(). - */ - abstract public function execute(); - } diff --git a/core/modules/condition/lib/Drupal/condition/Plugin/ConditionInterface.php b/core/modules/condition/lib/Drupal/condition/Plugin/ConditionInterface.php index 1dd7e5f..8a4a3fc 100644 --- a/core/modules/condition/lib/Drupal/condition/Plugin/ConditionInterface.php +++ b/core/modules/condition/lib/Drupal/condition/Plugin/ConditionInterface.php @@ -15,6 +15,25 @@ interface ConditionInterface extends ExecutableInterface { /** + * Sets whether the condition result should be negated. + * + * @param bool $boolean + * Whether to negate the result of the condition. + * + * @return \Drupal\condition\Plugin\ConditionInterface. + * The condition object for chaining. + */ + public function setNegate($boolean); + + /** + * Determines whether condition result will be negaeted. + * + * @return boolean + * Whether the condition result will be negated. + */ + public function isNegated(); + + /** * Constructs the condition configuration form. * * This method allows base implementations to add a generic configuration diff --git a/core/modules/condition/lib/Drupal/condition/Plugin/ConditionPluginBase.php b/core/modules/condition/lib/Drupal/condition/Plugin/ConditionPluginBase.php index 12bb9b9..4b9e485 100644 --- a/core/modules/condition/lib/Drupal/condition/Plugin/ConditionPluginBase.php +++ b/core/modules/condition/lib/Drupal/condition/Plugin/ConditionPluginBase.php @@ -15,6 +15,21 @@ abstract class ConditionPluginBase extends ExecutablePluginBase implements ConditionInterface { /** + * Implements Drupal\condition\Plugin\ConditionInterface::setNegate(). + */ + public function setNegate($boolean) { + $this->configuration['negate'] = $boolean; + return $this; + } + + /** + * Implements Drupal\condition\Plugin\ConditionInterface::isNegated(). + */ + public function isNegated() { + return !empty($this->configuration['negate']); + } + + /** * Implements Drupal\condition\Plugin\ConditionInterface::form(). */ public function form($form, &$form_state) { @@ -39,10 +54,7 @@ public function submit($form, &$form_state) { * Implements ExecutablePluginBase::execute(). */ public function execute() { - if (!empty($this->configuration['negate'])) { - return !$this->evaluate(); - } - return $this->evaluate(); + return $this->executableManager->execute($this); } } diff --git a/core/modules/condition/lib/Drupal/condition/Plugin/Type/ConditionManager.php b/core/modules/condition/lib/Drupal/condition/Plugin/Type/ConditionManager.php index b0da81f..2879083 100644 --- a/core/modules/condition/lib/Drupal/condition/Plugin/Type/ConditionManager.php +++ b/core/modules/condition/lib/Drupal/condition/Plugin/Type/ConditionManager.php @@ -9,6 +9,8 @@ use Drupal\Component\Plugin\PluginManagerBase; use Drupal\Component\Plugin\Factory\DefaultFactory; +use Drupal\Core\Executable\ExecutableInterface; +use Drupal\Core\Executable\ExecutableManagerInterface; use Drupal\Core\Plugin\Discovery\AlterDecorator; use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery; use Drupal\Core\Plugin\Discovery\CacheDecorator; @@ -17,7 +19,7 @@ /** * A plugin manager for condition plugins. */ -class ConditionManager extends PluginManagerBase { +class ConditionManager extends PluginManagerBase implements ExecutableManagerInterface { /** * The plugin manager for processor plugins. @@ -27,7 +29,7 @@ class ConditionManager extends PluginManagerBase { protected $processorManager; /** - * Constructs aa ConditionManager object. + * Constructs a ConditionManager object. */ public function __construct(ProcessorManager $process_manager) { $this->processorManager = $process_manager; @@ -39,11 +41,21 @@ public function __construct(ProcessorManager $process_manager) { } /** - * Override of Drupal\Component\Plugin\PluginManagerBase::createInstance(). + * Override of \Drupal\Component\Plugin\PluginManagerBase::createInstance(). */ public function createInstance($plugin_id, array $configuration = array()) { $plugin = $this->factory->createInstance($plugin_id, $configuration); - return $plugin->setProcessorManager($this->processorManager); + $plugin->setProcessorManager($this->processorManager); + $plugin->setExecutableManager($this); + return $plugin; + } + + /** + * Implements \Drupal\Core\Executable\ExecutableManagerInterface::execute() + */ + public function execute(ExecutableInterface $condition) { + $result = $condition->evaluate(); + return $condition->isNegated() ? !$result : $result; } }