X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/22509e0a4cfeb5125196242104c8c4b562286e33..cf8411e2fc94d52dd22e0104364f1d0d0cf3c288:/Repository/UserRepository.php diff --git a/Repository/UserRepository.php b/Repository/UserRepository.php index 9e869e1..3918551 100644 --- a/Repository/UserRepository.php +++ b/Repository/UserRepository.php @@ -11,19 +11,23 @@ namespace Rapsys\AirBundle\Repository; +use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\Query\ResultSetMapping; + use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Rapsys\AirBundle\Repository; + /** * UserRepository */ -class UserRepository extends EntityRepository { +class UserRepository extends Repository { /** * Find users with translated highest group and civility * * @return array The user ids keyed by group and pseudonym */ - public function findIndexByGroupPseudonym(): array { + public function findChoicesAsArray(): array { //Set the request $req =<< 'User' + ORDER BY g.id DESC, u.pseudonym ASC LIMIT 0, :limit ) AS a GROUP BY a.id @@ -74,10 +79,11 @@ SQL; //Process result foreach($res as $data) { //Without group or simple user - if (empty($data['g_title']) || $data['g_title'] == 'User') { - //Skip it - continue; - } + #XXX: moved in sql by removing LEFT JOIN and excluding user group + #if (empty($data['g_title']) || $data['g_title'] == 'User') { + # //Skip it + # continue; + #} //Get translated group $group = $this->translator->trans($data['g_title']); @@ -89,13 +95,57 @@ SQL; //Set data //XXX: ChoiceType use display string as key - $ret[$group][$data['pseudonym']] = $data['id']; + $ret[$group][trim($data['pseudonym'].' ('.$data['id'].')')] = intval($data['id']); } //Send result return $ret; } + /** + * Find user ids by pseudonym + * + * @param array $pseudonym The pseudonym filter + * @return array The user ids + */ + public function findIdByPseudonymAsArray(array $pseudonym): array { + //Set the request + $req =<<tableKeys, $this->tableValues, $req); + + //Get result set mapping instance + //XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php + $rsm = new ResultSetMapping(); + + //Declare all fields + //XXX: see vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php + //XXX: we don't use a result set as we want to translate group and civility + $rsm->addScalarResult('id', 'id', 'integer'); + + //Return result + return $this->_em + ->createNativeQuery($req, $rsm) + ->setParameter('pseudonym', $pseudonym) + //XXX: instead of array_column on the result + ->getResult(AbstractQuery::HYDRATE_SCALAR_COLUMN); + } + /** * Find applicant by session id * @@ -106,8 +156,8 @@ SQL; //Set the request $req =<< $id) { //Add role - $roles[$role = 'ROLE_'.strtoupper($titles[$k])] = $role; + //XXX: roles are keyes by id + $roles[$id] = 'ROLE_'.strtoupper($titles[$k]); //Add group $groups[$id] = $this->translator->trans($titles[$k]); @@ -352,14 +403,14 @@ FROM ( u.pseudonym, g.id AS g_id, g.title AS g_title - FROM RapsysAirBundle:User AS u - JOIN RapsysAirBundle:UserGroup AS gu ON (gu.user_id = u.id) - JOIN RapsysAirBundle:Group AS g ON (g.id = gu.group_id) + FROM Rapsys\AirBundle\Entity\User AS u + JOIN Rapsys\AirBundle\Entity\UserGroup AS gu ON (gu.user_id = u.id) + JOIN Rapsys\AirBundle\Entity\Group AS g ON (g.id = gu.group_id) ORDER BY NULL LIMIT 0, :limit ) AS c - LEFT JOIN RapsysAirBundle:Application AS a ON (a.user_id = c.id) - LEFT JOIN RapsysAirBundle:Dance AS d ON (d.id = a.dance_id) + LEFT JOIN Rapsys\AirBundle\Entity\Application AS a ON (a.user_id = c.id) + LEFT JOIN Rapsys\AirBundle\Entity\Dance AS d ON (d.id = a.dance_id) GROUP BY d.id ORDER BY NULL LIMIT 0, :limit