src/Controller/VehiculeController.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Images;
  4. use App\Entity\Vehicules;
  5. use App\Entity\VehiculeVariable;
  6. use App\Repository\CategoriesRepository;
  7. use App\Repository\MarquesRepository;
  8. use App\Repository\ModelesRepository;
  9. use App\Repository\UserRepository;
  10. use App\Repository\VariableConstantsRepository;
  11. use App\Repository\VariablesRepository;
  12. use App\Repository\VehiculesRepository;
  13. use App\Repository\VillesRepository;
  14. use App\services\ImageOptimizer;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Notifier\Notification\Notification;
  22. use Symfony\Component\Notifier\NotifierInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. #[Route('/vehicule'name'app_vehicule')]
  25. class VehiculeController extends AbstractController
  26. {
  27.     private CategoriesRepository $categoriesRepository;
  28.     private VariablesRepository $variablesRepository ;
  29.     private VariableConstantsRepository $variableConstantsRepository;
  30.     private MarquesRepository $marquesRepository;
  31.     private ModelesRepository $modelesRepository ;
  32.     private VehiculesRepository $vehiculesRepository;
  33.     private VillesRepository $villesRepository;
  34.     private  UserRepository $userRepository;
  35.     private ImageOptimizer $imageOptimizer ;
  36.     /**
  37.      * @param CategoriesRepository $categoriesRepository
  38.      * @param VariablesRepository $variablesRepository
  39.      * @param VariableConstantsRepository $variableConstantsRepository
  40.      * @param MarquesRepository $marquesRepository
  41.      * @param ModelesRepository $modelesRepository
  42.      * @param VehiculesRepository $vehiculesRepository
  43.      * @param VillesRepository $villesRepository
  44.      * @param UserRepository $userRepository
  45.      */
  46.     public function __construct(CategoriesRepository $categoriesRepositoryVariablesRepository $variablesRepository,
  47.                                 VariableConstantsRepository $variableConstantsRepositoryMarquesRepository $marquesRepository,
  48.                                 ModelesRepository $modelesRepositoryVehiculesRepository $vehiculesRepository,
  49.                                 VillesRepository $villesRepositoryUserRepository $userRepository ImageOptimizer $imageOptimizer)
  50.     {
  51.         $this->categoriesRepository $categoriesRepository;
  52.         $this->variablesRepository $variablesRepository;
  53.         $this->variableConstantsRepository $variableConstantsRepository;
  54.         $this->marquesRepository $marquesRepository;
  55.         $this->modelesRepository $modelesRepository;
  56.         $this->vehiculesRepository $vehiculesRepository;
  57.         $this->villesRepository $villesRepository;
  58.         $this->userRepository $userRepository;
  59.         $this->imageOptimizer $imageOptimizer;
  60.     }
  61.     #[Route('/'name'index')]
  62.     public function index(Request $requestPaginatorInterface $paginator): Response
  63.     {
  64.         $donnees=[];
  65.         $lastVh =$this->vehiculesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 6);
  66.         //$marques = $this->marquesRepository->findAll();
  67.        // $modeles = $this->modelesRepository->findAll();
  68.         if($request->isMethod("POST")){
  69.             $categs $_POST["categs"] ?? null;
  70.             $marques $_POST["marques"] ?? null;
  71.             $modeles $_POST["modeles"] ?? null;
  72.             $res=  $this->vehiculesRepository->searchVehicule($request,$categs$modeles$marques);
  73.             foreach ($res as $key=>$value){
  74.                 $donnees[] = $this->convertToVehicule($value);
  75.             }
  76.         }else{
  77.             $donnees $this->vehiculesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 1000);
  78.         }
  79.         $vehiculesnull;
  80.         if(count($donnees) > 0){
  81.             $vehicules $paginator->paginate(
  82.                 $donnees,
  83.                 $request->query->getInt('page'1),15);
  84.         }
  85.         return $this->render('vehicule/index.html.twig', [
  86.             'vehicules' => $vehicules,
  87.            // 'modeles'=>$modeles,
  88.            // 'marques'=>$marques,
  89.             'lastVh'=>$lastVh
  90.         ]);
  91.     }
  92.     #[Route('add'name'add')]
  93.     public function add(Request $request,  EntityManagerInterface $entityManager): Response
  94.     {
  95.         if(!$this->getUser()){
  96.             return $this->redirectToRoute('app_login');
  97.         }
  98.         $categorie $this->categoriesRepository->findOneBy(["code"=>UtilsFunctions::VEHICULE_CODE]);
  99.         $variables $this->variablesRepository->findBy(["Categorie"=>$categorie]);
  100.         $marques $this->marquesRepository->findAll();
  101.         $modeles $this->modelesRepository->findAll();
  102.         $villes =  $this->villesRepository->findAll() ;
  103.         if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-vehicule'$request->request->get('token')))) {
  104.             $vehicule $this->buildVehicule($request);
  105.             if(isset($_POST["variableValue"]))
  106.                 $variableValue $_POST["variableValue"];
  107.             $photofile $request->files->get("photoImage");
  108.             $newFilename "";
  109.             $destination "";
  110.             if (!empty($photofile)) {
  111.                 $destination $this->getParameter('kernel.project_dir') . '/public/uploads/vehicules/' trim($vehicule->getCode());
  112.                 $newFilename uniqid() . "-" $vehicule->getCode() . '.' $photofile->guessExtension();
  113.                 $vehicule->setPhotoImage($newFilename);
  114.             }
  115.                 try {
  116.                     $photofile->move($destination$newFilename);
  117.                     $this->imageOptimizer->resize($destination.'/'.$newFilename);
  118.                 } catch (FileException $ex) {
  119.                 }
  120.                 $entityManager->persist($vehicule);
  121.                 $entityManager->flush();
  122.                 //save Variable value
  123.                 if(isset($_POST["variableValue"]))
  124.                 foreach($variableValue as $key => $value)
  125.                 {
  126.                     $v =$this->variablesRepository->findOneBy(["code"=>$key]);
  127.                     $vehiculeVariable = new VehiculeVariable();
  128.                     $vehiculeVariable->setVehicule($vehicule);
  129.                     $vehiculeVariable->setVariable($v);
  130.                     $vehiculeVariable->setValeur($value);
  131.                     $entityManager->persist($vehiculeVariable);
  132.                     $entityManager->flush();
  133.                 }
  134.                 return $this->redirectToRoute('app_vehiculedetail',['id'=>$vehicule->getId()]);
  135.         }
  136.         return $this->render('vehicule/add.html.twig', [
  137.             'variables'=> $variables,
  138.             'villes'=>$villes,
  139.             'modeles'=>$modeles,
  140.             'marques'=>$marques
  141.         ]);
  142.     }
  143.     #[Route('detail/{id}'name'detail')]
  144.     public function detailVehicules $vehicule):Response
  145.     {
  146.         return $this->render('vehicule/detail.html.twig', [
  147.             'vehicule' => $vehicule
  148.         ]);
  149.     }
  150.     #[Route('detailslug/{slug}'name'detailslug')]
  151.     public function detailSlug(Vehicules $vehicule):Response
  152.     {
  153.         $vehicules $this->vehiculesRepository->findBy(["typeoperation"=>$vehicule->getTypeoperation()], ["pubDate"=>"DESC"], 12);
  154.         return $this->render('vehicule/public-detail.html.twig', [
  155.             'vehicule' => $vehicule,
  156.             'vehicules'=> $vehicules
  157.         ]);
  158.     }
  159.     public  function buildVehicule($request):Vehicules
  160.     {
  161.         $vehicule = new Vehicules();
  162.         $vehicule->setLibelle($request->request->get('libelle'));
  163.         $vehicule->setDescription($request->request->get('description'));
  164.         $prix = !empty($request->request->get('prix'))?$request->request->get('prix'):;
  165.         $vehicule->setPrix($prix);
  166.         $isnoprice= !empty($request->request->get('isNoprice'));
  167.         $vehicule->setIsNoprice($isnoprice);
  168.         $vehicule->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);
  169.         $vehicule->setVille($this->villesRepository->find($request->request->get('ville')));
  170.         $vehicule->setVendeur($this->getUser());
  171.         $vehicule->setSlug(substr($vehicule->getLibelle(),0,6)."-".UtilsFunctions::generateRandomString(5));
  172.         $vehicule->setCode(UtilsFunctions::generateRandomString(8));
  173.         $vehicule->setTypeoperation($request->request->get("typeoperation"));
  174.         $vehicule->setCreatedAt(new \DateTimeImmutable());
  175.         $marque $this->marquesRepository->find($request->request->get('marques'));
  176.         $vehicule->setMarque($marque);
  177.         $modeles $this->modelesRepository->find($request->request->get('modele'));
  178.         $vehicule->setModele($modeles);
  179.         $vehicule->setEtat($request->request->get('etat'));
  180.         return  $vehicule;
  181.     }
  182.     #[Route('publier/{id}'name'publication')]
  183.     public function publier(VehiculesRepository $vehiculesRepositoryVehicules $vehiculeEntityManagerInterface $entityManager,NotifierInterface $notifier): Response
  184.     {
  185.         if ($vehicule->getId() > 0) {
  186.             $vehicule->setStatus(UtilsFunctions::PUBLICATION_STATUS);
  187.             $vehicule->setPubDate(new \DateTimeImmutable());
  188.             $entityManager->persist($vehicule);
  189.             $entityManager->flush();
  190.             $notifier->send(new Notification("Operation rĂ©ussie  publication effectuĂ©e",['browser']));
  191.         } else {
  192.             return $this->render('errorrs/notfound.html.twig', [
  193.                 'vehicule' => $vehicule
  194.             ]);
  195.         }
  196.         return $this->render('vehicule/detail.html.twig', [
  197.             'vehicule' => $vehicule
  198.         ]);
  199.     }
  200.     #[Route('suspendre/{id}'name'suspension')]
  201.     public function suspendreVehicule(VehiculesRepository $vehiculesRepository,  Vehicules $vehiculeEntityManagerInterface $entityManagerNotifierInterface $notifier): Response{
  202.         if($vehicule->getId() > 0){
  203.             $vehicule->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);
  204.             $vehicule->setPubDate(new \DateTimeImmutable());
  205.             $entityManager->persist($vehicule);
  206.             $entityManager->flush();
  207.             $notifier->send(new Notification("Operation rĂ©ussie  le vehicule est suspendu",['browser']));
  208.         }else{
  209.             return $this->render('errorrs/notfound.html.twig', [
  210.                 'vehicule' => $vehicule
  211.             ]);
  212.         }
  213.         return $this->render('vehicule/detail.html.twig', [
  214.             'vehicule' => $vehicule
  215.         ]);
  216.     }
  217.     #[Route('delete/{id}'name'supprimer')]
  218.     public function supprimerVehicule(VehiculesRepository $vehiculesRepositoryVehicules $vehiculeEntityManagerInterface $entityManager): Response{
  219.         if($vehicule->getId() > 0){
  220.             $vehicule->setStatus(UtilsFunctions::DELETE_STATUS);
  221.             $entityManager->persist($vehicule);
  222.             $entityManager->flush();
  223.         }else{
  224.             return $this->render('errorrs/notfound.html.twig', [
  225.                 'vehicule' => $vehicule
  226.             ]);
  227.         }
  228.         return $this->redirectToRoute('app_vendor_home_index');
  229.     }
  230.     #[Route('search/{slugCategorie}'name'categorie')]
  231.     public function searchByCategorie(Request $requestPaginatorInterface $paginator$slugCategorie): Response
  232.     {
  233.         $lastVh =$this->vehiculesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 6);
  234.         $categories $this->categoriesRepository->findOneBy(["slug"=>trim($slugCategorie)]);
  235.         $donnees=[];
  236.         $searchCategorie $categories ;
  237.         $marques $this->marquesRepository->findAll();
  238.         $modeles $this->modelesRepository->findAll();
  239.         if($request->isMethod("POST")){
  240.             $categs $_POST["categs"] ?? null;
  241.             $marques $_POST["marques"] ?? null;
  242.             $modeles $_POST["modeles"] ?? null;
  243.             $res=  $this->vehiculesRepository->searchVehicule($request,$categs$modeles$marques);
  244.             foreach ($res as $key=>$value){
  245.                 $donnees[] = $this->convertToVehicule($value);
  246.             }
  247.         }else if (UtilsFunctions::VEHICULE_A_LOUER_CODE == $categories->getCode()){
  248.             $donnees $this->vehiculesRepository->findBy(["typeoperation"=>"LOCATION"], ["pubDate"=>"DESC",], 1000);
  249.         }else if(UtilsFunctions::VEHICULE_A_VENDRE_CODE == $categories->getCode()){
  250.             $donnees $this->vehiculesRepository->findBy(["typeoperation"=>"VENTE"], ["pubDate"=>"DESC",], 1000);
  251.         }else{
  252.             $donnees $this->vehiculesRepository->findBy([], ["pubDate"=>"DESC",], 1000);
  253.         }
  254.         $vehiculesnull;
  255.         if(count($donnees) > 0){
  256.             $vehicules $paginator->paginate(
  257.                 $donnees,
  258.                 $request->query->getInt('page'1),15);
  259.         }
  260.         return $this->render('vehicule/index.html.twig', [
  261.             'vehicules' => $vehicules,
  262.             'modeles'=>$modeles,
  263.             'marques'=>$marques,
  264.             'searchCategorie'=>$searchCategorie,
  265.             'lastVh'=>$lastVh,
  266.         ]);
  267.     }
  268.     #[Route('image/{id}'name'addimage')]
  269.     public function addImage(Request $request,  EntityManagerInterface $entityManager,VehiculesRepository $vehiculesRepositoryVehicules $vehicule){
  270.         if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-image'$request->request->get('token')))) {
  271.             $vehiculeId $request->request->get('id');
  272.             $vhForImage $vehiculesRepository->find($vehiculeId);
  273.             $image1 $request->files->get("image1");
  274.             $image2 $request->files->get("image2");
  275.             $image3 $request->files->get("image3");
  276.             $image4 $request->files->get("image4");
  277.             $this->deleteOldImage($vhForImage);
  278.             $this->saveImage($vhForImage,$image1$entityManager);
  279.             $this->saveImage($vhForImage,$image2,$entityManager);
  280.             $this->saveImage($vhForImage,$image3$entityManager);
  281.             $this->saveImage($vhForImage,$image4$entityManager);
  282.             return $this->redirectToRoute('app_vehiculedetail',['id'=>$vehiculeId]);
  283.         }
  284.         return $this->render('vehicule/add-image.html.twig', [
  285.             'vehicule' => $vehicule
  286.         ]);
  287.     }
  288.     public function saveImage(Vehicules $vehicule$imageFileEntityManagerInterface $entityManager){
  289.         $imageTosave = new Images();
  290.         if (!empty($imageFile)) {
  291.             $destination $this->getParameter('kernel.project_dir') . '/public/uploads/vehicules/' trim($vehicule->getCode());
  292.             $code UtilsFunctions::generateRandomString(4);
  293.             $newFilename uniqid() . "-" .$code '.' $imageFile->guessExtension();
  294.             $imageTosave->setCode($code);
  295.             $imageTosave->setNom($newFilename);
  296.             $imageTosave->setVehicule($vehicule);
  297.             try {
  298.                 $imageFile->move($destination$newFilename);
  299.                 $this->imageOptimizer->resize($destination.'/'.$newFilename);
  300.                 $entityManager->persist($imageTosave);
  301.                 $entityManager->flush();
  302.             } catch (FileException $ex) {
  303.             }
  304.         }
  305.     }
  306.     public function deleteOldImage(Vehicules $vehicule){
  307.         $images $vehicule->getImagesVh() ;
  308.         if(!empty($images)){
  309.             for($i=0$i $images->count() ; $i++){
  310.                 $image $images->get($i);
  311.                 $this->imagesRepository->remove($image);
  312.             }
  313.         }
  314.     }
  315.     private function  convertToVehicule($value):Vehicules{
  316.         $vehicule = new Vehicules();
  317.         $vehicule->setId($value["id"]);
  318.         $vehicule->setVendeur($this->userRepository->find($value["vendeur_id"]));
  319.         $vehicule->setLibelle($value['libelle']);
  320.         $vehicule->setDescription($value["description"]);
  321.         $vehicule->setSlug($value["slug"]);
  322.         $vehicule->setCode($value["code"]);
  323.         $vehicule->setTypeoperation($value["typeoperation"]);
  324.         $vehicule->setStatus($value["status"]);
  325.         $vehicule->setPrix($value["prix"]);
  326.         $vehicule->setIsNoprice($value["is_noprice"]);
  327.         $vehicule->setPhotoImage($value["photo_image"]);
  328.         $vehicule->setMarque($this->marquesRepository->find($value["marque_id"]));
  329.         $vehicule->setVille($this->villesRepository->find($value["ville_id"]));
  330.         if(!empty($value["modele_id"]))
  331.             $vehicule->setModele($this->modelesRepository->find($value["modele_id"]));
  332.         $vehicule->setCreatedAt( new \DateTimeImmutable($value["created_at"]));
  333.         $vehicule->setPubDate( new \DateTimeImmutable($value["pub_date"]));
  334.       //  $vehicule->setCategorie($this->categoriesRepository->find($value["categorie_id"]));
  335.         return $vehicule ;
  336.     }
  337. }