Chris@0: contexts = $this->createContextFromConfiguration($context_configuration); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Creates context objects from any context mappings in configuration. Chris@0: * Chris@0: * @param array $context_configuration Chris@0: * An associative array of context names and values. Chris@0: * Chris@0: * @return \Drupal\Component\Plugin\Context\ContextInterface[] Chris@0: * An array of context objects. Chris@0: */ Chris@0: protected function createContextFromConfiguration(array $context_configuration) { Chris@0: $contexts = []; Chris@0: foreach ($context_configuration as $key => $value) { Chris@0: $context_definition = $this->getContextDefinition($key); Chris@0: $contexts[$key] = new Context($context_definition, $value); Chris@0: } Chris@0: return $contexts; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContextDefinitions() { Chris@0: $definition = $this->getPluginDefinition(); Chris@17: if ($definition instanceof ContextAwarePluginDefinitionInterface) { Chris@17: return $definition->getContextDefinitions(); Chris@17: } Chris@17: else { Chris@18: return !empty($definition['context_definitions']) ? $definition['context_definitions'] : []; Chris@17: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContextDefinition($name) { Chris@0: $definition = $this->getPluginDefinition(); Chris@17: if ($definition instanceof ContextAwarePluginDefinitionInterface) { Chris@17: if ($definition->hasContextDefinition($name)) { Chris@17: return $definition->getContextDefinition($name); Chris@17: } Chris@0: } Chris@18: elseif (!empty($definition['context_definitions'][$name])) { Chris@18: return $definition['context_definitions'][$name]; Chris@17: } Chris@17: throw new ContextException(sprintf("The %s context is not a valid context.", $name)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContexts() { Chris@0: // Make sure all context objects are initialized. Chris@0: foreach ($this->getContextDefinitions() as $name => $definition) { Chris@0: $this->getContext($name); Chris@0: } Chris@0: return $this->context; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContext($name) { Chris@0: // Check for a valid context value. Chris@0: if (!isset($this->context[$name])) { Chris@0: $this->context[$name] = new Context($this->getContextDefinition($name)); Chris@0: } Chris@0: return $this->context[$name]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setContext($name, ContextInterface $context) { Chris@0: $this->context[$name] = $context; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContextValues() { Chris@0: $values = []; Chris@0: foreach ($this->getContextDefinitions() as $name => $definition) { Chris@0: $values[$name] = isset($this->context[$name]) ? $this->context[$name]->getContextValue() : NULL; Chris@0: } Chris@0: return $values; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getContextValue($name) { Chris@0: return $this->getContext($name)->getContextValue(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setContextValue($name, $value) { Chris@0: $this->context[$name] = new Context($this->getContextDefinition($name), $value); Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function validateContexts() { Chris@0: $violations = new ConstraintViolationList(); Chris@0: // @todo: Implement symfony validator API to let the validator traverse Chris@0: // and set property paths accordingly. Chris@0: Chris@0: foreach ($this->getContexts() as $context) { Chris@0: $violations->addAll($context->validate()); Chris@0: } Chris@0: return $violations; Chris@0: } Chris@0: Chris@0: }