diff --git a/src/Context/ContextHandlerTrait.php b/src/Context/ContextHandlerTrait.php index 9e8e4fd4..30361770 100644 --- a/src/Context/ContextHandlerTrait.php +++ b/src/Context/ContextHandlerTrait.php @@ -288,14 +288,40 @@ protected function assertMetadata(CoreContextAwarePluginInterface $plugin, Execu protected function processData(CoreContextAwarePluginInterface $plugin, ExecutionStateInterface $rules_state) { if (isset($this->configuration['context_processors'])) { foreach ($this->configuration['context_processors'] as $context_name => $processors) { + $definition = $plugin->getContextDefinition($context_name); $value = $plugin->getContextValue($context_name); - foreach ($processors as $processor_plugin_id => $configuration) { - $data_processor = $this->processorManager->createInstance($processor_plugin_id, $configuration); - $value = $data_processor->process($value, $rules_state); + if ($definition->isMultiple()) { + foreach ($value as &$current) { + $current = $this->processValue($current, $processors, $rules_state); + } + } + else { + $value = $this->processValue($value, $processors, $rules_state); } $plugin->setContextValue($context_name, $value); } } } + /** + * Processes a single value. + * + * @param mixed $value + * The current value. + * @param array $processors + * An array mapping processor plugin IDs to their configuration. + * @param \Drupal\rules\Engine\ExecutionStateInterface $rules_state + * The current Rules execution state with context variables. + * + * @return mixed + * THe processed value. + */ + protected function processValue($value, $processors, ExecutionStateInterface $rules_state) { + foreach ($processors as $processor_plugin_id => $configuration) { + $data_processor = $this->processorManager->createInstance($processor_plugin_id, $configuration); + $value = $data_processor->process($value, $rules_state); + } + return $value; + } + } diff --git a/tests/src/Unit/RulesConditionTest.php b/tests/src/Unit/RulesConditionTest.php index 76fe67ba..e53fce93 100644 --- a/tests/src/Unit/RulesConditionTest.php +++ b/tests/src/Unit/RulesConditionTest.php @@ -88,6 +88,10 @@ public function testDataProcessor() { 'test' => $this->prophesize(ContextDefinitionInterface::class)->reveal(), ])->shouldBeCalledTimes(1); + $this->trueCondition->getContextDefinition('test')->willReturn( + $this->prophesize(ContextDefinitionInterface::class)->reveal() + )->shouldBeCalledTimes(1); + $this->trueCondition->getProvidedContextDefinitions() ->willReturn([]) ->shouldBeCalledTimes(1);