public function UniqueFieldsConstraintValidator::validate in Salesforce Suite 5.0.x
Same name and namespace in other branches
- 8.4 modules/salesforce_mapping/src/Plugin/Validation/Constraint/UniqueFieldsConstraintValidator.php \Drupal\salesforce_mapping\Plugin\Validation\Constraint\UniqueFieldsConstraintValidator::validate()
- 8.3 modules/salesforce_mapping/src/Plugin/Validation/Constraint/UniqueFieldsConstraintValidator.php \Drupal\salesforce_mapping\Plugin\Validation\Constraint\UniqueFieldsConstraintValidator::validate()
File
- modules/
salesforce_mapping/ src/ Plugin/ Validation/ Constraint/ UniqueFieldsConstraintValidator.php, line 16
Class
- UniqueFieldsConstraintValidator
- Validates that a set of fields are unique for the given entity type.
Namespace
Drupal\salesforce_mapping\Plugin\Validation\ConstraintCode
public function validate($entity, Constraint $constraint) {
$entity_type = $entity
->getEntityType();
$id_key = $entity_type
->getKey('id');
$query = \Drupal::entityQuery($entity_type
->id())
->condition($id_key, (int) $entity
->id(), '<>')
->range(0, 1);
foreach ($constraint->fields as $field) {
$field_name = $field;
if (strpos($field_name, '.')) {
list($field_name, $property) = explode('.', $field_name, 2);
}
else {
$property = $entity->{$field}
->getFieldDefinition()
->getMainPropertyName();
}
$value = $entity->{$field_name}->{$property};
$query
->condition($field, $value);
}
if ($id = $query
->execute()) {
$id = reset($id);
$entity = \Drupal::entityTypeManager()
->getStorage($entity_type
->id())
->load($id);
$url = $entity
->toUrl();
$message_replacements = [
'@entity_type' => $entity_type
->getSingularLabel(),
':url' => $url
->toString(),
'@label' => $entity
->label(),
];
$this->context
->addViolation($constraint->message, $message_replacements);
}
}