X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/534a3f9073c43600f072545690bad6eb82f766f6..10f7eb47b94df348b8bc18fe51ad1302b6664054:/Repository/SessionRepository.php diff --git a/Repository/SessionRepository.php b/Repository/SessionRepository.php index d695bcd..5d3522d 100644 --- a/Repository/SessionRepository.php +++ b/Repository/SessionRepository.php @@ -142,6 +142,121 @@ SQL; ->getOneOrNullResult(); } + /** + * Fetch sessions by date period + * + * @param $period The date period + * @param $locale The locale + */ + public function fetchAllByDatePeriod($period, $locale = null) { + //Get entity manager + $em = $this->getEntityManager(); + + //Get quote strategy + $qs = $em->getConfiguration()->getQuoteStrategy(); + $dp = $em->getConnection()->getDatabasePlatform(); + + //Get quoted table names + //XXX: this allow to make this code table name independent + $tables = [ + 'RapsysAirBundle:Application' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Application'), $dp), + 'RapsysAirBundle:Location' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Location'), $dp), + 'RapsysAirBundle:Session' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Session'), $dp), + 'RapsysAirBundle:Snippet' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Snippet'), $dp), + 'RapsysAirBundle:User' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:User'), $dp), + ':afterid' => 4, + "\t" => '', + "\n" => ' ' + ]; + + //Set the request + //TODO: exclude opera and others ? + $req = <<addScalarResult('id', 'id', 'integer') + ->addScalarResult('date', 'date', 'date') + ->addScalarResult('locked', 'locked', 'datetime') + ->addScalarResult('updated', 'updated', 'datetime') + ->addScalarResult('start', 'start', 'datetime') + ->addScalarResult('stop', 'stop', 'datetime') + ->addScalarResult('l_id', 'l_id', 'integer') + ->addScalarResult('l_address', 'l_address', 'string') + ->addScalarResult('l_zipcode', 'l_zipcode', 'string') + ->addScalarResult('l_city', 'l_city', 'string') + ->addScalarResult('l_latitude', 'l_latitude', 'float') + ->addScalarResult('l_longitude', 'l_longitude', 'float') + ->addScalarResult('l_short', 'l_short', 'string') + ->addScalarResult('l_title', 'l_title', 'string') + ->addScalarResult('t_id', 't_id', 'integer') + ->addScalarResult('t_title', 't_title', 'string') + ->addScalarResult('a_id', 'a_id', 'integer') + ->addScalarResult('a_canceled', 'a_canceled', 'datetime') + ->addScalarResult('au_id', 'au_id', 'integer') + ->addScalarResult('au_pseudonym', 'au_pseudonym', 'string') + ->addScalarResult('p_id', 'p_id', 'integer') + ->addScalarResult('p_description', 'p_description', 'string') + ->addScalarResult('p_class', 'p_class', 'string') + ->addScalarResult('p_contact', 'p_contact', 'string') + ->addScalarResult('p_donate', 'p_donate', 'string') + ->addScalarResult('p_link', 'p_link', 'string') + ->addScalarResult('p_profile', 'p_profile', 'string') + ->addIndexByScalar('id'); + + //Fetch result + $res = $em + ->createNativeQuery($req, $rsm) + ->setParameter('begin', $period->getStartDate()) + ->setParameter('end', $period->getEndDate()) + ->setParameter('locale', $locale); + + //Return result + return $res->getResult(); + } + /** * Fetch session by id * @@ -163,7 +278,6 @@ SQL; 'RapsysAirBundle:Application' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Application'), $dp), 'RapsysAirBundle:Group' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Group'), $dp), 'RapsysAirBundle:GroupUser' => $qs->getJoinTableName($em->getClassMetadata('RapsysAirBundle:User')->getAssociationMapping('groups'), $em->getClassMetadata('RapsysAirBundle:User'), $dp), - 'RapsysAirBundle:Link' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Link'), $dp), 'RapsysAirBundle:Location' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Location'), $dp), 'RapsysAirBundle:Session' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Session'), $dp), 'RapsysAirBundle:Snippet' => $qs->getTableName($em->getClassMetadata('RapsysAirBundle:Snippet'), $dp), @@ -207,12 +321,16 @@ SELECT s.slot_id AS t_id, t.title AS t_title, s.application_id AS a_id, + a.canceled AS a_canceled, a.user_id AS au_id, au.pseudonym AS au_pseudonym, p.id AS p_id, p.description AS p_description, - GROUP_CONCAT(i.type ORDER BY i.id SEPARATOR "\\n") AS i_type, - GROUP_CONCAT(i.url ORDER BY i.id SEPARATOR "\\n") AS i_url, + p.class AS p_class, + p.contact AS p_contact, + p.donate AS p_donate, + p.link AS p_link, + p.profile AS p_profile, GROUP_CONCAT(sa.id ORDER BY sa.user_id SEPARATOR "\\n") AS sa_id, GROUP_CONCAT(IFNULL(sa.score, 'NULL') ORDER BY sa.user_id SEPARATOR "\\n") AS sa_score, GROUP_CONCAT(sa.created ORDER BY sa.user_id SEPARATOR "\\n") AS sa_created, @@ -226,7 +344,6 @@ JOIN RapsysAirBundle:Slot AS t ON (t.id = s.slot_id) LEFT JOIN RapsysAirBundle:Application AS a ON (a.id = s.application_id) LEFT JOIN RapsysAirBundle:User AS au ON (au.id = a.user_id) LEFT JOIN RapsysAirBundle:Snippet AS p ON (p.location_id = s.location_id AND p.user_id = a.user_id AND p.locale = :locale) -LEFT JOIN RapsysAirBundle:Link AS i ON (i.user_id = a.user_id) LEFT JOIN RapsysAirBundle:Application AS sa ON (sa.session_id = s.id) LEFT JOIN RapsysAirBundle:User AS sau ON (sau.id = sa.user_id) WHERE s.id = :sid @@ -271,12 +388,16 @@ SQL; ->addScalarResult('t_id', 't_id', 'integer') ->addScalarResult('t_title', 't_title', 'string') ->addScalarResult('a_id', 'a_id', 'integer') + ->addScalarResult('a_canceled', 'a_canceled', 'datetime') ->addScalarResult('au_id', 'au_id', 'integer') ->addScalarResult('au_pseudonym', 'au_pseudonym', 'string') - ->addScalarResult('i_type', 'i_type', 'string') - ->addScalarResult('i_url', 'i_url', 'string') ->addScalarResult('p_id', 'p_id', 'integer') ->addScalarResult('p_description', 'p_description', 'text') + ->addScalarResult('p_class', 'p_class', 'text') + ->addScalarResult('p_contact', 'p_contact', 'text') + ->addScalarResult('p_donate', 'p_donate', 'text') + ->addScalarResult('p_link', 'p_link', 'text') + ->addScalarResult('p_profile', 'p_profile', 'text') //XXX: is a string because of \n separator ->addScalarResult('sa_id', 'sa_id', 'string') //XXX: is a string because of \n separator @@ -338,7 +459,7 @@ SQL; //When granted is set if (empty($granted)) { - //Set application and user as optional + //Set application and user as optional $grantSql = 'LEFT '; } @@ -369,6 +490,7 @@ SELECT s.slot_id AS t_id, t.title AS t_title, s.application_id AS a_id, + a.canceled AS a_canceled, a.user_id AS au_id, au.pseudonym AS au_pseudonym, GROUP_CONCAT(sa.user_id ORDER BY sa.user_id SEPARATOR "\\n") AS sau_id, @@ -410,6 +532,7 @@ SQL; ->addScalarResult('l_short', 'l_short', 'string') ->addScalarResult('l_title', 'l_title', 'string') ->addScalarResult('a_id', 'a_id', 'integer') + ->addScalarResult('a_canceled', 'a_canceled', 'datetime') ->addScalarResult('au_id', 'au_id', 'integer') ->addScalarResult('au_pseudonym', 'au_pseudonym', 'string') //XXX: is a string because of \n separator @@ -488,7 +611,11 @@ SQL; $class = []; if (!empty($session['a_id'])) { $applications = [ $session['au_id'] => $session['au_pseudonym'] ]; - $class[] = 'granted'; + if (!empty($session['a_canceled'])) { + $class[] = 'canceled'; + } else { + $class[] = 'granted'; + } } elseif ($count > 1) { $class[] = 'disputed'; } elseif (!empty($session['locked'])) { @@ -574,7 +701,7 @@ SQL; } //Add the session - $calendar[$Ymd]['sessions'][$session['t_id'].sprintf('%02d', $session['l_id'])] = [ + $calendar[$Ymd]['sessions'][$session['t_id'].sprintf('%05d', $session['id'])] = [ 'id' => $session['id'], 'start' => $session['start'], 'stop' => $session['stop'],