PrecedingConstraintAwareValidatorTrait.php in Drupal 10
File
core/modules/ckeditor5/src/Plugin/Validation/Constraint/PrecedingConstraintAwareValidatorTrait.php
View source
<?php
declare (strict_types=1);
namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
use Drupal\Core\TypedData\Validation\ExecutionContext;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintViolationInterface;
trait PrecedingConstraintAwareValidatorTrait {
protected function hasViolationsForPrecedingConstraints(Constraint $current_constraint) : bool {
assert($this->context instanceof ExecutionContext);
$earlier_constraints = iterator_to_array($this
->getPrecedingConstraints($current_constraint));
$earlier_violations = array_filter(iterator_to_array($this->context
->getViolations()), function (ConstraintViolationInterface $violation) use ($earlier_constraints) {
return in_array($violation
->getConstraint(), $earlier_constraints);
});
return !empty($earlier_violations);
}
private function getPrecedingConstraints(Constraint $needle) : iterable {
assert($this->context instanceof ExecutionContext);
$constraints = $this->context
->getMetadata()
->getConstraints();
if (!in_array($needle, $constraints)) {
throw new \OutOfBoundsException();
}
foreach ($constraints as $constraint) {
if ($constraint != $needle) {
(yield $constraint);
}
}
}
}