src/Controller/Frontend/FrontendController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Entity\Media\Cart;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use App\Entity\ThirdParty\ThirdParty;
  6. use App\Entity\ThirdParty\Address;
  7. use App\Entity\User\User;
  8. use App\Entity\ThirdParty\Type;
  9. use App\Entity\User\Group;
  10. use App\Form\ThirdParty\RegisterType;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use App\Form\User\CheckRegisterType;
  13. use Symfony\Component\Validator\Validator\ValidatorInterface;
  14. use Symfony\Component\Validator\Constraints\Email as EmailConstraint;
  15. use Symfony\Component\Validator\Constraints\NotBlank;
  16. use App\Entity\Site\AccessSite;
  17. use App\Entity\Federation\Race;
  18. use App\Entity\Federation\Boat;
  19. use App\Form\Site\RegisterAccessSiteType;
  20. use App\Form\Site\AccessSiteComplementType;
  21. use App\Entity\Federation\Participation;
  22. use App\Entity\Media\Document;
  23. use App\Entity\Media\DocumentType;
  24. use App\Service\Site\SiteManager;
  25. use App\Service\Email\EmailManager;
  26. use Symfony\Component\Security\Core\Security;
  27. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  28. use Symfony\Contracts\Translation\TranslatorInterface;
  29. use App\Entity\Media\Quality;
  30. class FrontendController extends AbstractController
  31. {
  32.     public function indexAction(Security $securitySiteManager $site)
  33.     {
  34.         $documentsProofs $lastMovies $lastPictures $lastSounds $lastDocuments = array();
  35.         $em $this->getDoctrine()->getManager();
  36.         $race $site->getCurrentSite()->getRace();
  37.         $user $security->getUser();
  38.         $accessSite $site->userAccessSite($user);
  39.         $access $site->userAccessSite($user);
  40.         foreach($user->getParticipations() as $participation)
  41.         {
  42.             if($participation->getRace()->getId() == $race->getId())
  43.             {
  44.                 $participationDocumentsProof $em->getRepository(Document::class)->getDocumentsProof($race$participation->getBoat(), $participation->getSkipper());
  45.                 foreach($participationDocumentsProof as $participationDocumentProof)
  46.                     if(!in_array($participationDocumentProof$documentsProofs))
  47.                         array_push($documentsProofs$participationDocumentProof);
  48.             }
  49.         }
  50.         $movies $em->getRepository(DocumentType::class)->findOneByDirectoryName('movies');
  51.         if ($race->getDocumentTypes()->contains($movies) && $accessSite->getDocumentTypes()->contains($movies))
  52.         {
  53.             $lastMovies $this->getDoctrine()
  54.                 ->getManager()
  55.                 ->getRepository(Document::class)
  56.                 ->getFrontAccessDocuments(nullnull$moviesfalse$race$accessSite->getCategories(), [], [], [], nullnull15);
  57.         }
  58.         $pictures $em->getRepository(DocumentType::class)->findOneByDirectoryName('pictures');
  59.         if ($race->getDocumentTypes()->contains($pictures) && $accessSite->getDocumentTypes()->contains($pictures))
  60.         {
  61.             $lastPictures $this->getDoctrine()
  62.                 ->getManager()
  63.                 ->getRepository(Document::class)
  64.                 ->getFrontAccessDocuments(nullnull$picturesfalse$race$accessSite->getCategories(), [], [], [], nullnull15);
  65.         }
  66.         $sounds $em->getRepository(DocumentType::class)->findOneByDirectoryName('sounds');
  67.         if ($race->getDocumentTypes()->contains($sounds) && $accessSite->getDocumentTypes()->contains($sounds))
  68.         {
  69.             $lastSounds $this->getDoctrine()
  70.                 ->getManager()
  71.                 ->getRepository(Document::class)
  72.                 ->getFrontAccessDocuments(nullnull$soundsfalse$race$accessSite->getCategories(), [], [], [], nullnull15);
  73.         }
  74.         $documents $em->getRepository(DocumentType::class)->findOneByDirectoryName('documents');
  75.         if ($race->getDocumentTypes()->contains($documents) && $accessSite->getDocumentTypes()->contains($documents))
  76.         {
  77.             $lastDocuments $this->getDoctrine()
  78.                 ->getManager()
  79.                 ->getRepository(Document::class)
  80.                 ->getFrontAccessDocuments(nullnull$documentsfalse$race$accessSite->getCategories(), [], [], [], nullnull15);
  81.         }
  82.         return $this->render('Frontend/Views/index.html.twig', array(
  83.             'documentsProofs' => $documentsProofs,
  84.             'lastMovies' => $lastMovies,
  85.             'lastPictures' => $lastPictures,
  86.             'lastSounds' => $lastSounds,
  87.             'lastDocuments' => $lastDocuments,
  88.             'accessSite' => $accessSite,
  89.             'cart' => $em->getRepository(Cart::class)->findOneByAccessSite($access)
  90.         ));
  91.     }
  92.     
  93.     public function loadCheckRegisterFormAction()
  94.     {
  95.         $form $this->createForm(CheckRegisterType::class, null, array(
  96.             'action' => $this->generateUrl('auth_security_check_register'),
  97.         ));
  98.         
  99.         return $this->render('Frontend/Views/User/check_register_form.html.twig', array(
  100.             'form' => $form->createView()
  101.         ));
  102.     }
  103.     
  104.     public function checkRegisterAction(Request $requestSiteManager $siteValidatorInterface $validatorTranslatorInterface $translator)
  105.     {
  106.         $em $this->getDoctrine()->getManager();
  107.         $form $this->createForm(CheckRegisterType::class);
  108.         
  109.         $form->handleRequest($request);
  110.         $errors $validator->validate(
  111.             $form['email']->getData(),
  112.             array(new NotBlank(), new EmailConstraint())
  113.         );
  114.         
  115.         if ($form->isSubmitted()) {
  116.             if($errors->count() == 0){
  117.                 // 1 - Check if user is already subsribe on the application
  118.                 $user $em->getRepository(User::class)->findOneByEmail($form['email']->getData());
  119.                 if($user)
  120.                 {                    
  121.                     // 2 - Check if user is not already registered
  122.                     $access $site->userAccessSite($user);
  123.                     if($access)
  124.                     {
  125.                         $request->getSession()->getFlashBag()->add('error'$translator->trans('auth.register.already_allowed'));
  126.                         return $this->redirectToRoute('frontend_homepage');
  127.                     
  128.                     } else {
  129.                         
  130.                         return $this->redirectToRoute('auth_security_register_race', array('user' => $user->getId()));
  131.                     }
  132.                 }
  133.                 
  134.             } else {
  135.                 foreach ($errors as $violation)
  136.                     $messages[] = $violation->getMessage();
  137.                
  138.                 $request->getSession()->getFlashBag()->add('error'implode(", "$messages));
  139.                 return $this->redirectToRoute('frontend_homepage');
  140.             }
  141.         }       
  142.         
  143.         return $this->redirectToRoute('auth_security_register', array('email' => $form['email']->getData()));
  144.     }
  145.     
  146.     public function registerAction(Request $requeststring $email nullUserPasswordHasherInterface $passwordHasher
  147.     {
  148.         $em $this->getDoctrine()->getManager();
  149.         
  150.         $thirdParty = new ThirdParty();
  151.         $address = new Address();
  152.         $user = new User();
  153.         $type $em->getRepository(Type::class)->find(1);
  154.         $defaultGroup $em->getRepository(Group::class)->find(2);
  155.                         
  156.         /* Default values */
  157.         $user->addGroup($defaultGroup);
  158.         $user->setEmail($email);
  159.         $address->setThirdParty($thirdParty);
  160.         $thirdParty->setType($type);
  161.         $thirdParty->setMainAddress($address);
  162.         $thirdParty->addAddress($address);
  163.         $thirdParty->addUser($user);
  164.             
  165.         $form $this->createForm(RegisterType::class, $thirdParty, array('em' => $em));
  166.         $form->handleRequest($request);
  167.         
  168.         if ($form->isSubmitted()) {
  169.             
  170.             if($form->isValid()){
  171.                 $user->setPassword($passwordHasher->hashPassword($user$user->getPassword()));
  172.                 $em->persist($thirdParty);
  173.                 $em->flush();                    
  174.                                 
  175.                 return $this->redirectToRoute('auth_security_register_race', array('user' => $thirdParty->getUsers()[0]->getId()));
  176.             }
  177.         }
  178.             
  179.         return $this->render('Frontend/Views/User/register.html.twig', array(
  180.             'thirdParty' => $thirdParty,
  181.             'form' => $form->createView()
  182.         ));
  183.     }
  184.     
  185.     public function registerRaceAction(Request $requestUser $userSiteManager $siteManagerTranslatorInterface $translator)
  186.     {
  187.         $em $this->getDoctrine()->getManager();
  188.         $site $siteManager->getCurrentSite();
  189.         
  190.         $access $siteManager->userAccessSite($user);
  191.         if($access)
  192.         {
  193.             $request->getSession()->getFlashBag()->add('error'$translator->trans('auth.register.already_allowed'));
  194.             return $this->redirectToRoute('frontend_homepage');
  195.         }
  196.         
  197.         $accessSite = new AccessSite();
  198.         $accessSite->setSite($site);
  199.         $accessSite->setUser($user);
  200.         $accessSite->setStatus(1);
  201.         if(sizeof($site->getRace()->getDocumentTypes()) == 1)
  202.         {
  203.             $documentType $site->getRace()->getDocumentTypes()[0];
  204.             $accessSite->addDocumentType($documentType);
  205.         }
  206.         if(!$site->getRace()->allowUploadPicture())
  207.         {
  208.             $quality $em->getRepository(Quality::class)->findOneByCode('BD');
  209.             $accessSite->addQuality($quality);
  210.         }
  211.         $form $this->createForm(RegisterAccessSiteType::class, $accessSite, array(
  212.             'documentTypesChoices' => $site->getRace()->getDocumentTypes(),
  213.             'race' => $site->getRace()
  214.         ));
  215.         $form->handleRequest($request);
  216.         
  217.         if ($form->isSubmitted()) {
  218.             
  219.             $access $siteManager->userAccessSite($user);
  220.             if($access)
  221.             {
  222.                 $request->getSession()->getFlashBag()->add('error'$translator->trans('auth.register.already_allowed'));
  223.                 return $this->redirectToRoute('frontend_homepage');
  224.             }
  225.             
  226.             if($form->isValid()){
  227.                 
  228.                 if(!empty($accessSite->getBoats()) && $accessSite->getBoats()->count() > 0)
  229.                 {
  230.                     $complement $this->getAssociationParticipationDatas($site->getRace(), $accessSite->getBoats());
  231.                     $accessSite->addSkipper($complement['skipper']);
  232.                     $accessSite->addClass($complement['classe']);
  233.                 }
  234.                 
  235.                 $em->persist($accessSite);
  236.                 $em->flush();
  237.                 
  238.                 return $this->redirectToRoute('auth_security_register_race_validation', array('accessSite' => $accessSite->getId()));
  239.             }
  240.         }
  241.         
  242.         return $this->render('Frontend/Views/User/registerRace.html.twig', array(
  243.             'site' => $site,
  244.             'user' => $user,
  245.             'form' => $form->createView()
  246.         ));
  247.     }
  248.     
  249.      public function getAssociationParticipationDatas(Race $race$boats null)
  250.     {
  251.         $datas = [];
  252.         $em $this->getDoctrine()->getManager();
  253.         
  254.         if(!empty($boats))
  255.         {
  256.             foreach($boats as $id)
  257.             {
  258.                $boat $em->getRepository(Boat::class)->find($id);
  259.                if(!empty($boat))
  260.                 {
  261.                     $participation $em->getRepository(Participation::class)->findOneBy(['status' => 1'race' => $race'boat' => $boat]);
  262.                     if(!empty($participation))
  263.                     {
  264.                         $datas['skipper'] = $participation->getSkipper();
  265.                         $datas['classe'] = $boat->getClasse();
  266.                     }
  267.                 } 
  268.             }            
  269.         }
  270.         
  271.         return $datas;
  272.     }
  273.     
  274.     public function registerRaceValidationAction(Request $requestAccessSite $accessSiteTranslatorInterface $translatorEmailManager $emailManager)
  275.     {
  276.         $form $this->createForm(AccessSiteComplementType::class, $accessSite);        
  277.         $form->handleRequest($request);
  278.         
  279.         if ($form->isSubmitted()) {
  280.             
  281.             $em $this->getDoctrine()->getManager();
  282.             $em->flush();
  283.             
  284.             $request->getSession()->getFlashBag()->add('error'$translator->trans('auth.register.complementSave'));   
  285.             
  286.             $datas = array(
  287.                 'accessSite' => $accessSite,
  288.                 'locale' => $accessSite->getUser()->getLanguage()
  289.             );
  290.             
  291.             if($accessSite->getStatus() == 3)
  292.                 if($accessSite->getSite() && $accessSite->getSite()->getRace())
  293.                     foreach($accessSite->getSite()->getRace()->getContacts() as $contact)
  294.                         if($contact['subscribeAlert'] && $contact['email'])
  295.                             $emailManager->sendContactMessage($contact['email'], 'admin-register'$datasnull$accessSite->getSite());
  296.         }
  297.         
  298.         return $this->render('Frontend/Views/User/registerRaceValidation.html.twig', array(
  299.             'accessSite' => $accessSite,
  300.             'form' => $form->createView()
  301.         ));        
  302.     }
  303. }