Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      9.09%  | 
      1 / 11  | 
      CRAP |         | 
      14.29%  | 
      5 / 35  | 
     
| ContextAwarePluginBase |         | 
      0.00%  | 
      0 / 1  | 
              | 
      9.09%  | 
      1 / 11  | 
      271.90 |         | 
      14.29%  | 
      5 / 35  | 
     
| __construct |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      5 / 5  | 
     |||
| createContextFromConfiguration |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| getContextDefinitions |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| getContextDefinition |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| getContexts |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| getContext |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| setContext |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| getContextValues |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| getContextValue |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 1  | 
     |||
| setContextValue |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| validateContexts |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Component\Plugin\ContextAwarePluginBase. | |
| */ | |
| namespace Drupal\Component\Plugin; | |
| use Drupal\Component\Plugin\Context\ContextInterface; | |
| use Drupal\Component\Plugin\Exception\ContextException; | |
| use Drupal\Component\Plugin\Context\Context; | |
| use Symfony\Component\Validator\ConstraintViolationList; | |
| /** | |
| * Base class for plugins that are context aware. | |
| */ | |
| abstract class ContextAwarePluginBase extends PluginBase implements ContextAwarePluginInterface { | |
| /** | |
| * The data objects representing the context of this plugin. | |
| * | |
| * @var \Drupal\Component\Plugin\Context\ContextInterface[] | |
| */ | |
| protected $context = []; | |
| /** | |
| * Overrides \Drupal\Component\Plugin\PluginBase::__construct(). | |
| * | |
| * Overrides the construction of context aware plugins to allow for | |
| * unvalidated constructor based injection of contexts. | |
| * | |
| * @param array $configuration | |
| * The plugin configuration, i.e. an array with configuration values keyed | |
| * by configuration option name. The special key 'context' may be used to | |
| * initialize the defined contexts by setting it to an array of context | |
| * values keyed by context names. | |
| * @param string $plugin_id | |
| * The plugin_id for the plugin instance. | |
| * @param mixed $plugin_definition | |
| * The plugin implementation definition. | |
| */ | |
| public function __construct(array $configuration, $plugin_id, $plugin_definition) { | |
| $context_configuration = isset($configuration['context']) ? $configuration['context'] : []; | |
| unset($configuration['context']); | |
| parent::__construct($configuration, $plugin_id, $plugin_definition); | |
| $this->contexts = $this->createContextFromConfiguration($context_configuration); | |
| } | |
| /** | |
| * Creates context objects from any context mappings in configuration. | |
| * | |
| * @param array $context_configuration | |
| * An associative array of context names and values. | |
| * | |
| * @return \Drupal\Component\Plugin\Context\ContextInterface[] | |
| * An array of context objects. | |
| */ | |
| protected function createContextFromConfiguration(array $context_configuration) { | |
| $contexts = []; | |
| foreach ($context_configuration as $key => $value) { | |
| $context_definition = $this->getContextDefinition($key); | |
| $contexts[$key] = new Context($context_definition, $value); | |
| } | |
| return $contexts; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContextDefinitions() { | |
| $definition = $this->getPluginDefinition(); | |
| return !empty($definition['context']) ? $definition['context'] : array(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContextDefinition($name) { | |
| $definition = $this->getPluginDefinition(); | |
| if (empty($definition['context'][$name])) { | |
| throw new ContextException(sprintf("The %s context is not a valid context.", $name)); | |
| } | |
| return $definition['context'][$name]; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContexts() { | |
| // Make sure all context objects are initialized. | |
| foreach ($this->getContextDefinitions() as $name => $definition) { | |
| $this->getContext($name); | |
| } | |
| return $this->context; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContext($name) { | |
| // Check for a valid context value. | |
| if (!isset($this->context[$name])) { | |
| $this->context[$name] = new Context($this->getContextDefinition($name)); | |
| } | |
| return $this->context[$name]; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setContext($name, ContextInterface $context) { | |
| $this->context[$name] = $context; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContextValues() { | |
| $values = array(); | |
| foreach ($this->getContextDefinitions() as $name => $definition) { | |
| $values[$name] = isset($this->context[$name]) ? $this->context[$name]->getContextValue() : NULL; | |
| } | |
| return $values; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getContextValue($name) { | |
| return $this->getContext($name)->getContextValue(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setContextValue($name, $value) { | |
| $this->context[$name] = new Context($this->getContextDefinition($name), $value); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateContexts() { | |
| $violations = new ConstraintViolationList(); | |
| // @todo: Implement symfony validator API to let the validator traverse | |
| // and set property paths accordingly. | |
| foreach ($this->getContexts() as $context) { | |
| $violations->addAll($context->validate()); | |
| } | |
| return $violations; | |
| } | |
| } |