src/Controller/Home/HomeController.php line 433

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Home;
  3. use App\Entity\Countdown;
  4. use App\Entity\Image;
  5. use App\Entity\Map;
  6. use App\Entity\Ticket;
  7. use App\Entity\User;
  8. use App\Entity\Weather;
  9. use App\Form\CountdownFileType;
  10. use App\Form\CountdownFromBackgroundType;
  11. use App\Form\ExtTicketType;
  12. use App\Form\ImageFileType;
  13. use App\Form\ImageFromBackgroundType;
  14. use App\Form\WeatherFileType;
  15. use App\Form\WeatherFromBackgroundType;
  16. use App\Repository\CountdownBackgroundRepository;
  17. use App\Repository\DateRuleRepository;
  18. use App\Repository\ImageBackgroundRepository;
  19. use App\Repository\ImageRepository;
  20. use App\Repository\ItemRepository;
  21. use App\Repository\ProductRepository;
  22. use App\Repository\TimeRuleRepository;
  23. use App\Repository\WeatherBackgroundRepository;
  24. use App\Repository\WeekRuleRepository;
  25. use App\Service\Cart\CartService;
  26. use App\Service\Countdown\CountdownService;
  27. use App\Service\DateTimeRules\DateRuleService;
  28. use App\Service\DateTimeRules\TimeRuleService;
  29. use App\Service\DateTimeRules\WeekRuleService;
  30. use App\Service\Image\ImageService;
  31. use App\Service\Ticket\TicketService;
  32. use App\Service\TomTomMapService;
  33. use App\Service\uploadService;
  34. use App\Service\Weather\WeatherService;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. use Knp\Component\Pager\PaginatorInterface;
  37. use Symfony\Component\HttpFoundation\Cookie;
  38. use Symfony\Component\HttpFoundation\Request;
  39. use Symfony\Component\HttpFoundation\Response;
  40. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  41. use Symfony\Component\Routing\Annotation\Route;
  42. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  43. use Symfony\Component\Serializer\SerializerInterface;
  44. use function GuzzleHttp\default_user_agent;
  45. class HomeController extends AbstractController
  46. {
  47.     /**
  48.      * @Route("/", name="root")
  49.      */
  50.     public function root(){
  51.         $this -> redirectToRoute'root_perso');
  52.     }
  53.     /**
  54.      * @Route("/{_locale}/", name="root_lng", requirements={"_locale"="en|fr"})
  55.      */
  56.     public function root_lng(){
  57.         return $this -> redirectToRoute'root_perso');
  58.     }
  59.     /**
  60.      * @Route("/{_locale}/root", name="root_perso",)
  61.      */
  62.     public function root_perso(CartService $cartServiceTicketService $ticketServiceProductRepository $productRepository){
  63.         //Si le user est connecté direction home
  64.         $user $this -> getUser();
  65.         if( $this->isGranted('ROLE_USER') ) {
  66.             return $this->redirectToRoute('projects', [
  67.                 'cart' => $cartService->getCart()
  68.             ]);
  69.         }
  70.         //Sinon on le retourne sur presentations
  71.         else{
  72.             return $this->redirectToRoute'presentation');
  73.         }
  74.     }
  75.     /**
  76.      * @Route("/{_locale}/projects", name="projects", requirements={"_locale"="en|fr"})
  77.      */
  78.     public function index(CartService $cartServiceTicketService $ticketServiceFlashBagInterface $flashBag,
  79.                           ItemRepository $itemRepositoryPaginatorInterface $paginatorRequest $request,
  80.                           uploadService $uploadServiceImageService $imageServiceCountdownService $countdownService,
  81.                           WeatherService $weatherService,TomTomMapService $tomTomMapService,
  82.                           WeekRuleRepository $weekRuleRepositoryWeekRuleService $weekRuleService,
  83.                           DateRuleRepository $dateRuleRepositoryDateRuleService $dateRuleService,
  84.                           TimeRuleRepository $timeRuleRepository,TimeRuleService $timeRuleService){
  85.         //Affichage des images
  86.         /** @var User $user */
  87.         $user $this-> getUser();
  88.         $itemsQuery $itemRepository -> findBy(['user' => $user,'deleteDate' => null],['updateDate' => 'DESC']);
  89.         foreach ($itemsQuery as $item){
  90.             switch ($item->getType()){
  91.                 case 'image' :
  92.                     /** @var Image $item */
  93.                     $item -> setUrl($imageService -> getImageUrl($item));
  94.                     break ;
  95.                 case 'countdown' :
  96.                     /** @var Countdown $item */
  97.                     $item -> setUrl($countdownService -> getCountdownUrl($item));
  98.                     break;
  99.                 case 'weather' :
  100.                     /** @var Weather $item */
  101.                     $item -> setUrl($weatherService -> getWeatherUrl($item));
  102.                     break;
  103.                 case 'map':
  104.                     /** @var Map $item */
  105.                     $item -> setUrl($tomTomMapService -> getMapDisplayUrl($item));
  106.                     break;
  107.             }
  108.         }
  109.         $items $paginator ->paginate(
  110.             $itemsQuery,
  111.             $request -> query ->getInt('pageitem',1),
  112.             5,
  113.             ['pageParameterName' => 'pageitem']
  114.         );
  115.         //Affichage des rules
  116.         $dateRules $dateRuleRepository -> findBy(['user' => $user,'deleteDate' => null],['createDate' => 'DESC']);
  117.         foreach ($dateRules as $dateRule){
  118.             $dateRule -> setUrl($dateRuleService->getDateRuleUrl($dateRule));
  119.         }
  120.         $weekRules $weekRuleRepository -> findBy(['user' => $user,'deleteDate' => null],['createDate' => 'DESC']);
  121.         foreach ($weekRules as $weekRule){
  122.             $weekRule -> setUrl($weekRuleService->getWeekRuleUrl($weekRule));
  123.         }
  124.         $timeRules $timeRuleRepository -> findBy(['user' => $user,'deleteDate' => null],['createDate' => 'DESC']);
  125.         foreach ($timeRules as $timeRule){
  126.             $timeRule -> setUrl($timeRuleService->getTimeRuleUrl($timeRule));
  127.         }
  128.         $sortedRules array_merge($dateRules,$weekRules,$timeRules);
  129.         //Tri par date
  130.         function ruleDateSort($a$b){
  131.             if ( $a->getUpdateDate() == $b->getUpdateDate() ){
  132.                 return 0;
  133.             }
  134.             return  ( $a->getUpdateDate() > $b->getUpdateDate() ) ? -;
  135.         }
  136.         uasort($sortedRules,'App\Controller\Home\ruleDateSort');
  137.         $rules $paginator ->paginate(
  138.             $sortedRules,
  139.             $request -> query ->getInt('pagerule',1),
  140.             5,
  141.             ['pageParameterName' => 'pagerule']
  142.         );
  143.         //Affichage des phrases au hazar
  144.         $randomSentences = [
  145.             "La météo est au beau fixe chez nos clients. Et chez vous, un test en prévision ?",
  146.             "Les comptes à rebours ont la cote. Il est plus que temps d'y penser !",
  147.             "Les plans rencontrent un grand succès auprès de nos utilisateurs. Un bon plan pour vous ?",
  148.             "Le sur-mesure est le nec plus ultra du mail français. Et si vous faisiez appel à l'équipe ?"
  149.         ];
  150.         $rand_key array_rand($randomSentences1);
  151.         /*
  152.         $cookies = $request -> cookies;
  153.         if (!$cookies->has('oldConnect'))
  154.         {
  155.             $response->headers->setCookie(new Cookie('oldConnect', time(), strtotime('now +15 days')) );
  156.         }
  157.         */
  158.         $stimPlusCount $weekRuleRepository -> count(['user' => $user,'deleteDate' => null ]);
  159.         $stimPlusCount += $dateRuleRepository -> count(['user' => $user,'deleteDate' => null ]);
  160.         $stimPlusCount += $timeRuleRepository -> count(['user' => $user,'deleteDate' => null ]);
  161.         return  $this->render('/home/home.html.twig',
  162.             [
  163.                 'items' => $items,
  164.                 'rules' => $rules,
  165.                 'cart' => $cartService->getCart(),
  166.                 'countTicket' => $ticketService->getCountTicket(),
  167.                 'stimCount' => $itemRepository -> count(['user' => $user,'deleteDate' => null ]),
  168.                 'stimPlusCount' => $stimPlusCount,
  169.                 'phrasePerso' => $randomSentences[$rand_key],
  170.                 'controlOpenModal' => $flashBag->get('open-modal')
  171.             ]
  172.         );
  173.     }
  174.     /**
  175.      * @Route("/{_locale}/projects_test", name="projects_test", requirements={"_locale"="en|fr"})
  176.      */
  177.     public function project_test(CartService $cartServiceTicketService $ticketServiceFlashBagInterface $flashBag,
  178.                           ItemRepository $itemRepositoryPaginatorInterface $paginatorRequest $request,
  179.                           uploadService $uploadServiceImageService $imageServiceCountdownService $countdownService,
  180.                           WeatherService $weatherService,TomTomMapService $tomTomMapService){
  181.         //Affichage des images
  182.         /** @var User $user */
  183.         $user $this-> getUser();
  184.         $items $itemRepository -> findBy(['user' => $user,'deleteDate' => null],['createDate' => 'DESC']);
  185.         foreach ($items as $item){
  186.             switch ($item->getType()){
  187.                 case 'image' :
  188.                     /** @var Image $item */
  189.                     $item -> setUrl($imageService -> getImageUrl($item));
  190.                     break ;
  191.                 case 'countdown' :
  192.                     /** @var Countdown $item */
  193.                     $item -> setUrl($countdownService -> getCountdownUrl($item));
  194.                     break;
  195.                 case 'weather' :
  196.                     /** @var Weather $item */
  197.                     $item -> setUrl($weatherService -> getWeatherUrl($item));
  198.                     break;
  199.                 case 'map':
  200.                     /** @var Map $item */
  201.                     $item -> setUrl('Pas encore défini !');
  202.                     break;
  203.             }
  204.         }
  205.         $response $this->render('/home/projects_test.html.twig',
  206.             [
  207.                 'items' => $items,
  208.                 'cart' => $cartService->getCart(),
  209.                 'countTicket' => $ticketService->getCountTicket(),
  210.             ]
  211.         );
  212.         $cookies $request -> cookies;
  213.         if (!$cookies->has('oldConnect'))
  214.         {
  215.             $response->headers->setCookie(new Cookie('oldConnect'time(), strtotime('now +15 days')) );
  216.         }
  217.         return $response;
  218.     }
  219.     /**
  220.      * @Route("/{_locale}/images_json", name="images_json", requirements={"_locale"="en|fr"})
  221.      */
  222.     public function item_jsonImageRepository $imageRepository,
  223.                                ImageService $imageService,SerializerInterface $serializer){
  224.         //Affichage des images
  225.         /** @var User $user */
  226.         $user $this-> getUser();
  227.         $images $imageRepository -> findBy(['user' => $user,'deleteDate' => null],['createDate' => 'DESC']);
  228.         $jsonData = array();
  229.         foreach ($images as $image){
  230.             $jsonData[] = array(
  231.                 'id' => $image -> getId(),
  232.                 'cryptId' => $image -> getCryptId(),
  233.                 'name' => $image -> getName(),
  234.                 'file_name' => $image -> getFileName(),
  235.                 'extension' => $image -> getExtension(),
  236.                 'viewImages' => count$image -> getViewImages() ),
  237.                 'url' => $imageService -> getImageRelativeUrl($image),
  238.                 'createDate' => $image -> getCreateDate(),
  239.                 'updateDate' => $image -> getUpdateDate(),
  240.                 'deleteDate' => $image -> getDeleteDate()
  241.             );
  242.         }
  243.         $jsonObject $serializer -> serialize$images'json',[
  244.             'circular_reference_handler' => function ($object) {
  245.                 return $object->getId();
  246.             },
  247.             'ignored_attributes' => ['customImageFields,']
  248.         ]);
  249.         return new Response($jsonObject200, ['Content-Type' => 'application/json']);
  250.     }
  251.     /**
  252.      * @Route("/{_locale}/home/new/project", name="new_project", requirements={"_locale"="en|fr"})
  253.      */
  254.     public function new_project(Request $requestuploadService $uploadService,
  255.                                 CartService $cartServiceTicketService $ticketService,
  256.                                 CountdownBackgroundRepository $countdownBackgroundRepository,
  257.                                 WeatherBackgroundRepository $weatherBackgroundRepository,
  258.                                 ImageBackgroundRepository $imageBackgroundRepository){
  259.         /** @var User $user */
  260.         $user $this -> getUser();
  261.         //upload de l'image
  262.         //Formulaire d'upload (modal)
  263.         $imageForm $this->createForm(ImageFileType::class);
  264.         $imageForm->handleRequest($request);
  265.         //Si formulaire ok on enregistre la nouvelle image
  266.         if( $imageForm->isSubmitted() && $imageForm->isValid() ){
  267.             if ($new_image_file $imageForm -> get('ImageFileToUpload') -> getData() ){
  268.                 $new_image_object $uploadService -> uploadImage$user,$new_image_file,$imageForm->get('name')->getData());
  269.                 return $this->redirectToRoute('edit_image', ['cryptId' => $new_image_object -> getCryptId()]);
  270.             }
  271.         }
  272.         //Upload du countdown
  273.         //Formulaire d'upload (modal)
  274.         $countdownForm $this->createForm(CountdownFileType::class);
  275.         $countdownForm->handleRequest($request);
  276.         //Si formulaire ok on enregistre le nouveau countdown
  277.         if( $countdownForm->isSubmitted() && $countdownForm->isValid() ){
  278.             if ($new_countdown_file $countdownForm -> get('CountdownFileToUpload') -> getData() ){
  279.                 $new_bdd_countdown $uploadService -> uploadCountdown$user,$new_countdown_file$countdownForm->get('name')->getData() );
  280.                 return $this->redirectToRoute('edit_countdown', ['cryptId' => $new_bdd_countdown-> getCryptId()]);
  281.             }
  282.         }
  283.         //Upload du weather
  284.         //Formulaire d'upload (modal)
  285.         $weatherForm $this->createForm(WeatherFileType::class);
  286.         $weatherForm->handleRequest($request);
  287.         //Si formulaire ok on enregistre le nouveau countdown
  288.         if( $weatherForm->isSubmitted() && $weatherForm->isValid() ){
  289.             if ($new_weather_file $weatherForm -> get('WeatherFileToUpload') -> getData() ){
  290.                 $new_bdd_weather $uploadService -> uploadWeather$user,$new_weather_file$weatherForm->get('name')->getData() );
  291.                 return $this->redirectToRoute('edit_weather', ['cryptId' => $new_bdd_weather-> getCryptId()]);
  292.             }
  293.         }
  294.         //Choix d'un fond countdown
  295.         $countdownBackgroundForm $this -> createFormCountdownFromBackgroundType::class);
  296.         $countdownBackgroundForm->handleRequest($request);
  297.         //Si formulaire ok on enregistre le nouveau countdown
  298.         if( $countdownBackgroundForm->isSubmitted() && $countdownBackgroundForm->isValid() ){
  299.             $new_bdd_countdown $uploadService -> uploadCountdownFromBackground(
  300.                 $user,
  301.                 $countdownBackgroundForm->get('countdownBackground')->getData(),
  302.                 $countdownBackgroundForm->get('name')->getData()
  303.             );
  304.             return $this->redirectToRoute('edit_countdown', ['cryptId' => $new_bdd_countdown-> getCryptId()]);
  305.         }
  306.         //Choix d'un fond weather
  307.         $weatherBackgroundForm $this -> createFormWeatherFromBackgroundType::class);
  308.         $weatherBackgroundForm -> handleRequest($request);
  309.         //Si formulaire ok on enregistre le nouveau countdown
  310.         if( $weatherBackgroundForm->isSubmitted() && $weatherBackgroundForm->isValid() ){
  311.             $new_bdd_weather $uploadService -> uploadWeatherFromBackground(
  312.                 $user,
  313.                 $weatherBackgroundForm->get('weatherBackground')->getData(),
  314.                 $weatherBackgroundForm->get('name')->getData()
  315.             );
  316.             return $this->redirectToRoute('edit_weather', ['cryptId' => $new_bdd_weather-> getCryptId()]);
  317.         }
  318.         //Choix d'un fond image
  319.         $imageBackgroundForm $this -> createFormImageFromBackgroundType::class);
  320.         $imageBackgroundForm -> handleRequest($request);
  321.         //Si formulaire ok on enregistre le nouvelle image
  322.         if( $imageBackgroundForm->isSubmitted() && $imageBackgroundForm->isValid() ){
  323.             $new_bdd_image $uploadService -> uploadImageFromBackground(
  324.                 $user,
  325.                 $imageBackgroundForm->get('imageBackground')->getData(),
  326.                 $imageBackgroundForm->get('name')->getData()
  327.             );
  328.             return $this->redirectToRoute('edit_image', ['cryptId' => $new_bdd_image-> getCryptId()]);
  329.         }
  330.         return $this->render('home/new_project.html.twig', [
  331.             'imageForm' => $imageForm->createView(),
  332.             'countdownForm' => $countdownForm->createView(),
  333.             'weatherForm' => $weatherForm->createView(),
  334.             'countdownBackgroundForm' => $countdownBackgroundForm->createView(),
  335.             'weatherBackgroundForm' => $weatherBackgroundForm->createView(),
  336.             'imageBackgroundForm' => $imageBackgroundForm -> createView(),
  337.             'countdownBackgrounds' => $countdownBackgroundRepository->findBy(['deletedate' => null]),
  338.             'weatherBackgrounds' => $weatherBackgroundRepository->findBy(['deleteDate' => null]),
  339.             'imageBackgrounds' => $imageBackgroundRepository->findBy(['deleteDate' => null ]),
  340.             'cart' => $cartService->getCart(),
  341.             'countTicket' => $ticketService->getCountTicket()
  342.         ]);
  343.     }
  344.     /**
  345.      * @Route("/{_locale}/home/new/rule", name="new_rule", requirements={"_locale"="en|fr"})
  346.      */
  347.     public function new_rule(Request $requestuploadService $uploadServiceCartService $cartServiceTicketService $ticketService){
  348.         $user $this -> getUser();
  349.         return $this->render('home/new_rule.html.twig', [
  350.             'cart' => $cartService->getCart(),
  351.             'countTicket' => $ticketService->getCountTicket()
  352.         ]);
  353.     }
  354.     /**
  355.      * @Route("/{_locale}/presentation", name="presentation" , requirements={"_locale"="en|fr"})
  356.      */
  357.     public function presentation(CartService $cartServiceRequest $request,
  358.                                  ExtTicketType $extTicketTypeEntityManagerInterface $em,
  359.                                  FlashBagInterface $flashBagProductRepository $productRepository){
  360.         //Retourne directement sur la page home si connecté.
  361.         if( $this->isGranted('ROLE_USER') ) {
  362.             return $this->redirectToRoute('home');
  363.         }
  364.         //Création du ticket et du formulaire de ticket
  365.         $ticket = new Ticket();
  366.         $form $this -> createFormExtTicketType::class, $ticket);
  367.         $form -> handleRequest$request );
  368.         //Si le formulaire est envoyé et validé
  369.         if($form->isSubmitted() && $form -> isValid()) {
  370.             /** @var Ticket $ticket */
  371.             $ticket $form->getData();
  372.             $ticket->setType('EXT');
  373.             $ticket->setCreateDate(new \DateTime('NOW'));
  374.             $em->persist($ticket);
  375.             $em->flush();
  376.             //On crée un nouveau formulaire vide
  377.             $newTicket = new Ticket();
  378.             $newform $this -> createFormExtTicketType::class, $newTicket);
  379.             return $this->render('home/presentation.html.twig',[
  380.                 'ticketForm' => $newform -> createView(),
  381.                 'formSuccessMessage' => '<p><strong>Votre message a bien été envoyé !</strong><br/>Nous reviendrons vers vous très rapidement.</p>',
  382.                 'products' => $productRepository->findAll(),
  383.                 'link' => $this -> ge
  384.             ]);
  385.         }
  386.         return $this->render('/home/presentation.html.twig',[
  387.             'ticketForm' => $form -> createView(),
  388.             'formSuccessMessage' => null,
  389.             'products' => $productRepository->findAll(),
  390.             'now' => new \DateTime('now'),
  391.         ]);
  392.     }
  393.     /**
  394.      * @Route("/{_locale}/presentation/demo/{demo}", name="presentation_demo" , requirements={"_locale"="en|fr"})
  395.      */
  396.     public function demo($demoRequest $request){
  397.         if ($request->isXmlHttpRequest()) {
  398.             $demoTitles = ['banque',
  399.                 'boutique1',
  400.                 'boutique2',
  401.                 'boutique3',
  402.                 'boutique4',
  403.                 'assurances',
  404.                 'fondation',
  405.                 'fidelite',
  406.                 'luxe',
  407.             ];
  408.             if (in_array($demo$demoTitles)) {
  409.                 return new Response(
  410.                     $this->render('/home/demo/' $demo '.html.twig')->getContent()
  411.                 );
  412.             } else {
  413.                 return $this->createNotFoundException();
  414.             }
  415.         }else{
  416.             return $this->createAccessDeniedException();
  417.         }
  418.     }
  419. }