src/Controller/ImmeubleController.php line 107
<?phpnamespace App\Controller;use App\Entity\Articles;use App\Entity\Categories;use App\Entity\Images;use App\Entity\Immeubles;use App\Entity\ImmeubleVariable;use App\Repository\ArticlesRepository;use App\Repository\BoutiquesRepository;use App\Repository\CategoriesRepository;use App\Repository\ImagesRepository;use App\Repository\ImmeublesRepository;use App\Repository\QuartiersRepository;use App\Repository\UserRepository;use App\Repository\VariableConstantsRepository;use App\Repository\VariablesRepository;use App\Repository\VillesRepository;use App\services\ImageOptimizer;use Doctrine\ORM\EntityManagerInterface;use JetBrains\PhpStorm\Immutable;use Knp\Component\Pager\PaginatorInterface;use phpDocumentor\Reflection\Types\Boolean;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('/immeuble', name: 'app_immeuble')]class ImmeubleController extends AbstractController{private CategoriesRepository $categoriesRepository;private VariablesRepository $variablesRepository ;private VariableConstantsRepository $variableConstantsRepository;private VillesRepository $villesRepository ;private QuartiersRepository $quartiersRepository ;private ImmeublesRepository $immeublesRepository ;private UserRepository $userRepository ;private ImagesRepository $imagesRepository;private ImageOptimizer $imageOptimizer ;private BoutiquesRepository $boutiqueRepository;/*** @param CategoriesRepository $categoriesRepository* @param VariablesRepository $variablesRepository* @param VariableConstantsRepository $variableConstantsRepository* @param VillesRepository $villesRepository* @param QuartiersRepository $quartiersRepository* @param ImmeublesRepository $immeublesRepository* @param UserRepository $userRepository* @param ImagesRepository $imagesRepository*/public function __construct(CategoriesRepository $categoriesRepository, VariablesRepository $variablesRepository,VariableConstantsRepository $variableConstantsRepository, VillesRepository $villesRepository,QuartiersRepository $quartiersRepository, ImmeublesRepository $immeublesRepository,UserRepository $userRepository, ImagesRepository $imagesRepository, ImageOptimizer $imageOptimizer, BoutiquesRepository $boutiqueRepository){$this->categoriesRepository = $categoriesRepository;$this->variablesRepository = $variablesRepository;$this->variableConstantsRepository = $variableConstantsRepository;$this->villesRepository = $villesRepository;$this->quartiersRepository = $quartiersRepository;$this->immeublesRepository = $immeublesRepository;$this->userRepository = $userRepository;$this->ImagesRepository = $imagesRepository;$this->imageOptimizer = $imageOptimizer;$this->boutiqueRepository = $boutiqueRepository;}#[Route('/', name: 'index')]public function index(Request $request, PaginatorInterface $paginator): Response{$search = false ;$donnees=[];$lastImmeubles = $this->immeublesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC"],6);if($request->isMethod("POST")){$search = true ;$categs = $_POST["categs"] ?? null;$villes = $_POST["villes"] ?? null;$quartiers = $_POST["quartiers"] ?? null;$res= $this->immeublesRepository->searchImmeuble($request,$villes, $quartiers, $categs);foreach ($res as $key=>$value){$donnees[] = $this->convertToImmeuble($value);}}else{$donnees = $this->immeublesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 1000);}$immeubles=null;if(count($donnees) > 0){$immeubles = $paginator->paginate($donnees,$request->query->getInt('page', 1),15);}return $this->render('immeuble/index.html.twig', ['immeubles' => $immeubles,'lastImmeubles'=> $lastImmeubles,'search'=> $search]);}#[Route('search/{slugCategorie}', name: 'categorie')]public function searchByCategorie(Request $request, PaginatorInterface $paginator, $slugCategorie): Response{$search = true ;$categories = $this->categoriesRepository->findOneBy(["slug"=>trim($slugCategorie)]);$donnees=[];$searchCategorie = $categories ;$lastImmeubles = $this->immeublesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC"],6);if($request->isMethod("POST")){$categs = $_POST["categs"] ?? null;$villes = $_POST["villes"] ?? null;$quartiers = $_POST["quartiers"] ?? null;$res= $this->immeublesRepository->searchImmeuble($request,$villes, $quartiers, $categs);foreach ($res as $key=>$value){$donnees[] = $this->convertToImmeuble($value);}}else if(UtilsFunctions::IMMO_CODE == $categories->getCode()) {$donnees = $this->immeublesRepository->findBy([], ["pubDate"=>"DESC",], 1000);}else{$donnees = $this->immeublesRepository->findBy(["categorie"=>$categories], ["pubDate"=>"DESC",], 1000);}$immeubles=null;if(count($donnees) > 0){$immeubles = $paginator->paginate($donnees,$request->query->getInt('page', 1),15);}return $this->render('immeuble/index.html.twig', ['immeubles' => $immeubles,'searchCategorie'=>$searchCategorie,'lastImmeubles'=> $lastImmeubles,'search'=> $search]);}#[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::IMMO_CODE]);$sousCateg= $this->categoriesRepository->findBy(["parent"=>$categorie],["libelle"=>'ASC']);$variables = $this->variablesRepository->findBy(["Categorie"=>$categorie]);$villes = $this->villesRepository->findAll() ;$immeuble = new Immeubles();if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-immeuble', $request->request->get('token')))) {if(isset($_POST["variableValue"]))$variableValue = $_POST["variableValue"];$immeuble = $this->buildImmeuble($request);$photofile = $request->files->get("photo");$newFilename = "";$destination = "";if (!empty($photofile)) {$destination = $this->getParameter('kernel.project_dir') . '/public/uploads/immeubles/' . trim($immeuble->getCode());$newFilename = uniqid() . "-" . $immeuble->getCode() . '.' . $photofile->guessExtension();$immeuble->setPhoto($newFilename);}if ($this->immeubleCheck($immeuble)) {try {$photofile->move($destination, $newFilename);$this->imageOptimizer->resize($destination.'/'.$newFilename);} catch (FileException $ex) {}$entityManager->persist($immeuble);$entityManager->flush();//save Variable valueif(isset($_POST["variableValue"]))foreach($variableValue as $key => $value){$v =$this->variablesRepository->findOneBy(["code"=>$key]);$immeubleVariable = new ImmeubleVariable();$immeubleVariable->setImmeuble($immeuble);$immeubleVariable->setVariable($v);$immeubleVariable->setValeur($value);$entityManager->persist($immeubleVariable);$entityManager->flush();}return $this->redirectToRoute('app_immeubledetail',['id'=>$immeuble->getId()]);}}return $this->render('immeuble/add.html.twig', ['sousCategories' => $sousCateg,'variables'=> $variables,'villes'=>$villes]);}#[Route('detail/{id}', name: 'detail')]public function detail(ImagesRepository $imagesRepository, Immeubles $immeuble):Response{return $this->render('immeuble/detail.html.twig', ['immeuble' => $immeuble]);}#[Route('quartier', name: 'quartier')]public function listquatierByville(Request $request,VillesRepository $villesRepository, QuartiersRepository $quartiersRepository){$ouptut= array();$idville= $request->request->get('id');$ville= $villesRepository->findBy(["id"=>$idville]);$quartiers = $quartiersRepository->findBy(["ville"=>$ville]);foreach($quartiers as $q ){array_push($ouptut,array($q->getId(),$q->getNom()));}return new \Symfony\Component\HttpFoundation\JsonResponse($ouptut);}#[Route('detailslug/{slug}', name: 'detailslug')]public function detailSlug(ImagesRepository $imagesRepository, Immeubles $immeuble):Response{$immeubles = $this->immeublesRepository->findBy(["categorie"=>$immeuble->getCategorie()], ["pubDate"=>"DESC"], 12);$boutique = $immeuble->getVendeur()->getShop();return $this->render('immeuble/public-detail.html.twig', ['immeuble' => $immeuble,'immeubles'=>$immeubles,'boutique'=>$boutique,]);}#[Route('publier/{id}', name: 'publication')]public function publierImmeuble(ImmeublesRepository $immeublesRepository, Immeubles $immeubles, EntityManagerInterface $entityManager,NotifierInterface $notifier): Response{if ($immeubles->getId() > 0) {$immeubles->setStatus(UtilsFunctions::PUBLICATION_STATUS);$immeubles->setPubDate(new \DateTimeImmutable());$entityManager->persist($immeubles);$entityManager->flush();$notifier->send(new Notification("Operation réussie publication effectuée",['browser']));} else {return $this->render('errorrs/notfound.html.twig', ['immeuble' => $immeubles]);}return $this->render('immeuble/detail.html.twig', ['immeuble' => $immeubles]);}#[Route('suspendre/{id}', name: 'suspension')]public function suspendreImmeuble(ImmeublesRepository $immeublesRepository, Immeubles $immeubles, EntityManagerInterface $entityManager, NotifierInterface $notifier): Response{if($immeubles->getId() > 0){$immeubles->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);$immeubles->setPubDate(new \DateTimeImmutable());$entityManager->persist($immeubles);$entityManager->flush();$notifier->send(new Notification("Operation réussie l'immeuble est suspendu",['browser']));}else{return $this->render('errorrs/notfound.html.twig', ['immeubles' => $immeubles]);}return $this->render('vehicule/detail.html.twig', ['immeubles' => $immeubles]);}#[Route('delete/{id}', name: 'supprimer')]public function supprimerImmeuble(ImmeublesRepository $immeublesRepository, Immeubles $immeubles, EntityManagerInterface $entityManager): Response{if($immeubles->getId() > 0){$immeubles->setStatus(UtilsFunctions::DELETE_STATUS);$entityManager->persist($immeubles);$entityManager->flush();}else{return $this->render('errorrs/notfound.html.twig', ['immeubles' => $immeubles]);}return $this->redirectToRoute('app_vendor_home_index');}#[Route('image/{id}', name: 'addimage')]public function addImage(Request $request, EntityManagerInterface $entityManager,ImmeublesRepository $immeublesRepository, Immeubles $immeubles){if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-immeuble', $request->request->get('token')))) {$immeublesId = $request->request->get('id');$immeubleForImage = $immeublesRepository->find($immeublesId);$image1 = $request->files->get("image1");$image2 = $request->files->get("image2");$image3 = $request->files->get("image3");$image4 = $request->files->get("image4");$this->deleteOldImage($immeubleForImage);$this->saveImage($immeubleForImage,$image1, $entityManager);$this->saveImage($immeubleForImage,$image2,$entityManager);$this->saveImage($immeubleForImage,$image3, $entityManager);$this->saveImage($immeubleForImage,$image4, $entityManager);return $this->redirectToRoute('app_immeubledetail',['id'=>$immeublesId]);}return $this->render('immeuble/add-image.html.twig', ['immeuble' => $immeubles]);}public function saveImage(Immeubles $immeuble, $imageFile, EntityManagerInterface $entityManager){$imageTosave = new Images();if (!empty($imageFile)) {$destination = $this->getParameter('kernel.project_dir') . '/public/uploads/immeubles/' . trim($immeuble->getCode());$code = UtilsFunctions::generateRandomString(4);$newFilename = uniqid() . "-" .$code . '.' . $imageFile->guessExtension();$imageTosave->setCode($code);$imageTosave->setNom($newFilename);$imageTosave->setImmeuble($immeuble);try {$imageFile->move($destination, $newFilename);$this->imageOptimizer->resize($destination.'/'.$newFilename);$entityManager->persist($imageTosave);$entityManager->flush();} catch (FileException $ex) {throw new \Exception('Erreur enregistrement du fichier image');}}}public function deleteOldImage(Immeubles $immeuble){$images = $immeuble->getImages() ;if(!$images->isEmpty()){for($i=0; $i < $images->count() ; $i++){$image = $images->get($i);$this->imagesRepository->remove($image);}}}public function buildImmeuble($request):Immeubles{$immeuble = new Immeubles();$immeuble->setLibelle($request->request->get('libelle'));$immeuble->setDescription($request->request->get('description'));$prix = !empty($request->request->get('prix'))?$request->request->get('prix'):0 ;$immeuble->setPrix($prix);$isnoprice= !empty($request->request->get('isNoprice'));$immeuble->setIsNoprice($isnoprice);$immeuble->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);$immeuble->setCategorie($this->categoriesRepository->find($request->request->get('categorie')));$immeuble->setVille($this->villesRepository->find($request->request->get('ville')));$quartierId = $request->request->get("quartier");if(!empty($quartierId)){$quartier = $this->quartiersRepository->find($quartierId);if($quartier != null)$immeuble->setQuartier($quartier);}$immeuble->setVendeur($this->getUser());$immeuble->setSlug(substr($immeuble->getLibelle(),0,6)."-".UtilsFunctions::generateRandomString(5));$immeuble->setCode(UtilsFunctions::generateRandomString(8));$immeuble->setTypeoperation($request->request->get("typeoperation"));$immeuble->setCreatedAt(new \DateTimeImmutable());return $immeuble;}private function immeubleCheck($immeuble):bool{return true;}private function convertToImmeuble($value):Immeubles{$immeuble = new Immeubles();$immeuble->setId($value["id"]);$immeuble->setVendeur($this->userRepository->find($value["vendeur_id"]));$immeuble->setLibelle($value['libelle']);$immeuble->setDescription($value["description"]);$immeuble->setSlug($value["slug"]);$immeuble->setCode($value["code"]);$immeuble->setTypeoperation($value["typeoperation"]);$immeuble->setStatus($value["status"]);$immeuble->setPrix($value["prix"]);$immeuble->setIsNoprice($value["is_noprice"]);$immeuble->setPhoto($value["photo"]);$immeuble->setVille($this->villesRepository->find($value["ville_id"]));if(!empty($value["quartier_id"]))$immeuble->setQuartier($this->quartiersRepository->find($value["quartier_id"]));$immeuble->setCreatedAt( new \DateTimeImmutable($value["created_at"]));$immeuble->setPubDate( new \DateTimeImmutable($value["pub_date"]));$immeuble->setCategorie($this->categoriesRepository->find($value["categorie_id"]));return $immeuble ;}}