src/Controller/Dashboard/Admin/ExperienceController.php line 346

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace App\Controller\Dashboard\Admin;
  11. use App\Entity\Availability;
  12. use App\Entity\Category;
  13. use App\Entity\Country;
  14. use App\Entity\Destination;
  15. use App\Entity\Experience;
  16. use App\Entity\Hebergement;
  17. use App\Entity\Media;
  18. use App\Entity\Program;
  19. use App\Entity\Promotion;
  20. use App\Entity\Subcategory;
  21. use Doctrine\Persistence\ManagerRegistry;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. //use App\Entity\Experience;
  26. /**
  27.  * Controller used to manage current user.
  28.  *
  29.  * @author Romain Monteil <monteil.romain@gmail.com>
  30.  */
  31. #[Route('/admin/experience')]
  32. class ExperienceController extends AbstractController {
  33.     #[Route('/new-experience'methods: ['GET''POST'], name'new_experience')]
  34.     public function newExperience(Request $requestManagerRegistry $doctrine) {
  35.         $em $doctrine->getManager();
  36.         $countries $em->getRepository(Country::class)->findAll();
  37.         $categories $em->getRepository(Category::class)->findAll();
  38.         if ($request->isMethod('post')) {
  39.             $this->addFlash('success'"Enregistrer les informations géneale de l'éxperience et continuer a remplir les informations suivantes");
  40.             return $this->redirectToRoute('add_general_info', [
  41.                         'country' => $request->get('country'),
  42.                         'category' => $request->get('category'),
  43.             ]);
  44.         }
  45.         return $this->render('admin/experience/add/newExperience.html.twig', [
  46.                     'countries' => $countries,
  47.                     'categories' => $categories,
  48.         ]);
  49.     }
  50.     #[Route('/general-info'methods: ['GET''POST'], name'add_general_info')]
  51.     public function addGeneralinfo(Request $requestManagerRegistry $doctrine) {
  52.         $em $doctrine->getManager();
  53.         if ($request->get('category')) {
  54.             $category $em->getRepository(Category::class)->find($request->get('category'));
  55.             $country $em->getRepository(Country::class)->find($request->get('country'));
  56.         } else if ($request->isMethod('post')) {
  57.             $experience = new Experience();
  58.             $experience->setTitle($request->get('title'));
  59.             $experience->setResume($request->get('resume'));
  60.             $experience->setPublished(0);
  61.             $experience->setEnabled(1);
  62.             $experience->setCoachingtype($request->get('coachingtype'));
  63.             $experience->setSteps('1');
  64.             $em->persist($experience);
  65.             $em->flush();
  66.             $country $em->getRepository(Country::class)->find($request->get('country'));
  67.             $destination $em->getRepository(Country::class)->findOneByName($request->get('destination'));
  68.             if (!$destination) {
  69.                 $destination = new Destination();
  70.                 $destination->setName($request->get('country'));
  71.                 $em->persist($destination);
  72.                 $em->flush();
  73.                 $country->addDestination($destination);
  74.                 $em->persist($country);
  75.             }
  76.             $destination->addExperience($experience);
  77.             $subcategory $em->getRepository(Subcategory::class)->find($request->get('subcategory'));
  78.             $experience->addSubcategory($subcategory);
  79.             $em->persist($subcategory);
  80.             $em->persist($experience);
  81.             $em->flush();
  82.             $this->addFlash('success''Informations générale enregistrées avec succes, continuer a remplir les informations suivantes');
  83.             return $this->redirectToRoute('add_highlights', [
  84.                         'id' => $experience->getId(),
  85.             ]);
  86.         }
  87.         return $this->render('admin/experience/add/addGeneralinfo.html.twig', [
  88.                     'category' => $category,
  89.                     'country' => $country,
  90.         ]);
  91.     }
  92.     #[Route('/exp-{id}/add-highlights'methods: ['GET''POST'], name'add_highlights')]
  93.     public function addHighlights(Request $request$idManagerRegistry $doctrine) {
  94.         $em $doctrine->getManager();
  95.         $experience $em->getRepository(Experience::class)->find($id);
  96.         if ($request->isMethod('post')) {
  97.             $experience->setHighlights($request->get('highlights'));
  98.             $em->flush();
  99.             $this->addFlash('success''Les grandes lignes enregistrées avec succes, continuer a remplir les informations suivantes');
  100.             return $this->redirectToRoute('add_description', [
  101.                         'id' => $experience->getId(),
  102.             ]);
  103.         }
  104.         return $this->render('admin/experience/add/addHighlights.html.twig', [
  105.                     'experience' => $experience,
  106.         ]);
  107.     }
  108.     #[Route('/exp-{id}/add-description'methods: ['GET''POST'], name'add_description')]
  109.     public function addDescription(Request $request$idManagerRegistry $doctrine) {
  110.         $em $doctrine->getManager();
  111.         $experience $em->getRepository(Experience::class)->find($id);
  112.         if ($request->isMethod('post')) {
  113.             $experience->setDescription($request->get('description'));
  114.             $experience->setIncluded($request->get('included'));
  115.             $experience->setNotincluded($request->get('notincluded'));
  116.             $experience->setSteps('2');
  117.             $em->persist($experience);
  118.             $em->flush();
  119.             $this->addFlash('success'"Description enregistrées avec succes, continuer a remplir les informations restantes");
  120.             return $this->redirectToRoute('add_program', [
  121.                         'id' => $experience->getId(),
  122.             ]);
  123.         }
  124.         return $this->render('admin/experience/add/addDescription.html.twig', [
  125.                     'experience' => $experience,
  126.         ]);
  127.     }
  128.     #[Route('/exp-{id}/add-program'methods: ['GET''POST'], name'add_program')]
  129.     public function addProgram(Request $request$idManagerRegistry $doctrine) {
  130.         $em $doctrine->getManager();
  131.         $experience $em->getRepository(Experience::class)->find($id);
  132.         if ($request->isMethod('post')) {
  133.             $i 0;
  134.             foreach ($request->get('days') as $p) {
  135.                 $program = new Program();
  136.                 $program->setDay($request->get('days')[$i]);
  137.                 $program->setDescription($request->get('descriptions')[$i]);
  138.                 $em->persist($program);
  139.                 $em->flush();
  140.                 $experience->addProgram($program);
  141.                 $i++;
  142.             }
  143.             $experience->setSteps('3');
  144.             $em->persist($experience);
  145.             $em->flush();
  146.             $this->addFlash('success''Programme enregistrées avec succes, continuer a remplir les informations suivantes');
  147.             return $this->redirectToRoute('add_hebergement', [
  148.                         'id' => $experience->getId(),
  149.             ]);
  150.         }
  151.         return $this->render('admin/experience/add/addProgram.html.twig', [
  152.                     'experience' => $experience,
  153.         ]);
  154.     }
  155.     #[Route('/exp-{id}/add-hebergement'methods: ['GET''POST'], name'add_hebergement')]
  156.     public function addHebergement(Request $request$idManagerRegistry $doctrine) {
  157.         $em $doctrine->getManager();
  158.         $experience $em->getRepository(Experience::class)->find($id);
  159.         if ($request->isMethod('post')) {
  160.             $hebergement = new Hebergement();
  161.             $hebergement->setDescription($request->get('description'));
  162.             $hebergement->setName($request->get('name'));
  163.             $em->persist($hebergement);
  164.             $em->flush();
  165.             if ($request->files->get('image')) {
  166.                 $file $request->files->get('image');
  167.                 $hebergement->setImage("uploads/medias/experiences/" $hebergement->getId() . "/" $file->getClientOriginalName());
  168.                 $file->move("uploads/medias/experiences/" $hebergement->getId() . "/"$file->getClientOriginalName());
  169.             }
  170.             $experience->addHebergement($hebergement);
  171.             if ($request->files->get('medias')) {
  172.                 $i 0;
  173.                 foreach ($request->files->get('medias') as $file) {
  174.                     $media = new Media();
  175.                     $media->setPath("uploads/medias/experiences/rooms" $experience->getId() . "/" $file->getClientOriginalName());
  176.                     $media->setOrdre('1');
  177.                     $media->setEnabled('1');
  178.                     $file->move("uploads/medias/experiences/rooms" $experience->getId() . "/"$file->getClientOriginalName());
  179.                     $em->persist($media);
  180.                     $hebergement->addMedia($media);
  181.                     $i++;
  182.                 }
  183.                 $experience->setSteps('4');
  184.                 $em->persist($experience);
  185.                 $em->flush();
  186.             }
  187.             $this->addFlash('success'"Information d'hebergement enregistrées avec succes, continuer a remplir les informations suivantes");
  188.             return $this->redirectToRoute('add_media', [
  189.                         'id' => $experience->getId(),
  190.             ]);
  191.         }
  192.         return $this->render('admin/experience/add/addHebergement.html.twig', [
  193.                     'experience' => $experience,
  194.         ]);
  195.     }
  196.     #[Route('/exp-{id}/add-media'methods: ['GET''POST'], name'add_media')]
  197.     public function addMedia(Request $request$idManagerRegistry $doctrine) {
  198.         $em $doctrine->getManager();
  199.         $experience $em->getRepository(Experience::class)->find($id);
  200.         if ($request->isMethod('post')) {
  201.             if ($request->files->get('image')) {
  202.                 $file $request->files->get('image');
  203.                 $experience->setImage("uploads/medias/experiences/" $experience->getId() . "/" $file->getClientOriginalName());
  204.                 $file->move("uploads/medias/experiences/" $experience->getId() . "/"$file->getClientOriginalName());
  205.             }
  206.             if ($request->files->get('medias')) {
  207.                 $i 0;
  208.                 foreach ($request->files->get('medias') as $file) {
  209.                     $media = new Media();
  210.                     $media->setPath("uploads/medias/experiences/" $experience->getId() . "/" $file->getClientOriginalName());
  211.                     $media->setOrdre('1');
  212.                     $media->setEnabled('1');
  213.                     $file->move("uploads/medias/experiences/" $experience->getId() . "/"$file->getClientOriginalName());
  214.                     $em->persist($media);
  215.                     $experience->addMedia($media);
  216.                     $i++;
  217.                 }
  218.                 $experience->setSteps('5');
  219.                 $em->persist($experience);
  220.                 $em->flush();
  221.             }
  222.             $this->addFlash('success'"Média enregistrées avec succes, continuer a remplir les informations restantes");
  223.             return $this->redirectToRoute('add_price', [
  224.                         'id' => $experience->getId(),
  225.             ]);
  226.         }
  227.         return $this->render('admin/experience/add/addMedia.html.twig', [
  228.                     'experience' => $experience,
  229.         ]);
  230.     }
  231.     #[Route('/exp-{id}/add-price'methods: ['GET''POST'], name'add_price')]
  232.     public function addPrice(Request $request$idManagerRegistry $doctrine) {
  233.         $em $doctrine->getManager();
  234.         $experience $em->getRepository(Experience::class)->find($id);
  235.         if ($request->isMethod('post')) {
  236.             if ($request->get('onpromo') == "on") {
  237.                 $experience->setOnpromo(1);
  238.                 $promotion = new Promotion();
  239.                 $promotion->setPercent($request->get('percent'));
  240.                 $promotion->setDateend(new \DateTime($request->get('dateend')));
  241.                 $promotion->setDatestart(new \DateTime($request->get('datestart')));
  242.                 $em->persist($promotion);
  243.                 $experience->setPromotion($promotion);
  244.                 $em->persist($experience);
  245.             }
  246.             if ($request->get('hashebergement') == "on") {
  247.                 $experience->setHashebergement(1);
  248.                 $i 0;
  249.                 foreach ($request->get('idhebergements') as $c) {
  250.                     $hebergement $em->getRepository(Hebergement::class)->find($request->get('idhebergements')[$i]);
  251.                     $hebergement->setPrice($request->get('pricehebergements')[$i]);
  252.                     $em->persist($hebergement);
  253.                     $em->flush();
  254.                     $i++;
  255.                 }
  256.             }
  257.             $experience->setCancellation($request->get('cancellation'));
  258.             $experience->setCurrency($request->get('currency'));
  259.             $experience->setPrice($request->get('price'));
  260.             $experience->setSteps('6');
  261.             $em->persist($experience);
  262.             $em->flush();
  263.             $this->addFlash('success'"Prix enregistrées avec succes, continuer a remplir les informations restantes");
  264.             return $this->redirectToRoute('add_availability', [
  265.                         'id' => $experience->getId(),
  266.             ]);
  267.         }
  268.         return $this->render('admin/experience/add/addPrice.html.twig', [
  269.                     'experience' => $experience,
  270.         ]);
  271.     }
  272.     #[Route('/exp-{id}/add-availability'methods: ['GET''POST'], name'add_availability')]
  273.     public function addAvailability(Request $request$idManagerRegistry $doctrine) {
  274.         $em $doctrine->getManager();
  275.         $experience $em->getRepository(Experience::class)->find($id);
  276.         if ($request->isMethod('post')) {
  277.             $availability = new Availability();
  278.             $availability->setDuration($request->get('duration'));
  279.             $availability->setAvailabilitytype($request->get('availabilitytype'));
  280. //            avalabilty = 1  - unavalibility = 2
  281.             $availability->setDaysbefore($request->get('daysbefore'));
  282.             $availability->setDatesstart($request->get('availabilities'));
  283.             $availability->setUnavailabilities($request->get('unavailabilities'));
  284.             $em->persist($availability);
  285.             $experience->setAvailability($availability);
  286.             $em->persist($experience);
  287.             $em->flush();
  288.             $this->addFlash('success'"Disponibilité enregistrées avec succes, continuer a remplir les informations restantes");
  289.             return $this->redirectToRoute('exp_overview', [
  290.                         'id' => $experience->getId(),
  291.             ]);
  292.         }
  293.         return $this->render('admin/experience/add/addAvailability.html.twig', [
  294.                     'experience' => $experience,
  295.         ]);
  296.     }
  297.     #[Route('/exp-{id}/overview'methods: ['GET''POST'], name'exp_overview')]
  298.     public function overview($idManagerRegistry $doctrine) {
  299.         $em $doctrine->getManager();
  300.         $experience $em->getRepository(Experience::class)->find($id);
  301.         return $this->render('admin/experience/overview.html.twig', [
  302.                     'experience' => $experience,
  303.         ]);
  304.     }
  305. }