Beispiel #1
0
 /**
  * {@inheritdoc}
  */
 public function checkIntegrity(ExecutionMetadataStateInterface $metadata_state)
 {
     $violation_list = new IntegrityViolationList();
     if (empty($this->configuration['list'])) {
         $violation_list->addViolationWithMessage($this->t('List variable is missing.'));
         return $violation_list;
     }
     try {
         $list_definition = $metadata_state->fetchDefinitionByPropertyPath($this->configuration['list']);
     } catch (RulesIntegrityException $e) {
         $violation_list->addViolationWithMessage($this->t('List variable %list does not exist. @message', ['%list' => $this->configuration['list'], '@message' => $e->getMessage()]));
         return $violation_list;
     }
     $list_item_name = isset($this->configuration['list_item']) ? $this->configuration['list_item'] : 'list_item';
     if ($metadata_state->hasDataDefinition($list_item_name)) {
         $violation_list->addViolationWithMessage($this->t('List item name %name conflicts with an existing variable.', ['%name' => $list_item_name]));
         return $violation_list;
     }
     if ($list_definition instanceof ListDataDefinitionInterface) {
         $list_item_definition = $list_definition->getItemDefinition();
         $metadata_state->setDataDefinition($list_item_name, $list_item_definition);
         $violation_list = parent::checkIntegrity($metadata_state);
         // Remove the list item variable after the loop, it is out of scope now.
         $metadata_state->removeDataDefinition($list_item_name);
         return $violation_list;
     }
     $violation_list->addViolationWithMessage($this->t('The data type of list variable %list is not a list.', ['%list' => $this->configuration['list']]));
     return $violation_list;
 }