From 0a0a7e7c2459a5824cc4b3a5bb6adbd00ec35468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 18 Jul 2018 16:06:00 +0200 Subject: [PATCH] fix error when creating user with username / email validation --- .../Validator/UserUniqueEmailAndUsername.php | 62 +++++++++++++------ 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/Validation/Validator/UserUniqueEmailAndUsername.php b/Validation/Validator/UserUniqueEmailAndUsername.php index 637cdc563..0dafa0b98 100644 --- a/Validation/Validator/UserUniqueEmailAndUsername.php +++ b/Validation/Validator/UserUniqueEmailAndUsername.php @@ -48,16 +48,27 @@ class UserUniqueEmailAndUsername extends ConstraintValidator . "only on class ".User::class); } - $countUsersByUsername = $this->em->createQuery( - sprintf( - "SELECT COUNT(u) FROM %s u " - . "WHERE u.usernameCanonical = LOWER(UNACCENT(:username)) " - . "AND u != :user", - User::class) - ) - ->setParameter('username', $value->getUsername()) - ->setParameter('user', $value) - ->getSingleScalarResult(); + if ($value->getId() !== null) { + $countUsersByUsername = $this->em->createQuery( + sprintf( + "SELECT COUNT(u) FROM %s u " + . "WHERE u.usernameCanonical = LOWER(UNACCENT(:username)) " + . "AND u != :user", + User::class) + ) + ->setParameter('username', $value->getUsername()) + ->setParameter('user', $value) + ->getSingleScalarResult(); + } else { + $countUsersByUsername = $this->em->createQuery( + sprintf( + "SELECT COUNT(u) FROM %s u " + . "WHERE u.usernameCanonical = LOWER(UNACCENT(:username)) ", + User::class) + ) + ->setParameter('username', $value->getUsername()) + ->getSingleScalarResult(); + } if ($countUsersByUsername > 0) { $this->context @@ -70,16 +81,27 @@ class UserUniqueEmailAndUsername extends ConstraintValidator ; } - $countUsersByEmail = $this->em->createQuery( - sprintf( - "SELECT COUNT(u) FROM %s u " - . "WHERE u.emailCanonical = LOWER(UNACCENT(:email)) " - . "AND u != :user", - User::class) - ) - ->setParameter('email', $value->getEmail()) - ->setParameter('user', $value) - ->getSingleScalarResult(); + if ($value->getId() !== null) { + $countUsersByEmail = $this->em->createQuery( + sprintf( + "SELECT COUNT(u) FROM %s u " + . "WHERE u.emailCanonical = LOWER(UNACCENT(:email)) " + . "AND u != :user", + User::class) + ) + ->setParameter('email', $value->getEmail()) + ->setParameter('user', $value) + ->getSingleScalarResult(); + } else { + $countUsersByEmail = $this->em->createQuery( + sprintf( + "SELECT COUNT(u) FROM %s u " + . "WHERE u.emailCanonical = LOWER(UNACCENT(:email))", + User::class) + ) + ->setParameter('email', $value->getEmail()) + ->getSingleScalarResult(); + } if ($countUsersByEmail > 0) { $this->context