diff --git a/src/Engine/RulesComponent.php b/src/Engine/RulesComponent.php index 2daf03cfb01c38f8b490f13afac1e4bf04c5949d..e67fb292ca8d12f9e85e20b267029016c3c331be 100644 --- a/src/Engine/RulesComponent.php +++ b/src/Engine/RulesComponent.php @@ -65,21 +65,26 @@ class RulesComponent { */ public static function createFromConfiguration(array $configuration) { $configuration += [ - 'context_definitions' => [], - 'provided_context_definitions' => [], + 'context_definitions' => [], + 'provided_context_definitions' => [], ]; + // @todo Can we improve this use dependency injection somehow? - $expression_manager = \Drupal::service('plugin.manager.rules_expression'); - $expression = $expression_manager->createInstance($configuration['expression']['id'], $configuration['expression']); + $expression_manager = \Drupal::service('plugin.manager.rules_expression'); + // Check if $configuration['expression'] exists and is an array before using it. + $expressionConfig = isset($configuration['expression']) && is_array($configuration['expression']) ? $configuration['expression'] : []; + $expression = $expression_manager->createInstance($expressionConfig['id'], $expressionConfig); $component = static::create($expression); foreach ($configuration['context_definitions'] as $name => $definition) { - $component->addContextDefinition($name, ContextDefinition::createFromArray($definition)); + $component->addContextDefinition($name, ContextDefinition::createFromArray($definition)); } foreach ($configuration['provided_context_definitions'] as $name => $definition) { - $component->provideContext($name); + $component->provideContext($name); } + return $component; - } +} + /** * Constructs the object.