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