]> Raphaël G. Git Repositories - airbundle/blobdiff - Controller/SessionController.php
Fix coalesce warning
[airbundle] / Controller / SessionController.php
index db556dcafd4ec8390ed2177ee6059d7dacf53bdc..b2dde1d58b630b37f6c8f15bc4347987537e1733 100644 (file)
@@ -33,7 +33,7 @@ class SessionController extends AbstractController {
        /**
         * List all sessions
         *
-        * @desc Display all sessions with an application or login form
+        * Display all sessions with an application or login form
         *
         * @param Request $request The request instance
         *
@@ -47,7 +47,7 @@ class SessionController extends AbstractController {
                $this->context['cities'] = $this->doctrine->getRepository(Location::class)->findCitiesAsArray($this->period);
 
                //Add calendar
-               $this->context['calendar'] = $this->doctrine->getRepository(Session::class)->findAllByPeriodAsCalendarArray($this->period, !$this->isGranted('IS_AUTHENTICATED_REMEMBERED'), null, null, 1);
+               $this->context['calendar'] = $this->doctrine->getRepository(Session::class)->findAllByPeriodAsCalendarArray($this->period, !$this->checker->isGranted('IS_AUTHENTICATED_REMEMBERED'), null, null, 1);
 
                //Add dances
                $this->context['dances'] = $this->doctrine->getRepository(Dance::class)->findNamesAsArray();
@@ -59,7 +59,7 @@ class SessionController extends AbstractController {
                $response = new Response();
 
                //With logged user
-               if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
+               if ($this->checker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
                        //Set last modified
                        $response->setLastModified(new \DateTime('-1 year'));
 
@@ -139,7 +139,7 @@ class SessionController extends AbstractController {
                $dances = implode($this->translator->trans(' and '), array_filter(array_merge([implode(', ', array_slice($dances, 0, -1))], array_slice($dances, -1)), 'strlen'));
 
                //Set title
-               $this->context['title'] = $this->translator->trans('%dances% %cities% sessions', ['%dances%' => $dances, '%cities%' => $cities]);
+               $this->context['title']['page'] = $this->translator->trans('%dances% %cities% sessions', ['%dances%' => $dances, '%cities%' => $cities]);
 
                //Set description
                $this->context['description'] = $this->translator->trans('%dances% indoor and outdoor session calendar %cities%', ['%dances%' => $dances, '%cities%' => $cities]);
@@ -151,7 +151,7 @@ class SessionController extends AbstractController {
        /**
         * List all sessions for tango argentin
         *
-        * @desc Display all sessions in tango argentin json format
+        * Display all sessions in tango argentin json format
         *
         * @todo Drop it if unused by tangoargentin ???
         *
@@ -192,7 +192,7 @@ class SessionController extends AbstractController {
                                'status' => in_array('canceled', $session['class'])?'annulé':'confirmé',
                                'modified' => $session['modified']->format(\DateTime::ISO8601),
                                #'organizer' => $session['application']['user']['title'],
-                               #'source' => $this->router->generate('rapsys_air_session_view', ['id' => $sessionId, 'location' => $this->translator->trans($session['l_title'])], UrlGeneratorInterface::ABSOLUTE_URL)
+                               #'source' => $this->router->generate('rapsysair_session_view', ['id' => $sessionId, 'location' => $this->translator->trans($session['l_title'])], UrlGeneratorInterface::ABSOLUTE_URL)
                                'source' => $this->router->generate($route, $routeParams, UrlGeneratorInterface::ABSOLUTE_URL)
                        ];
                }
@@ -246,7 +246,7 @@ class SessionController extends AbstractController {
                $response = new Response();
 
                //With logged user
-               if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
+               if ($this->checker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
                        //Set last modified
                        $response->setLastModified(new \DateTime('-1 year'));
 
@@ -348,7 +348,7 @@ class SessionController extends AbstractController {
                //With application
                if (!empty($this->context['session']['application'])) {
                        //Set title
-                       $this->context['title'] = $this->translator->trans('%dance% %id% by %pseudonym%', ['%id%' => $id, '%dance%' => $this->context['session']['application']['dance']['title'], '%pseudonym%' => $this->context['session']['application']['user']['title']]);
+                       $this->context['title']['page'] = $this->translator->trans('%dance% %id% by %pseudonym%', ['%id%' => $id, '%dance%' => $this->context['session']['application']['dance']['title'], '%pseudonym%' => $this->context['session']['application']['user']['title']]);
 
                        //Set description
                        $this->context['description'] = ucfirst($this->translator->trans('%dance% %location% %city% %slot% on %date% at %time%', [
@@ -372,7 +372,7 @@ class SessionController extends AbstractController {
                //Without application
                } else {
                        //Set title
-                       $this->context['title'] = $this->translator->trans('Session %id%', ['%id%' => $id]);
+                       $this->context['title']['page'] = $this->translator->trans('Session %id%', ['%id%' => $id]);
 
                        //Set description
                        $this->context['description'] = ucfirst($this->translator->trans('%location% %city% %slot% on %date% at %time%', [
@@ -395,12 +395,12 @@ class SessionController extends AbstractController {
                $this->context['section'] = $this->context['session']['location']['title'];
 
                //Set facebook title
-               $this->context['facebook']['metas']['og:title'] = $this->context['title'].' '.$this->context['session']['location']['at'];
+               $this->context['facebook']['og:title'] = $this->context['title']['page'].' '.$this->context['session']['location']['at'];
 
                //Set facebook image
-               $this->context['facebook'] = [
+               $this->context['fbimage'] = [
                        'texts' => [
-                               $this->context['session']['application']['user']['title']??$this->context['title'] => [
+                               $this->context['session']['application']['user']['title']??$this->context['title']['page'] => [
                                        'font' => 'irishgrover',
                                        'size' => 110
                                ],
@@ -418,21 +418,47 @@ class SessionController extends AbstractController {
                ]+$this->context['facebook'];
 
                //Create application form for role_guest
-               if ($this->isGranted('ROLE_GUEST')) {
+               if ($this->checker->isGranted('ROLE_GUEST')) {
                        //Set now
                        $now = new \DateTime('now');
 
+                       //Default favorites and dances
+                       $danceFavorites = $dances = [];
+                       //Default dance
+                       $danceDefault = null;
+
+                       //With admin
+                       if ($this->checker->isGranted('ROLE_ADMIN')) {
+                               //Get favorites dances
+                               $danceFavorites = $this->doctrine->getRepository(Dance::class)->findByUserId($this->security->getUser()->getId());
+
+                               //Get dances
+                               $dances = $this->doctrine->getRepository(Dance::class)->findAllIndexed();
+
+                               //Set dance default
+                               $danceDefault = !empty($this->context['session']['application'])?$dances[$this->context['session']['application']['dance']['id']]:null;
+                       }
+
                        //Create SessionType form
                        //TODO: move to named form ???
-                       $sessionForm = $this->createForm('Rapsys\AirBundle\Form\SessionType', null, [
+                       $sessionForm = $this->factory->create('Rapsys\AirBundle\Form\SessionType', null, [
                                //Set the action
-                               'action' => $this->generateUrl('rapsys_air_session_view', ['id' => $id, 'location' => $this->context['session']['location']['slug'], 'dance' => $this->context['session']['application']['dance']['slug']??null, 'user' => $this->context['session']['application']['user']['slug']??null]),
+                               'action' => $this->generateUrl('rapsysair_session_view', ['id' => $id, 'location' => $this->context['session']['location']['slug'], 'dance' => $this->context['session']['application']['dance']['slug']??null, 'user' => $this->context['session']['application']['user']['slug']??null]),
                                //Set the form attribute
                                'attr' => [ 'class' => 'col' ],
                                //Set admin
-                               'admin' => $this->isGranted('ROLE_ADMIN'),
+                               'admin' => $this->checker->isGranted('ROLE_ADMIN'),
+                               //Set dance choices
+                               'dance_choices' => $dances,
+                               //Set dance default
+                               'dance_default' => $danceDefault,
+                               //Set dance favorites
+                               'dance_favorites' => $danceFavorites,
+                               //Set to session slot or evening by default
+                               //XXX: default to Evening (3)
+                               'slot_default' => $this->doctrine->getRepository(Slot::class)->findOneById($this->context['session']['slot']['id']??3),
                                //Set default user to current
-                               'user' => $this->getUser()->getId(),
+                               'user' => $this->security->getUser()->getId(),
                                //Set date
                                'date' => $this->context['session']['date'],
                                //Set begin
@@ -440,15 +466,15 @@ class SessionController extends AbstractController {
                                //Set length
                                'length' => $this->context['session']['length'],
                                //Set raincancel
-                               'raincancel' => ($this->isGranted('ROLE_ADMIN') || !empty($this->context['session']['application']['user']['id']) && $this->getUser()->getId() == $this->context['session']['application']['user']['id']) && $this->context['session']['rainfall'] >= 2,
+                               'raincancel' => ($this->checker->isGranted('ROLE_ADMIN') || !empty($this->context['session']['application']['user']['id']) && $this->security->getUser()->getId() == $this->context['session']['application']['user']['id']) && $this->context['session']['rainfall'] >= 2,
                                //Set cancel
-                               'cancel' => $this->isGranted('ROLE_ADMIN') || in_array($this->getUser()->getId(), explode("\n", $this->context['session']['sau_id'])),
+                               'cancel' => $this->checker->isGranted('ROLE_ADMIN') || in_array($this->security->getUser()->getId(), explode("\n", $this->context['session']['sau_id'])),
                                //Set modify
-                               'modify' => $this->isGranted('ROLE_ADMIN') || !empty($this->context['session']['application']['user']['id']) && $this->getUser()->getId() == $this->context['session']['application']['user']['id'] && $this->context['session']['stop'] >= $now && $this->isGranted('ROLE_REGULAR'),
+                               'modify' => $this->checker->isGranted('ROLE_ADMIN') || !empty($this->context['session']['application']['user']['id']) && $this->security->getUser()->getId() == $this->context['session']['application']['user']['id'] && $this->context['session']['stop'] >= $now && $this->checker->isGranted('ROLE_REGULAR'),
                                //Set move
-                               'move' => $this->isGranted('ROLE_ADMIN') || !empty($this->context['session']['application']['user']['id']) && $this->getUser()->getId() == $this->context['session']['application']['user']['id'] && $this->context['session']['stop'] >= $now && $this->isGranted('ROLE_SENIOR'),
+                               'move' => $this->checker->isGranted('ROLE_ADMIN') || !empty($this->context['session']['application']['user']['id']) && $this->security->getUser()->getId() == $this->context['session']['application']['user']['id'] && $this->context['session']['stop'] >= $now && $this->checker->isGranted('ROLE_SENIOR'),
                                //Set attribute
-                               'attribute' => $this->isGranted('ROLE_ADMIN') && $this->context['session']['locked'] === null,
+                               'attribute' => $this->checker->isGranted('ROLE_ADMIN') && $this->context['session']['locked'] === null,
                                //Set session
                                'session' => $this->context['session']['id']
                        ]);
@@ -465,10 +491,10 @@ class SessionController extends AbstractController {
                                $sessionObject = $this->doctrine->getRepository(Session::class)->findOneById($id);
 
                                //Set user
-                               $userObject = $this->getUser();
+                               $userObject = $this->security->getUser();
 
                                //Replace with requested user for admin
-                               if ($this->isGranted('ROLE_ADMIN') && !empty($data['user'])) {
+                               if ($this->checker->isGranted('ROLE_ADMIN') && !empty($data['user'])) {
                                        $userObject = $this->doctrine->getRepository(User::class)->findOneById($data['user']);
                                }
 
@@ -491,7 +517,7 @@ class SessionController extends AbstractController {
                                ];
 
                                //With raincancel and application and (rainfall or admin)
-                               if ($action['raincancel'] && ($application = $sessionObject->getApplication()) && ($sessionObject->getRainfall() >= 2 || $this->isGranted('ROLE_ADMIN'))) {
+                               if ($action['raincancel'] && ($application = $sessionObject->getApplication()) && ($sessionObject->getRainfall() >= 2 || $this->checker->isGranted('ROLE_ADMIN'))) {
                                        //Cancel application at start minus one day
                                        $application->setCanceled($canceled);
 
@@ -523,7 +549,19 @@ class SessionController extends AbstractController {
                                //With modify
                                } elseif ($action['modify']) {
                                        //With admin
-                                       if ($this->isGranted('ROLE_ADMIN')) {
+                                       if ($this->checker->isGranted('ROLE_ADMIN')) {
+                                               //Get application
+                                               $application = $this->doctrine->getRepository(Application::class)->findOneBySessionUser($sessionObject, $userObject);
+
+                                               //Set dance
+                                               $application->setDance($data['dance']);
+
+                                               //Queue session save
+                                               $this->manager->persist($application);
+
+                                               //Set slot
+                                               $sessionObject->setSlot($data['slot']);
+
                                                //Set date
                                                $sessionObject->setDate($data['date']);
                                        }
@@ -706,7 +744,7 @@ class SessionController extends AbstractController {
                                $this->manager->flush();
 
                                //Redirect to cleanup the form
-                               return $this->redirectToRoute('rapsys_air_session_view', ['id' => $id, 'location' => $this->context['session']['location']['slug'], 'dance' => $this->context['session']['application']['dance']['slug']??null, 'user' => $this->context['session']['application']['user']['slug']??null]);
+                               return $this->redirectToRoute('rapsysair_session_view', ['id' => $id, 'location' => $this->context['session']['location']['slug'], 'dance' => $this->context['session']['application']['dance']['slug']??null, 'user' => $this->context['session']['application']['user']['slug']??null]);
                        }
 
                        //Add form to context