src/Controller/AdvertisementController.php line 225

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Elastica\ReviewSearch;
  4. use App\Entity\Advantage;
  5. use App\Entity\Advertisement;
  6. use App\Entity\AdvertisementAdvantages;
  7. use App\Entity\Files;
  8. use App\Entity\RentalRecord;
  9. use App\Entity\Subscription;
  10. use App\Entity\Meeting;
  11. use App\Entity\Review;
  12. use App\Form\AdvertisementForm;
  13. use App\Form\SearchAdvertisementForm;
  14. use App\Service\GeocodingService;
  15. use App\Service\FileUploader;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\Finder\Exception\AccessDeniedException;
  19. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  20. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  21. use Symfony\Component\HttpFoundation\File\UploadedFile;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Router;
  26. use Symfony\Component\Routing\RouterInterface;
  27. use Symfony\Component\Serializer\SerializerInterface;
  28. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  29. use Cocur\Slugify\SlugifyInterface;
  30. use Symfony\Component\Translation\TranslatorInterface;
  31. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  32. class AdvertisementController extends AbstractController
  33. {
  34.     private $slugify;
  35.     /**
  36.      * @var TranslatorInterface
  37.      */
  38.     private $translator;
  39.     private $parameterBag;
  40.     public function __construct(ParameterBagInterface $parameterBag)
  41.     {
  42.         $this->parameterBag $parameterBag;
  43.     }
  44.     /**
  45.      * Add/Edit advertisement
  46.      * @param Request $request
  47.      * @return Response
  48.      * @Route("/advertisement/edit/{id}", name="advertisement_edit")
  49.      */
  50.     public function edit($id 0,Request $requestFileUploader $uploaderSerializerInterface $serializer)
  51.     {
  52.         $em $this->getDoctrine()->getManager();
  53.         $user $this->getUser();
  54.         $role $user->getRoles();
  55.         if (in_array('ROLE_PRO',$user->getRoles()) && $user->getAgency()==null ) {
  56.             $this->addFlash('error',"Compléter votre profil pour accéder à toutes les fonctionnalités du site!");
  57.             return $this->redirectToRoute('complete_profil');
  58.         }
  59.         if (in_array('ROLE_USER',$user->getRoles()) && $user->getUsername()=='' ) {
  60.             $this->addFlash('error',"Compléter votre profil pour accéder à toutes les fonctionnalités du site!");
  61.             return $this->redirectToRoute('user_account');
  62.         }
  63.         $advertisement =  $id!=$em->getRepository('App\Entity\Advertisement')->find($id) : new Advertisement();
  64.         if($advertisement->getId()!=null){
  65.             if($advertisement->getUser()->getId()!= $user->getId()){
  66.                 throw new NotFoundHttpException();
  67.             }
  68.             if($advertisement->getStatus()== Advertisement::STATUS_DEACTIVATED){
  69.                 $this->addFlash('warning''Cette annonce a été retirée par son propriétaire!');
  70.                 return $this->redirectToRoute('homepage');
  71.             }
  72.             if($advertisement->getStatus()== Advertisement::STATUS_REFUSED){
  73.                 $this->addFlash('warning''Cette annonce a été supprimée');
  74.                 return $this->redirectToRoute('homepage');
  75.             }
  76.             $advertisement->setPictures(null);
  77.             $advertisement->setDocuments(null);
  78.         }
  79.         if($advertisement->getAvailableDate()!=null){
  80.             $advertisement->setAvailableDate($advertisement->getAvailableDate()->format('d/m/Y'));
  81.             $advertisement->setNoDate(false);
  82.         }else{
  83.             $advertisement->setNoDate(true);
  84.         }
  85.         if($advertisement->getSublease()){
  86.             $advertisement->setSubleaseDuration($advertisement->getSubleaseDuration());
  87.         }
  88.         if($advertisement->getAdvantages()!=null){
  89.             $list_advantages explode(',',$advertisement->getAdvantages());
  90.             $list = [];
  91.             foreach($list_advantages as $ad){
  92.                 $advantage $em->getRepository("App\Entity\Advantage")->findOneBy(['name'=>$ad]);
  93.                 if($advantage!=null){
  94.                     $list[]= $advantage;
  95.                 }
  96.             }
  97.             $advertisement->setAdvantages($list);
  98.         }
  99.         $form $this->createForm(AdvertisementForm::class, $advertisement, [
  100.             'role' => $role,
  101.         ]);
  102.        
  103.         $form->handleRequest($request);
  104.         if ($form->isSubmitted() && $form->isValid()) {
  105.             $advert $form->getData();
  106.             $advert->setImported(false);
  107.             $geocodingService = new GeocodingService($_ENV['GEOCODING_API_KEY'],$em);
  108.             $city null;
  109.             try{
  110.                 $city $geocodingService->decodeAddress($advert->getAddress());
  111.             }catch(\Exception $ex){}
  112.             if($city==null){
  113.                 $this->addFlash('warning''L\'adresse renseigné est incorrecte!');
  114.             }else{
  115.                 $advert->setPostalCode($city->getPostalCode());
  116.                 $advert->setCity($city->getCity());
  117.                 $advert->setDepartment($city->getDepartment()->getShortName());
  118.                 $advert->setRegion($city->getDepartment()->getRegion()->getLongName());
  119.                 $advert->setLongitude(floatval($city->getLongitude()));
  120.                 $advert->setLatitude(floatval($city->getLatitude()));
  121.                 if($advert->getNoDate()==0){
  122.                     if ( preg_match'/((0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/[12]\d{3})/'$advert->getAvailableDate()) ) {
  123.                         $availableDate \DateTime::createFromFormat'd/m/Y'$advert->getAvailableDate() );
  124.                     }else{
  125.                         $availableDate null;
  126.                     }
  127.                     $advert->setAvailableDate($availableDate);
  128.                 }else{
  129.                     $advert->setAvailableDate(null);
  130.                 }
  131.                 if($advert->getSublease() && $advert->getSubleaseDuration()>0){
  132.                     $advert->setDuration($advert->getSubleaseDuration());
  133.                 }
  134.     
  135.                  // Retrieve previously uploaded pictures and add them to advertisement
  136.                 if (=== count($advert->getPictures())) {
  137.                     $uploadedPictures json_decode($request->request->get('uploadedPictures'));
  138.                     if ($uploadedPictures) {
  139.                         foreach ($uploadedPictures as $fileId) {
  140.                             $file $em->getRepository(Files::class)->find($fileId);
  141.                             if ($file) {
  142.                                 $advert->addFile($file);
  143.                             }
  144.                         }
  145.                     }
  146.                 }
  147.     
  148.                 if(is_array($advert->getAdvantages()) && sizeof($advert->getAdvantages())>0){
  149.                     $list_advantages = [];
  150.                     foreach($advert->getAdvantages() as $advantage){
  151.                         $list_advantages[]=$advantage->getName();
  152.                     }
  153.                     $advert->setAdvantages(implode(',',$list_advantages));
  154.                 }else if($advert->getAdvantages()==null){
  155.                     $advert->setAdvantages(null);
  156.                 }
  157.                 
  158.                 if(is_null($advert->getNew())){
  159.                     $advert->setNew(false);
  160.                 }
  161.                 $advert->setOwner(($advert->getOwner() !== null $advert->getOwner() : true));
  162.                 $advert->setUser($user);
  163.                 if($advert->getSale()==null){
  164.                     $advert->setSale(false);
  165.                 }
  166.                 if($advert->getEnergyBalance()== null || !in_array(strtolower($advert->getEnergyBalance()),['a','b','c','d','e','f','g'])){
  167.                     $advert->setEnergyBalance('unknown');
  168.                 }
  169.                 $message 'Annonce modifiée!';
  170.                 if($advert->getId()==null){
  171.                     $advert->setStatus(Advertisement::STATUS_PUBLISHED);
  172.                     $em->persist($advert);
  173.                     $message 'Annonce mise en ligne !';
  174.                 }
  175.                 $em->flush();
  176.                 $this->addFlash('success',$message);
  177.                 $slugify $this->get('slugify');
  178.                 $translator $this->get('translator');
  179.                 if (in_array('ROLE_PRO'$user->getRoles())) {
  180.                     $advert_slug $slugify->slugify($translator->transchoice('label.advertisement.title',$advert->getRoomNumber(), ['%category%'=>$translator->trans($advert->getCategory()),'%type%'=>$translator->trans($advert->getTypeLabel()), '%roomNumber%'=> $translator->trans($advert->getRoomNumber()), '%surface%'=>$translator->trans($advert->getSurface())]));
  181.                     return $this->redirectToRoute('advertisement_show', ['id' => $advert->getId(),'slug'=>$advert_slug]);
  182.                 }else{
  183.                     return $this->redirectToRoute('advertisement_publish');
  184.                 }
  185.             }
  186.         }
  187.         return $this->render('advertisement/new.html.twig', [
  188.             'advertisement' => $advertisement,
  189.             'form' => $form->createView(),
  190.             'uploadedPictures' => $this->saveUploadedPictures($request$uploader)
  191.         ]);
  192.     }
  193.     /**
  194.      * Show Advertisement
  195.      * @param Request $request
  196.      * @param Advertisement $advertisement
  197.      * @return Response
  198.      * @Route("/advertisement/show/{id}/{slug}", name="advertisement_show")
  199.      */
  200.     public function showAdvertisement $advertisement,$slug,Request $requestSlugifyInterface $slugify,TranslatorInterface $translatorRouterInterface $routerReviewSearch $reviewSearch null)
  201.     {
  202.         if($advertisement->getStatus()== Advertisement::STATUS_DEACTIVATED){
  203.             $this->addFlash('warning''Cette annonce a été retirée par son propriétaire!');
  204.             return $this->redirectToRoute('homepage');
  205.         }
  206.         
  207.         if($advertisement->getStatus()== Advertisement::STATUS_REFUSED){
  208.             $this->addFlash('warning''Cette annonce a été supprimée');
  209.             return $this->redirectToRoute('homepage');
  210.         }
  211.         
  212.         
  213.         $advert_slug $slugify->slugify($translator->transchoice('label.advertisement.title',$advertisement->getRoomNumber(), ['%category%'=>$translator->trans($advertisement->getCategory()),'%type%'=>$translator->trans($advertisement->getTypeLabel()), '%roomNumber%'=> $translator->trans($advertisement->getRoomNumber()), '%surface%'=>$translator->trans($advertisement->getSurface())]));
  214.         if(strcasecmp($advert_slug,$slug)!=0){
  215.             throw new NotFoundHttpException();
  216.         }
  217.         
  218.         $form $this->createForm(SearchAdvertisementForm::class, null, [
  219.             'action' => $this->generateUrl('advertisement_search'),
  220.             'method' => 'GET',
  221.         ]);
  222.         $form->handleRequest($request);
  223.         $baseUrl $request->getSchemeAndHttpHost() . '/search';
  224.         $referer $request->headers->get('referer');
  225.         if (substr(str_replace('https://''http://'$referer), 0strlen($baseUrl)) === str_replace('https://''http://'$baseUrl)) {
  226.             $searchUrl $referer;
  227.         } else {
  228.             $searchUrl $router->generate('advertisement_search');
  229.         }
  230.         
  231.         $creator_user $advertisement->getUser()->getRoles();
  232.         $role_creator $creator_user[0];
  233.         
  234.         $em $this->getDoctrine()->getManager();
  235.         $hasApplication false;
  236.         if($this->getUser()!=null){
  237.             $result $em->getRepository('App\Entity\RentalRecord')->getAdvertRentalByUser($advertisement,$this->getUser());
  238.             if(sizeof($result)>0){
  239.                 $hasApplication true;
  240.             }
  241.         }
  242.         $em $this->getDoctrine()->getManager();
  243.             $qb $em->getRepository('App\Entity\FluxRss')->createQueryBuilder('flux')
  244.                 ->addSelect("flux.id,flux.title,flux.link,flux.longitude,flux.latitude,flux.city,flux.department,flux.region,flux.postalCode,flux.pinColor")
  245.                 ->where('flux.department=:department')
  246.                 ->andWhere('flux.region=:region')
  247.                 ->andWhere('flux.city=:city OR flux.city is null')
  248.                 ->setParameter('city'$advertisement->getCity())
  249.                 ->setParameter('department'$advertisement->getDepartment())
  250.                 ->setParameter('region'$advertisement->getRegion())
  251.                 ->orderBy('flux.type''ASC');
  252.             $query $qb->getQuery();
  253.             $result $query->getResult();
  254.             $results =[
  255.                 'city_name' => $advertisement->getCity(),
  256.                 'data' => $result
  257.             ];
  258.         $paramsTerm = [];
  259.         if($advertisement->getPostalCode()!='' && $advertisement->getPostalCode()!=null){
  260.             $paramsTerm['postalCode'] = $advertisement->getPostalCode();
  261.         }
  262.         if($advertisement->getCity()!='' && $advertisement->getCity()!=null){
  263.             $paramsTerm['city'] = $advertisement->getCity();
  264.         }
  265.         if($advertisement->getDepartment()!='' && $advertisement->getDepartment()!=null){
  266.             $paramsTerm['department'] = $advertisement->getDepartment();
  267.         }
  268.         if($advertisement->getRegion()!='' && $advertisement->getRegion()!=null){
  269.             $paramsTerm['region'] = $advertisement->getRegion();
  270.         }
  271.         $reviewResults $reviewSearch->searchPaginated($paramsTerm,5,0);
  272.         $qb $em->getRepository('App\Entity\Statistics')->createQueryBuilder('stat')
  273.             ->addSelect("stat.nbPopulation,stat.density,stat.activePopulation,stat.averageIncome,stat.sqrtFtAveragePrice,stat.nbFamily")
  274.             ->where('stat.department=:department')
  275.             ->andWhere('stat.region=:region')
  276.             ->andWhere('stat.city=:city')
  277.             ->andWhere("stat.type='COM'")
  278.             ->setParameter('city'$advertisement->getCity())
  279.             ->setParameter('department'$advertisement->getDepartment())
  280.             ->setParameter('region'$advertisement->getRegion())
  281.             ->orderBy('stat.type''ASC')
  282.             ->setMaxResults(1);
  283.         $query $qb->getQuery();
  284.         $result $query->getResult();
  285.         $stat null;
  286.         if(sizeof($result)>0){
  287.             $stat $query->getResult()[0];
  288.         }
  289.         return $this->render('advertisement/show.html.twig', [
  290.             'form' => $form->createView(),
  291.             'advertisement' => $advertisement,
  292.             'reviews' => $reviewResults,
  293.             'role' => $role_creator,
  294.             'searchUrl' => $searchUrl,
  295.             'hasApplication' => $hasApplication,
  296.             'rssData' => $results,
  297.             'stat' => $stat
  298.         ]);
  299.     }
  300.     
  301.      /**
  302.      * Show Advertisement
  303.      * @param Request $request
  304.      * @param Advertisement $advertisement
  305.      * @return Response
  306.      * @Route("/advertisement/details/{id}/{slug}", name="advertisement_details")
  307.      */
  308.     public function details(Request $requestAdvertisement $advertisementRouter $router)
  309.     {
  310.         $user $this->getUser();
  311.         if($user->getId() != $advertisement->getUser()->getId()){
  312.             throw new NotFoundHttpException();
  313.         }
  314.         
  315.         if($advertisement->getStatus()== Advertisement::STATUS_REFUSED){
  316.             $this->addFlash('warning''Cette annonce a été supprimée');
  317.             return $this->redirectToRoute('homepage');
  318.         }
  319.         
  320.         $em $this->getDoctrine()->getManager();
  321.         $rentalRecords $em->getRepository('App\Entity\RentalRecord')->getAdvertRentalByStatus($advertisement->getId(), RentalRecord::STATUS_ACTIVATE);
  322.         
  323.         return $this->render('advertisement/details.html.twig', [
  324.             'advertisement' => $advertisement,
  325.             'rentalRecords' => $rentalRecords
  326.         ]);
  327.     }
  328.     
  329.     /**
  330.      * upload document view for ad moderation
  331.      * @param Advertisement $advertisement
  332.      * @return JsonResponse
  333.      * @Route("/advertisement/upload/upload_view/{id}", name="address_proof_view")
  334.      */
  335.     public function documentUploadView(Advertisement $advertisement)
  336.     {
  337.         return new JsonResponse(['error' => false'view' => $this->renderView(':user:modal_edit_advertisement.html.twig', ['advertisement' => $advertisement])]);
  338.     }
  339.     
  340.     /**
  341.      * Edit advert image view
  342.      * @param Advertisement $advertisement
  343.      * @return JsonResponse
  344.      * @Route("/advertisement/image/edit_view/{id}", name="advertisement_image_edit_view")
  345.      */
  346.     public function imageEditView(Advertisement $advertisement)
  347.     {
  348.         return new JsonResponse(['error' => false'view' => $this->renderView(':user:modal_advert_image.html.twig', ['advertisement' => $advertisement])]);
  349.     }
  350.     /**
  351.      * Advertisement published
  352.      * @return Response
  353.      * @Route("/advertisement/publish", name="advertisement_publish")
  354.      */
  355.     public function publishedMessageAction()
  356.     {
  357.         return $this->render('advertisement/finish.html.twig',[]);
  358.     }
  359.     /**
  360.      * Adding image
  361.      *
  362.      * @param Advertisement $advertisement
  363.      * @param Request $request
  364.      * @param FileUploader $uploader
  365.      * @return JsonResponse
  366.      * @Route("/advertisement/image/upload/{id}", name="advertisement_image_upload")
  367.      */
  368.     public function addPicture(Advertisement $advertisement,Request $requestFileUploader $uploader)
  369.     {
  370.         if ($request->isMethod(Request::METHOD_POST)) {
  371.             $picture $request->files->get('picture');
  372.             if ($picture instanceof UploadedFile) {
  373.                 $imageName $uploader->uploadImage($picture);
  374.                 $file = new Files();
  375.                 $file->setPath($imageName);
  376.                 $file->setName($picture->getClientOriginalName());
  377.                 $file->setSize($picture->getClientSize());
  378.                 $em $this->getDoctrine()->getManager();
  379.                 $em->persist($file);
  380.                 $em->flush();
  381.                 $advertisement->addFile($file);
  382.                 try{
  383.                     $em->flush();
  384.                 }
  385.                 catch(\Exception $ex){}
  386.                 return new JsonResponse(['error' => false,'link'=>$this->generateUrl('advertisement_image_remove',['id'=>$advertisement->getId(),'file'=>$file->getId()])]);
  387.             }
  388.         }
  389.         return new JsonResponse(['error' => true"message" => 'Image non enregistrée']);
  390.         
  391.     }
  392.     
  393.     /**
  394.      * Remove image
  395.      * @param Advertisement $advertisement
  396.      * @param Files $file
  397.      * @param Request $request
  398.      * @return JsonResponse
  399.      * @Route("/advertisement/image/remove/{id}/{file}", name="advertisement_image_remove")
  400.      */
  401.     public function removePicture(Advertisement $advertisement,Files $file,Request $request)
  402.     {
  403.         if ($request->isMethod(Request::METHOD_POST)) {
  404.             $em $this->getDoctrine()->getManager();
  405.             $advertisement->removeFile($file);
  406.             $em->flush();
  407.             return new JsonResponse(['error' => false]);
  408.         }
  409.         return new JsonResponse(['error' => true"message" => 'Image non supprimée']);   
  410.     }
  411.     
  412.     
  413.     /**
  414.      * upload document for ad moderation
  415.      * @param Request $request
  416.      * @param Advertisement $advertisement
  417.      * @param FileUploader $uploader
  418.      * @return Response
  419.      * @Route("/advertisement/upload/document/{id}", name="address_proof")
  420.      */
  421.     public function documentUpload(Request $requestAdvertisement $advertisementFileUploader $uploader)
  422.     {
  423.         $current_user $this->getUser();
  424.         $ad_creator $advertisement->getUser();
  425.         if ($current_user == $ad_creator) {
  426.             $document $request->files->get('upload_documents');
  427.             if ($document instanceof UploadedFile && in_array($document->getMimeType(), ['application/pdf''application/x-pdf'])) {
  428.                 $fileName $uploader->uploadFile($document);
  429.                 $advertisement->setDocuments($fileName);
  430.                 $em $this->getDoctrine()->getManager();
  431.                 $em->persist($advertisement);
  432.                 $em->flush();
  433.                 $this->addFlash('success''Information mis à jour!');
  434.             }else{
  435.                 $this->addFlash('error''Extension du fichier invalide!');
  436.             }
  437.             return $this->redirectToRoute('user_account', ['tab' => 'advertisements']);
  438.         }
  439.         throw new \Exception('Cette page ne vous est pas accessible');
  440.     }
  441.     /**
  442.      * Disable an advertisement
  443.      * @param Advertisement $advertisement
  444.      * @return JsonResponse
  445.      * @Route("/advertisement/disable/{id}", name="disable_advertisement")
  446.      */
  447.     public function disable(Advertisement $advertisement)
  448.     {
  449.         $error true;
  450.         $user $this->getUser();
  451.         if ($user->getId() !== $advertisement->getUser()->getId()) {
  452.             $message "Opération non autorisée!";
  453.         } else {
  454.             $em $this->getDoctrine()->getManager();
  455.             $advertisement->setStatus(Advertisement::STATUS_DEACTIVATED);
  456.             $em->flush();
  457.             $message "Annonce désactivée avec succès!";
  458.             $error false;
  459.         }
  460.         return new JsonResponse(['error' => $error"message" => $message]);
  461.     }
  462.     /**
  463.      * Enable an advertisement
  464.      * @param Advertisement $advertisement
  465.      * @return Response
  466.      * @Route("/advertisement/enable/{id}", name="enable_advertisement", methods={"POST"})
  467.      */
  468.     public function enable(Advertisement $advertisement)
  469.     {
  470.         $message "Impossible de réactiver cette annonce!";
  471.         $error true;
  472.         $user $this->getUser();
  473.         if ($user->getId() !== $advertisement->getUser()->getId()) {
  474.             $message "Opération non autorisée!";
  475.         } else {
  476.             $em $this->getDoctrine()->getManager();
  477.             $advertisement->setStatus(Advertisement::STATUS_PUBLISHED);
  478.             $em->flush();
  479.             $message "Annonce réactivée avec succès!";
  480.             $error false;
  481.         }
  482.         return new JsonResponse(['error' => $error"message" => $message]);
  483.     }
  484.     
  485.     /**
  486.      * Bookmark an advertisement
  487.      * @param Request $request
  488.      * @param Advertisement $advertisement
  489.      * @return Response
  490.      * @Route("/advertisement/{id}/show/bookmark", name="bookmark")
  491.      */
  492.     public function bookmark(Request $requestAdvertisement $advertisement)
  493.     {
  494.         $user $this->getUser();
  495.         $id_ad $advertisement->getId();
  496.         $em $this->getDoctrine()->getManager();
  497.         if (false === $user->hasBookmark($advertisement)) {
  498.             $user->addBookmarks($advertisement);
  499.             $em->flush();
  500.             $this->addFlash('success''Annonce ajoutée aux favoris !');
  501.         } else {
  502.             $user->removeBookmarks($advertisement);
  503.             $em->flush();
  504.             $this->addFlash('success''Annonce retirée aux favoris !');
  505.         }
  506.         return $this->redirectToRoute('advertisement_show', ['id' => $id_ad]);
  507.     }
  508.     
  509.    /**
  510.      * Save meeting
  511.      * @param Request $request
  512.      * @param Advertisement $advertisement
  513.      * @return Response
  514.      * @Route("/advertisement/meeting/add/{id}", name="save_meeting")
  515.      */
  516.     public function saveMeeting(Request $requestAdvertisement $advertisement)
  517.     {
  518.         $user $this->getUser();
  519.         $em $this->getDoctrine()->getManager();
  520.         $meeting = new Meeting();
  521.         $meeting->setCreatedAt(new \DateTime());
  522.         $meeting->setUser($user);
  523.         $meeting->setEmail($request->get('email'));
  524.         $meeting->setPhone($request->get('phone'));
  525.         $meeting->setName($request->get('name'));
  526.         $meeting->setAdvertisement($advertisement);
  527.         $meeting->setSeen(false);
  528.         $em->persist($meeting);
  529.         $em->flush();
  530.         return new JsonResponse([]);
  531.     }
  532.     
  533.     /**
  534.      * Remove meeting
  535.      * @param Advertisement $advertisement
  536.      * @param RentalRecord $rental
  537.      * @param Request $request
  538.      * @Route("/advertisement/meeting/remove/{id}/", name="remove_meeting")
  539.      */
  540.     public function removeMeeting(Meeting $meeting,Request $request)
  541.     {
  542.         if ($request->isMethod(Request::METHOD_POST)) {
  543.             $em $this->getDoctrine()->getManager();
  544.             $user $this->getUser();
  545.             if($user->getId() == $meeting->getAdvertisement()->getUser()->getId()){
  546.                 $meeting->setSeen(true);
  547.                 $em->flush();
  548.             }
  549.             return new JsonResponse(['error' => false]);
  550.         }
  551.         return new JsonResponse(['error' => true"message" => 'Demande non supprimée']);   
  552.     }
  553.     
  554.     
  555.     /**
  556.      * Remove rental records
  557.      * @param Advertisement $advertisement
  558.      * @param RentalRecord $rental
  559.      * @param Request $request
  560.      * @Route("/advertisement/rental/remove/{id}/{rental}", name="advertisement_rental_remove")
  561.      */
  562.     public function removeRental(Advertisement $advertisement,RentalRecord $rental,Request $request)
  563.     {
  564.         if ($request->isMethod(Request::METHOD_POST)) {
  565.             $em $this->getDoctrine()->getManager();
  566.             if($advertisement->getId() == $rental->getAdvertisement()->getId()){
  567.                 $rental->setStatus(RentalRecord::STATUS_DECLINE);
  568.                 $em->flush();
  569.                 return new JsonResponse(['error' => false]);
  570.             }
  571.             
  572.         }
  573.         return new JsonResponse(['error' => true"message" => 'Candidature non supprimée']);   
  574.     }
  575.     
  576.    /**
  577.      * If pictures have been sent in form, upload and save them
  578.      * Like this, if the form fails, the pictures will still be added on second submit
  579.      *
  580.      * @param Request $request
  581.      * @param FileUploader $uploader
  582.      * @return string
  583.      */
  584.     private function saveUploadedPictures(Request $requestFileUploader $uploader)
  585.     {
  586.         $uploadedPictures = [];
  587.         if ($request->isMethod(Request::METHOD_POST)) {
  588.             $pictures $request->files->get('advertisement_form')['pictures'];
  589.             if ($pictures) {
  590.                 foreach ($pictures as $image) {
  591.                     if ($image instanceof UploadedFile) {
  592.                         $imageName $uploader->uploadImage($image);
  593.                         $file = new Files();
  594.                         $file->setPath($imageName);
  595.                         $file->setName($image->getClientOriginalName());
  596.                         if (!$image->isFile()) {
  597.                             continue;
  598.                         }
  599.                         $file->setSize($image->getClientSize());
  600.                         $em $this->getDoctrine()->getManager();
  601.                         $em->persist($file);
  602.                         $em->flush();
  603.                         $uploadedPictures[] = $file->getId();
  604.                     }
  605.                 }
  606.             }
  607.         }
  608.         if (!sizeof($uploadedPictures) && $request->request->get('uploadedPictures') !== '') {
  609.             $uploadedPictures json_decode($request->request->get('uploadedPictures'));
  610.         }
  611.         return json_encode($uploadedPictures);
  612.     }
  613. }