src/Controller/VehiculeController.php line 257
<?phpnamespace App\Controller;use App\Entity\Images;use App\Entity\Vehicules;use App\Entity\VehiculeVariable;use App\Repository\CategoriesRepository;use App\Repository\MarquesRepository;use App\Repository\ModelesRepository;use App\Repository\UserRepository;use App\Repository\VariableConstantsRepository;use App\Repository\VariablesRepository;use App\Repository\VehiculesRepository;use App\Repository\VillesRepository;use App\services\ImageOptimizer;use Doctrine\ORM\EntityManagerInterface;use Knp\Component\Pager\PaginatorInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\File\Exception\FileException;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Notifier\Notification\Notification;use Symfony\Component\Notifier\NotifierInterface;use Symfony\Component\Routing\Annotation\Route;#[Route('/vehicule', name: 'app_vehicule')]class VehiculeController extends AbstractController{private CategoriesRepository $categoriesRepository;private VariablesRepository $variablesRepository ;private VariableConstantsRepository $variableConstantsRepository;private MarquesRepository $marquesRepository;private ModelesRepository $modelesRepository ;private VehiculesRepository $vehiculesRepository;private VillesRepository $villesRepository;private UserRepository $userRepository;private ImageOptimizer $imageOptimizer ;/*** @param CategoriesRepository $categoriesRepository* @param VariablesRepository $variablesRepository* @param VariableConstantsRepository $variableConstantsRepository* @param MarquesRepository $marquesRepository* @param ModelesRepository $modelesRepository* @param VehiculesRepository $vehiculesRepository* @param VillesRepository $villesRepository* @param UserRepository $userRepository*/public function __construct(CategoriesRepository $categoriesRepository, VariablesRepository $variablesRepository,VariableConstantsRepository $variableConstantsRepository, MarquesRepository $marquesRepository,ModelesRepository $modelesRepository, VehiculesRepository $vehiculesRepository,VillesRepository $villesRepository, UserRepository $userRepository , ImageOptimizer $imageOptimizer){$this->categoriesRepository = $categoriesRepository;$this->variablesRepository = $variablesRepository;$this->variableConstantsRepository = $variableConstantsRepository;$this->marquesRepository = $marquesRepository;$this->modelesRepository = $modelesRepository;$this->vehiculesRepository = $vehiculesRepository;$this->villesRepository = $villesRepository;$this->userRepository = $userRepository;$this->imageOptimizer = $imageOptimizer;}#[Route('/', name: 'index')]public function index(Request $request, PaginatorInterface $paginator): Response{$donnees=[];$lastVh =$this->vehiculesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 6);//$marques = $this->marquesRepository->findAll();// $modeles = $this->modelesRepository->findAll();if($request->isMethod("POST")){$categs = $_POST["categs"] ?? null;$marques = $_POST["marques"] ?? null;$modeles = $_POST["modeles"] ?? null;$res= $this->vehiculesRepository->searchVehicule($request,$categs, $modeles, $marques);foreach ($res as $key=>$value){$donnees[] = $this->convertToVehicule($value);}}else{$donnees = $this->vehiculesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 1000);}$vehicules= null;if(count($donnees) > 0){$vehicules = $paginator->paginate($donnees,$request->query->getInt('page', 1),15);}return $this->render('vehicule/index.html.twig', ['vehicules' => $vehicules,// 'modeles'=>$modeles,// 'marques'=>$marques,'lastVh'=>$lastVh]);}#[Route('add', name: 'add')]public function add(Request $request, EntityManagerInterface $entityManager): Response{if(!$this->getUser()){return $this->redirectToRoute('app_login');}$categorie = $this->categoriesRepository->findOneBy(["code"=>UtilsFunctions::VEHICULE_CODE]);$variables = $this->variablesRepository->findBy(["Categorie"=>$categorie]);$marques = $this->marquesRepository->findAll();$modeles = $this->modelesRepository->findAll();$villes = $this->villesRepository->findAll() ;if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-vehicule', $request->request->get('token')))) {$vehicule = $this->buildVehicule($request);if(isset($_POST["variableValue"]))$variableValue = $_POST["variableValue"];$photofile = $request->files->get("photoImage");$newFilename = "";$destination = "";if (!empty($photofile)) {$destination = $this->getParameter('kernel.project_dir') . '/public/uploads/vehicules/' . trim($vehicule->getCode());$newFilename = uniqid() . "-" . $vehicule->getCode() . '.' . $photofile->guessExtension();$vehicule->setPhotoImage($newFilename);}try {$photofile->move($destination, $newFilename);$this->imageOptimizer->resize($destination.'/'.$newFilename);} catch (FileException $ex) {}$entityManager->persist($vehicule);$entityManager->flush();//save Variable valueif(isset($_POST["variableValue"]))foreach($variableValue as $key => $value){$v =$this->variablesRepository->findOneBy(["code"=>$key]);$vehiculeVariable = new VehiculeVariable();$vehiculeVariable->setVehicule($vehicule);$vehiculeVariable->setVariable($v);$vehiculeVariable->setValeur($value);$entityManager->persist($vehiculeVariable);$entityManager->flush();}return $this->redirectToRoute('app_vehiculedetail',['id'=>$vehicule->getId()]);}return $this->render('vehicule/add.html.twig', ['variables'=> $variables,'villes'=>$villes,'modeles'=>$modeles,'marques'=>$marques]);}#[Route('detail/{id}', name: 'detail')]public function detail( Vehicules $vehicule):Response{return $this->render('vehicule/detail.html.twig', ['vehicule' => $vehicule]);}#[Route('detailslug/{slug}', name: 'detailslug')]public function detailSlug(Vehicules $vehicule):Response{$vehicules = $this->vehiculesRepository->findBy(["typeoperation"=>$vehicule->getTypeoperation()], ["pubDate"=>"DESC"], 12);$boutique = $vehicule->getVendeur()->getShop();return $this->render('vehicule/public-detail.html.twig', ['vehicule' => $vehicule,'vehicules'=> $vehicules,'boutique'=>$boutique,]);}public function buildVehicule($request):Vehicules{$vehicule = new Vehicules();$vehicule->setLibelle($request->request->get('libelle'));$vehicule->setDescription($request->request->get('description'));$prix = !empty($request->request->get('prix'))?$request->request->get('prix'):0 ;$vehicule->setPrix($prix);$isnoprice= !empty($request->request->get('isNoprice'));$vehicule->setIsNoprice($isnoprice);$vehicule->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);$vehicule->setVille($this->villesRepository->find($request->request->get('ville')));$vehicule->setVendeur($this->getUser());$vehicule->setSlug(substr($vehicule->getLibelle(),0,6)."-".UtilsFunctions::generateRandomString(5));$vehicule->setCode(UtilsFunctions::generateRandomString(8));$vehicule->setTypeoperation($request->request->get("typeoperation"));$vehicule->setCreatedAt(new \DateTimeImmutable());$marque = $this->marquesRepository->find($request->request->get('marques'));$vehicule->setMarque($marque);$modeles = $this->modelesRepository->find($request->request->get('modele'));$vehicule->setModele($modeles);$vehicule->setEtat($request->request->get('etat'));return $vehicule;}#[Route('publier/{id}', name: 'publication')]public function publier(VehiculesRepository $vehiculesRepository, Vehicules $vehicule, EntityManagerInterface $entityManager,NotifierInterface $notifier): Response{if ($vehicule->getId() > 0) {$vehicule->setStatus(UtilsFunctions::PUBLICATION_STATUS);$vehicule->setPubDate(new \DateTimeImmutable());$entityManager->persist($vehicule);$entityManager->flush();$notifier->send(new Notification("Operation réussie publication effectuée",['browser']));} else {return $this->render('errorrs/notfound.html.twig', ['vehicule' => $vehicule]);}return $this->render('vehicule/detail.html.twig', ['vehicule' => $vehicule]);}#[Route('suspendre/{id}', name: 'suspension')]public function suspendreVehicule(VehiculesRepository $vehiculesRepository, Vehicules $vehicule, EntityManagerInterface $entityManager, NotifierInterface $notifier): Response{if($vehicule->getId() > 0){$vehicule->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);$vehicule->setPubDate(new \DateTimeImmutable());$entityManager->persist($vehicule);$entityManager->flush();$notifier->send(new Notification("Operation réussie le vehicule est suspendu",['browser']));}else{return $this->render('errorrs/notfound.html.twig', ['vehicule' => $vehicule]);}return $this->render('vehicule/detail.html.twig', ['vehicule' => $vehicule]);}#[Route('delete/{id}', name: 'supprimer')]public function supprimerVehicule(VehiculesRepository $vehiculesRepository, Vehicules $vehicule, EntityManagerInterface $entityManager): Response{if($vehicule->getId() > 0){$vehicule->setStatus(UtilsFunctions::DELETE_STATUS);$entityManager->persist($vehicule);$entityManager->flush();}else{return $this->render('errorrs/notfound.html.twig', ['vehicule' => $vehicule]);}return $this->redirectToRoute('app_vendor_home_index');}#[Route('search/{slugCategorie}', name: 'categorie')]public function searchByCategorie(Request $request, PaginatorInterface $paginator, $slugCategorie): Response{$lastVh =$this->vehiculesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 6);$categories = $this->categoriesRepository->findOneBy(["slug"=>trim($slugCategorie)]);$donnees=[];$searchCategorie = $categories ;$marques = $this->marquesRepository->findAll();$modeles = $this->modelesRepository->findAll();if($request->isMethod("POST")){$categs = $_POST["categs"] ?? null;$marques = $_POST["marques"] ?? null;$modeles = $_POST["modeles"] ?? null;$res= $this->vehiculesRepository->searchVehicule($request,$categs, $modeles, $marques);foreach ($res as $key=>$value){$donnees[] = $this->convertToVehicule($value);}}else if (UtilsFunctions::VEHICULE_A_LOUER_CODE == $categories->getCode()){$donnees = $this->vehiculesRepository->findBy(["typeoperation"=>"LOCATION"], ["pubDate"=>"DESC",], 1000);}else if(UtilsFunctions::VEHICULE_A_VENDRE_CODE == $categories->getCode()){$donnees = $this->vehiculesRepository->findBy(["typeoperation"=>"VENTE"], ["pubDate"=>"DESC",], 1000);}else{$donnees = $this->vehiculesRepository->findBy([], ["pubDate"=>"DESC",], 1000);}$vehicules= null;if(count($donnees) > 0){$vehicules = $paginator->paginate($donnees,$request->query->getInt('page', 1),15);}return $this->render('vehicule/index.html.twig', ['vehicules' => $vehicules,'modeles'=>$modeles,'marques'=>$marques,'searchCategorie'=>$searchCategorie,'lastVh'=>$lastVh,]);}#[Route('image/{id}', name: 'addimage')]public function addImage(Request $request, EntityManagerInterface $entityManager,VehiculesRepository $vehiculesRepository, Vehicules $vehicule){if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-image', $request->request->get('token')))) {$vehiculeId = $request->request->get('id');$vhForImage = $vehiculesRepository->find($vehiculeId);$image1 = $request->files->get("image1");$image2 = $request->files->get("image2");$image3 = $request->files->get("image3");$image4 = $request->files->get("image4");$this->deleteOldImage($vhForImage);$this->saveImage($vhForImage,$image1, $entityManager);$this->saveImage($vhForImage,$image2,$entityManager);$this->saveImage($vhForImage,$image3, $entityManager);$this->saveImage($vhForImage,$image4, $entityManager);return $this->redirectToRoute('app_vehiculedetail',['id'=>$vehiculeId]);}return $this->render('vehicule/add-image.html.twig', ['vehicule' => $vehicule]);}public function saveImage(Vehicules $vehicule, $imageFile, EntityManagerInterface $entityManager){$imageTosave = new Images();if (!empty($imageFile)) {$destination = $this->getParameter('kernel.project_dir') . '/public/uploads/vehicules/' . trim($vehicule->getCode());$code = UtilsFunctions::generateRandomString(4);$newFilename = uniqid() . "-" .$code . '.' . $imageFile->guessExtension();$imageTosave->setCode($code);$imageTosave->setNom($newFilename);$imageTosave->setVehicule($vehicule);try {$imageFile->move($destination, $newFilename);$this->imageOptimizer->resize($destination.'/'.$newFilename);$entityManager->persist($imageTosave);$entityManager->flush();} catch (FileException $ex) {}}}public function deleteOldImage(Vehicules $vehicule){$images = $vehicule->getImagesVh() ;if(!empty($images)){for($i=0; $i < $images->count() ; $i++){$image = $images->get($i);$this->imagesRepository->remove($image);}}}private function convertToVehicule($value):Vehicules{$vehicule = new Vehicules();$vehicule->setId($value["id"]);$vehicule->setVendeur($this->userRepository->find($value["vendeur_id"]));$vehicule->setLibelle($value['libelle']);$vehicule->setDescription($value["description"]);$vehicule->setSlug($value["slug"]);$vehicule->setCode($value["code"]);$vehicule->setTypeoperation($value["typeoperation"]);$vehicule->setStatus($value["status"]);$vehicule->setPrix($value["prix"]);$vehicule->setIsNoprice($value["is_noprice"]);$vehicule->setPhotoImage($value["photo_image"]);$vehicule->setMarque($this->marquesRepository->find($value["marque_id"]));$vehicule->setVille($this->villesRepository->find($value["ville_id"]));if(!empty($value["modele_id"]))$vehicule->setModele($this->modelesRepository->find($value["modele_id"]));$vehicule->setCreatedAt( new \DateTimeImmutable($value["created_at"]));$vehicule->setPubDate( new \DateTimeImmutable($value["pub_date"]));// $vehicule->setCategorie($this->categoriesRepository->find($value["categorie_id"]));return $vehicule ;}}