public function GroupContentCardinalityValidator::validate in Group 8
Same name and namespace in other branches
- 2.0.x src/Plugin/Validation/Constraint/GroupContentCardinalityValidator.php \Drupal\group\Plugin\Validation\Constraint\GroupContentCardinalityValidator::validate()
File
- src/Plugin/Validation/Constraint/GroupContentCardinalityValidator.php, line 52
Class
- GroupContentCardinalityValidator
- Checks the amount of times a single content entity can be added to a group.
Namespace
Drupal\group\Plugin\Validation\Constraint
Code
public function validate($group_content, Constraint $constraint) {
if (!isset($group_content)) {
return;
}
if (!($group = $group_content
->getGroup())) {
return;
}
if (!($entity = $group_content
->getEntity())) {
return;
}
$plugin = $group_content
->getContentPlugin();
$group_cardinality = $plugin
->getGroupCardinality();
$entity_cardinality = $plugin
->getEntityCardinality();
if ($group_cardinality <= 0 && $entity_cardinality <= 0) {
return;
}
$field_name = $group_content
->getFieldDefinition('entity_id')
->getLabel();
if ($group_cardinality > 0) {
$properties = [
'type' => $plugin
->getContentTypeConfigId(),
'entity_id' => $entity
->id(),
];
$group_instances = $this->entityTypeManager
->getStorage('group_content')
->loadByProperties($properties);
$group_ids = [];
foreach ($group_instances as $instance) {
if ($instance
->getGroup()
->id() != $group
->id()) {
$group_ids[] = $instance
->getGroup()
->id();
}
}
$group_count = count(array_unique($group_ids));
if ($group_count >= $group_cardinality) {
$this->context
->buildViolation($constraint->groupMessage)
->setParameter('@field', $field_name)
->setParameter('%content', $entity
->label())
->atPath('entity_id.0')
->addViolation();
}
}
if ($entity_cardinality > 0) {
$entity_instances = $group
->getContentByEntityId($plugin
->getPluginId(), $entity
->id());
$entity_count = count($entity_instances);
if ($group_content_id = $group_content
->id()) {
foreach ($entity_instances as $instance) {
if ($instance
->id() == $group_content_id) {
$entity_count--;
break;
}
}
}
if ($entity_count >= $entity_cardinality) {
$this->context
->buildViolation($constraint->entityMessage)
->setParameter('@field', $field_name)
->setParameter('%content', $entity
->label())
->setParameter('%group', $group
->label())
->atPath('entity_id.0')
->addViolation();
}
}
}