diff --git a/src/Bundle/ChillMainBundle/Entity/AddressReference.php b/src/Bundle/ChillMainBundle/Entity/AddressReference.php index d13de4de9..2a50932f4 100644 --- a/src/Bundle/ChillMainBundle/Entity/AddressReference.php +++ b/src/Bundle/ChillMainBundle/Entity/AddressReference.php @@ -7,7 +7,7 @@ use Chill\MainBundle\Doctrine\Model\Point; use Symfony\Component\Serializer\Annotation\Groups; /** - * @ORM\Entity() + * @ORM\Entity * @ORM\Table(name="chill_main_address_reference") * @ORM\HasLifecycleCallbacks() */ diff --git a/src/Bundle/ChillMainBundle/Entity/Center.php b/src/Bundle/ChillMainBundle/Entity/Center.php index b3792dab9..2d87a20ab 100644 --- a/src/Bundle/ChillMainBundle/Entity/Center.php +++ b/src/Bundle/ChillMainBundle/Entity/Center.php @@ -25,7 +25,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; /** - * @ORM\Entity(repositoryClass="Chill\MainBundle\Repository\CenterRepository") + * @ORM\Entity * @ORM\Table(name="centers") * * @author Julien Fastré diff --git a/src/Bundle/ChillMainBundle/Entity/PostalCode.php b/src/Bundle/ChillMainBundle/Entity/PostalCode.php index a70a955b8..433ce58bf 100644 --- a/src/Bundle/ChillMainBundle/Entity/PostalCode.php +++ b/src/Bundle/ChillMainBundle/Entity/PostalCode.php @@ -8,7 +8,7 @@ use Symfony\Component\Serializer\Annotation\Groups; /** * PostalCode * - * @ORM\Entity(repositoryClass="Chill\MainBundle\Repository\PostalCodeRepository") + * @ORM\Entity * @ORM\Table( * name="chill_main_postal_code", * indexes={@ORM\Index( diff --git a/src/Bundle/ChillMainBundle/Entity/User.php b/src/Bundle/ChillMainBundle/Entity/User.php index 11d168f84..76bb7b54d 100644 --- a/src/Bundle/ChillMainBundle/Entity/User.php +++ b/src/Bundle/ChillMainBundle/Entity/User.php @@ -12,7 +12,7 @@ use Symfony\Component\Serializer\Annotation\DiscriminatorMap; /** * User * - * @ORM\Entity(repositoryClass="Chill\MainBundle\Repository\UserRepository") + * @ORM\Entity * @ORM\Table(name="users") * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="acl_cache_region") * @DiscriminatorMap(typeProperty="type", mapping={ diff --git a/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php b/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php index 208151420..f040446b3 100644 --- a/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php @@ -1,50 +1,50 @@ repository = $entityManager->getRepository(AddressReference::class); } - // /** - // * @return AddressReference[] Returns an array of AddressReference objects - // */ - /* - public function findByExampleField($value) + public function find($id, $lockMode = null, $lockVersion = null): ?AddressReference { - return $this->createQueryBuilder('a') - ->andWhere('a.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('a.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; + return $this->repository->find($id, $lockMode, $lockVersion); } - */ - /* - public function findOneBySomeField($value): ?AddressReference + public function findOneBy(array $criteria, array $orderBy = null): ?AddressReference { - return $this->createQueryBuilder('a') - ->andWhere('a.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; + return $this->repository->findOneBy($criteria, $orderBy); + } + + /** + * @return AddressReference[] + */ + public function findAll(): array + { + return $this->repository->findAll(); + } + + /** + * @return AddressReference[] + */ + public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null): array + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + public function getClassName() { + return AddressReference::class; } - */ } diff --git a/src/Bundle/ChillMainBundle/Repository/CenterRepository.php b/src/Bundle/ChillMainBundle/Repository/CenterRepository.php index 05a439bfd..3cf8cf38b 100644 --- a/src/Bundle/ChillMainBundle/Repository/CenterRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/CenterRepository.php @@ -1,27 +1,50 @@ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ + +declare(strict_types=1); + namespace Chill\MainBundle\Repository; -/** - * - * - */ -class CenterRepository extends \Doctrine\ORM\EntityRepository +use Chill\MainBundle\Entity\Center; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; +use Doctrine\Persistence\ObjectRepository; + +final class CenterRepository implements ObjectRepository { - + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(Center::class); + } + + public function find($id, $lockMode = null, $lockVersion = null): ?Center + { + return $this->repository->find($id, $lockMode, $lockVersion); + } + + public function findOneBy(array $criteria, array $orderBy = null): ?Center + { + return $this->repository->findOneBy($criteria, $orderBy); + } + + /** + * @return Center[] + */ + public function findAll(): array + { + return $this->repository->findAll(); + } + + /** + * @return Center[] + */ + public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null): array + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + public function getClassName() { + return Center::class; + } } diff --git a/src/Bundle/ChillMainBundle/Repository/PostalCodeRepository.php b/src/Bundle/ChillMainBundle/Repository/PostalCodeRepository.php index 5b8ab8423..0087c9aa9 100644 --- a/src/Bundle/ChillMainBundle/Repository/PostalCodeRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/PostalCodeRepository.php @@ -1,28 +1,50 @@ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ + +declare(strict_types=1); + namespace Chill\MainBundle\Repository; -/** - * - * - * @author Julien Fastré - */ -class PostalCodeRepository extends \Doctrine\ORM\EntityRepository +use Chill\MainBundle\Entity\PostalCode; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; +use Doctrine\Persistence\ObjectRepository; + +final class PostalCodeRepository implements ObjectRepository { - + private EntityRepository $repository; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->repository = $entityManager->getRepository(PostalCode::class); + } + + public function find($id, $lockMode = null, $lockVersion = null): ?PostalCode + { + return $this->repository->find($id, $lockMode, $lockVersion); + } + + public function findOneBy(array $criteria, array $orderBy = null): ?PostalCode + { + return $this->repository->findOneBy($criteria, $orderBy); + } + + /** + * @return PostalCode[] + */ + public function findAll(): array + { + return $this->repository->findAll(); + } + + /** + * @return PostalCode[] + */ + public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null): array + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + public function getClassName() { + return PostalCode::class; + } } diff --git a/src/Bundle/ChillMainBundle/Repository/UserRepository.php b/src/Bundle/ChillMainBundle/Repository/UserRepository.php index 51bcda6eb..e5427325a 100644 --- a/src/Bundle/ChillMainBundle/Repository/UserRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/UserRepository.php @@ -1,121 +1,148 @@ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ + +declare(strict_types=1); + namespace Chill\MainBundle\Repository; -use Chill\MainBundle\Entity\GroupCenter; use Chill\MainBundle\Entity\User; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\QueryBuilder; +use Doctrine\Persistence\ObjectRepository; -/** - * - * - */ -class UserRepository extends \Doctrine\ORM\EntityRepository +final class UserRepository implements ObjectRepository { - public function countByUsernameOrEmail($pattern) + private EntityRepository $repository; + + private EntityManagerInterface $entityManager; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->entityManager = $entityManager; + $this->repository = $entityManager->getRepository(User::class); + } + + public function find($id, $lockMode = null, $lockVersion = null): ?User + { + return $this->repository->find($id, $lockMode, $lockVersion); + } + + public function findOneBy(array $criteria, array $orderBy = null): ?User + { + return $this->repository->findOneBy($criteria, $orderBy); + } + + /** + * @return User[] + */ + public function findAll(): array + { + return $this->repository->findAll(); + } + + /** + * @return User[] + */ + public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null): array + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + public function getClassName() { + return User::class; + } + + public function countByUsernameOrEmail(string $pattern): int { $qb = $this->queryByUsernameOrEmail($pattern); - + $qb->select('COUNT(u)'); - + return (int) $qb->getQuery()->getSingleScalarResult(); } - - public function findByUsernameOrEmail($pattern) + + public function findByUsernameOrEmail(string $pattern) { $qb = $this->queryByUsernameOrEmail($pattern); - + return $qb->getQuery()->getResult(); } - - public function findOneByUsernameOrEmail($pattern) + + public function findOneByUsernameOrEmail(string $pattern) { $qb = $this->queryByUsernameOrEmail($pattern); - + return $qb->getQuery()->getSingleResult(); } - + /** * Get the users having a specific flags - * - * If provided, only the users amongst "filtered users" are searched. This - * allows to make a first search amongst users based on role and center + * + * If provided, only the users amongst "filtered users" are searched. This + * allows to make a first search amongst users based on role and center * and, then filter those users having some flags. - * + * * @param \Chill\MainBundle\Entity\User[] $amongstUsers */ - public function findUsersHavingFlags($flag, $amongstUsers = []) + public function findUsersHavingFlags($flag, array $amongstUsers = []): array { - $gcs = $this->_em->createQuery("SELECT DISTINCT gc " - . "FROM ".GroupCenter::class." gc " - . "JOIN gc.permissionsGroup pg " - . "WHERE " - . "JSONB_EXISTS_IN_ARRAY(pg.flags, :flag) = :true ") + $gcs = $this + ->entityManager + ->createQuery( + "SELECT DISTINCT gc " . + "FROM ".GroupCenter::class." gc " . + "JOIN gc.permissionsGroup pg " . + "WHERE " . + "JSONB_EXISTS_IN_ARRAY(pg.flags, :flag) = :true " + ) ->setParameters([ 'true' => true, 'flag' => $flag ]) ->getResult(); - + if (count($gcs) === 0) { return []; } - - $qb = $this->_em->createQueryBuilder(); + + $qb = $this->entityManager->createQueryBuilder(); $qb ->select('DISTINCT u') ->from(User::class, 'u') - ->where("u.enabled = 'TRUE'") - ; - + ->where("u.enabled = 'TRUE'"); + $orx = $qb->expr()->orX(); + foreach($gcs as $i => $gc) { - $orx->add(':gc_'.$i.' MEMBER OF u.groupCenters'); - $qb->setParameter('gc_'.$i, $gc); + $orx->add(':gc_' . $i . ' MEMBER OF u.groupCenters'); + $qb->setParameter('gc_' . $i, $gc); } - + $qb->andWhere($orx); - - if (count($amongstUsers) > 0) { + + if ($amongstUsers !== []) { $qb ->andWhere($qb->expr()->in('u', ':amongstUsers')) - ->setParameter('amongstUsers', $amongstUsers) - ; + ->setParameter('amongstUsers', $amongstUsers); } - + return $qb->getQuery()->getResult(); } - - protected function queryByUsernameOrEmail($pattern) + + protected function queryByUsernameOrEmail(string $pattern): QueryBuilder { - $qb = $this->createQueryBuilder('u'); - + $qb = $this->entityManager->createQueryBuilder('u'); + $searchByPattern = $qb->expr()->orX(); - + $searchByPattern ->add($qb->expr()->eq('u.usernameCanonical', 'LOWER(UNACCENT(:pattern))')) - ->add($qb->expr()->eq('u.emailCanonical', 'LOWER(UNACCENT(:pattern))')) - ; - + ->add($qb->expr()->eq('u.emailCanonical', 'LOWER(UNACCENT(:pattern))')); + $qb ->where($searchByPattern) - ->setParameter('pattern', $pattern) - ; - + ->setParameter('pattern', $pattern); + return $qb; } }