From b823d7d61311ac9de86beaae4d743e860fa21ffe Mon Sep 17 00:00:00 2001 From: Marcel Diegelmann Date: Mon, 25 Aug 2025 10:43:58 +0200 Subject: [PATCH] =?UTF-8?q?IPN-Validierung=20f=C3=BCr=20Parts=20=C3=BCbera?= =?UTF-8?q?rbeiten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Constraints/UniquePartIpnValidator.php | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Validator/Constraints/UniquePartIpnValidator.php b/src/Validator/Constraints/UniquePartIpnValidator.php index 51b5402b..019202f8 100644 --- a/src/Validator/Constraints/UniquePartIpnValidator.php +++ b/src/Validator/Constraints/UniquePartIpnValidator.php @@ -24,14 +24,27 @@ class UniquePartIpnValidator extends ConstraintValidator return; } - $repository = $this->entityManager->getRepository(Part::class); - $existingPart = $repository->findOneBy(['ipn' => $value]); + if (!$this->enforceUniqueIpn) { + return; + } - if ($existingPart) { - if ($this->enforceUniqueIpn) { - $this->context->buildViolation($constraint->message) - ->setParameter('{{ value }}', $value) - ->addViolation(); + /** @var Part $currentPart */ + $currentPart = $this->context->getObject(); + + if (!$currentPart instanceof Part) { + return; + } + + $repository = $this->entityManager->getRepository(Part::class); + $existingParts = $repository->findBy(['ipn' => $value]); + + foreach ($existingParts as $existingPart) { + if ($currentPart->getId() !== $existingPart->getId()) { + if ($this->enforceUniqueIpn) { + $this->context->buildViolation($constraint->message) + ->setParameter('{{ value }}', $value) + ->addViolation(); + } } } }