src/Controller/AnnoncesController.php line 69

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Annonces;
  4. use App\Entity\Images;
  5. use App\Entity\NotesAnnonces;
  6. use App\Form\AnnoncesType;
  7. use App\Repository\UserRepository;
  8. use App\Repository\AnnoncesRepository;
  9. use App\Repository\NotesAnnoncesRepository;
  10. use App\Repository\CategoriesRepository;
  11. use App\Repository\ImagesRepository;
  12. use App\Repository\AlertesRepository// Import AlertesRepository
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Datetime;
  19. use Kreait\Firebase\Messaging;
  20. use Kreait\Firebase\Messaging\CloudMessage;
  21. use Kreait\Firebase\Factory;
  22. function sendNotif($to$notifMessaging $messaging){
  23.     $fields = array('registration_ids' => $to'notification'=> $notif);
  24.     $message CloudMessage::new()
  25.         ->withNotification(
  26.             $notif
  27.         );
  28.     $response $messaging->sendMulticast($message$to);
  29. }
  30. /**
  31.  * @Route("admin/annonces")
  32.  */
  33. class AnnoncesController extends AbstractController
  34. {   
  35.     private $messaging;
  36.     private $factory;
  37.     public function __construct(){
  38.         $this->factory = (new Factory)->withServiceAccount('../config/firebase/serviceAccountKey.json');
  39.         $this->messaging $this->factory->createMessaging();
  40.     }
  41.     /**
  42.      * @Route("/", name="app_annonces_index", methods={"GET"})
  43.      */
  44.     public function index(AnnoncesRepository $annoncesRepositoryAlertesRepository $alertesRepositoryCategoriesRepository $categoriesRepository): Response
  45.     {
  46.         $user $this->getUser();
  47.         $alertes $alertesRepository->findBy(['User' => $user]);
  48.         $categories $categoriesRepository->findAll();
  49.         return $this->render('annonces/index.html.twig', [
  50.             'annonces' => $annoncesRepository->findAll(),
  51.             'alertes' => $alertes,
  52.             'categories' => $categories
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/new", name="app_annonces_new", methods={"GET", "POST"})
  57.      */
  58.     public function new(Request $requestAnnoncesRepository $annoncesRepositoryUserRepository $userRepositoryImagesRepository $imagesRepositoryCategoriesRepository $categoriesRepositoryAlertesRepository $alertesRepository): Response
  59.     {
  60.         $credit 1;
  61.         $annonce = new Annonces();
  62.         $form $this->createForm(AnnoncesType::class, $annonce);
  63.         $form->handleRequest($request);
  64.         $em $this->getDoctrine()->getManager(); 
  65.         if ($form->isSubmitted() && $form->isValid()) {
  66.             $cat $categoriesRepository->findOneById($request->request->get('categories'));
  67.             $annonce->setCategories($cat);
  68.             if ($request->request->get('pro')) {
  69.                 $annonce->setVisiblePro(1);
  70.             }
  71.             $annonce->setNbVues(0);
  72.             $dDebut $request->request->get('date').' '.$request->request->get('heureDebut');
  73.             $dFin $request->request->get('date').' '.$request->request->get('heureFin');
  74.             $annonce->setDateDebut(new \DateTime($dDebut));
  75.             $annonce->setDateFin(new \DateTime($dFin));
  76.             $annonce->setUser($this->getUser());
  77.             $annonce->setVilles($this->getUser()->getVilles());
  78.             if ($request->request->get('booster')) {
  79.                 $annonce->setBooster(1);
  80.                 $credit += 4;
  81.             }
  82.             $file $form->get('image')->getData();
  83.             if ($file) {
  84.                 $path '/';
  85.                 $fileName uniqid() . '-' $file->getClientOriginalName();
  86.                 $file->move(
  87.                     $this->getParameter('annonces_directory') . $path,
  88.                     $fileName
  89.                 );
  90.             }
  91.             $user $userRepository->findOneById($this->getUser()->getId());
  92.             $newCredit $user->getCredits() - $credit;
  93.             if ($user->getCredits() >= $credit) {
  94.                 $annoncesRepository->add($annoncetrue); // Persist and flush the Annonce entity first
  95.                 if ($file) {
  96.                     $image = new Images();
  97.                     $image->setLien($fileName);
  98.                     $image->setAnnonces($annonce);
  99.                     $imagesRepository->add($imagetrue);
  100.                 }
  101.                 $user->setCredits($newCredit);
  102.                 $userRepository->add($usertrue);
  103.                 // Envoi de notification, etc.
  104.                 return $this->redirectToRoute('mesAnnonces', ['type' => 'encours'], Response::HTTP_SEE_OTHER);
  105.             } else {
  106.                 return $this->redirectToRoute('app_annonces_new', ['erreur' => 'credit'], Response::HTTP_SEE_OTHER);
  107.             }
  108.         }
  109.         $user $this->getUser();
  110.         $alertes $alertesRepository->findBy(['User' => $user]);
  111.         $categories $categoriesRepository->findAll();
  112.         return $this->renderForm('annonces/new.html.twig', [
  113.             'annonce' => $annonce,
  114.             'form' => $form,
  115.             'categories' => $categories,
  116.             'alertes' => $alertes,
  117.             'type' => 'new'
  118.         ]);
  119.     }
  120.     /**
  121.      * @Route("/{id}", name="app_annonces_show", methods={"GET"})
  122.      */
  123.     public function show(Annonces $annonceAlertesRepository $alertesRepositoryCategoriesRepository $categoriesRepository): Response
  124.     {
  125.         $user $this->getUser();
  126.         $alertes $alertesRepository->findBy(['User' => $user]);
  127.         $categories $categoriesRepository->findAll();
  128.         return $this->render('annonces/show.html.twig', [
  129.             'annonce' => $annonce,
  130.             'alertes' => $alertes,
  131.             'categories' => $categories
  132.         ]);
  133.     }
  134.     /**
  135.  * @Route("/{id}/edit", name="app_annonces_edit", methods={"GET", "POST"})
  136.  */
  137. public function edit(Request $requestAnnonces $annonceUserRepository $userRepositoryAnnoncesRepository $annoncesRepositoryImagesRepository $imagesRepositoryCategoriesRepository $categoriesRepositoryAlertesRepository $alertesRepository): Response
  138. {
  139.     $oldBooster $annonce->isBooster();
  140.     $form $this->createForm(AnnoncesType::class, $annonce);
  141.     $form->handleRequest($request);
  142.     $credit 0;
  143.     if ($form->isSubmitted() && $form->isValid()) {
  144.         $cat $categoriesRepository->findOneById($request->request->get('categories'));
  145.         $annonce->setCategories($cat);
  146.         if ($request->request->has('pro')) {
  147.             $annonce->setVisiblePro(1);
  148.         }
  149.         $annonce->setNbVues(0);
  150.         $dDebut $request->request->get('date') . ' ' $request->request->get('heureDebut');
  151.         $dFin $request->request->get('date') . ' ' $request->request->get('heureFin');
  152.         $annonce->setDateDebut(new \DateTime($dDebut));
  153.         $annonce->setDateFin(new \DateTime($dFin));
  154.         if ($request->request->has('booster')) {
  155.             $annonce->setBooster(1);
  156.             if ($oldBooster == 0) {
  157.                 $credit += 4;
  158.             }
  159.         }
  160.         $fileName '';
  161.         $file $form->get('image')->getData();
  162.         if ($file) {
  163.             $fileName uniqid() . '-' $file->getClientOriginalName();
  164.             $file->move(
  165.                 $this->getParameter('annonces_directory'),
  166.                 $fileName
  167.             );
  168.             $image = new Images();
  169.             $image->setLien($fileName);
  170.             $image->setAnnonces($annonce);
  171.             $imagesRepository->add($imagetrue);
  172.         }
  173.         $user $userRepository->findOneById($this->getUser());
  174.         $newCredit $user->getCredits() - $credit;
  175.         if ($user->getCredits() >= $credit) {
  176.             $annoncesRepository->add($annoncetrue);
  177.             if (!empty($fileName)) {
  178.                 $image = new Images();
  179.                 $image->setLien($fileName);
  180.                 $image->setAnnonces($annonce);
  181.                 $imagesRepository->add($imagetrue);
  182.             }
  183.             $user->setCredits($newCredit);
  184.             $userRepository->add($usertrue);
  185.             return $this->redirectToRoute('mesAnnonces', ['type' => 'encours'], Response::HTTP_SEE_OTHER);
  186.         } else {
  187.             return $this->redirectToRoute('app_annonces_edit', ['id' => $annonce->getId(), 'erreur' => 'credit'], Response::HTTP_SEE_OTHER);
  188.         }
  189.     }
  190.     $user $this->getUser();
  191.     $alertes $alertesRepository->findBy(['User' => $user]);
  192.     $categories $categoriesRepository->findAll();
  193.     return $this->renderForm('annonces/edit.html.twig', [
  194.         'annonce' => $annonce,
  195.         'form' => $form,
  196.         'categories' => $categories,
  197.         'alertes' => $alertes,
  198.         'type' => 'edit'
  199.     ]);
  200. }
  201.      /**
  202.      * @Route("/{id}/delete", name="app_annonces_delete", methods={"POST"})
  203.      */
  204.     public function delete(Request $requestAnnonces $annonce nullImagesRepository $imagesRepositoryAnnoncesRepository $annoncesRepositoryNotesAnnoncesRepository $notesAnnoncesRepository): Response
  205.     {
  206.         if (!$annonce) {
  207.             throw $this->createNotFoundException('Annonce non trouvée');
  208.         }
  209.         if ($this->isCsrfTokenValid('delete'.$annonce->getId(), $request->request->get('_token'))) {
  210.             $notes $notesAnnoncesRepository->findBy(['Annonces' => $annonce->getId()]);
  211.             foreach ($notes as $res) {
  212.                 $notesAnnoncesRepository->remove($restrue);
  213.             }
  214.             $images $imagesRepository->findBy(['Annonces' => $annonce->getId()]);
  215.             foreach ($images as $res) {
  216.                 $imagesRepository->remove($restrue);
  217.             }
  218.             $annoncesRepository->remove($annoncetrue);
  219.         }
  220.         $type $request->request->get('form')['type'] ?? null;
  221.         if ($type === 'mesAnnonces') {
  222.             return $this->redirectToRoute('mesAnnonces', ['type' => 'encours'], Response::HTTP_SEE_OTHER);
  223.         } else {
  224.             return $this->redirectToRoute('mesAnnonces', ['type' => 'encours'], Response::HTTP_SEE_OTHER);
  225.         }
  226.     }
  227.     /**
  228.      * @Route("/update-rating", name="update_rating", methods={"POST"})
  229.      */
  230.     public function updateRating(Request $requestAnnoncesRepository $annoncesRepositoryUserRepository $userRepositoryEntityManagerInterface $entityManager): Response
  231.     {
  232.         $note $request->request->get('note');
  233.         $annonceId $request->request->get('annonceId');
  234.         $annonce $annoncesRepository->find($annonceId);
  235.         $user $this->getUser();
  236.         if (!$annonce || !$user) {
  237.             return new Response('Annonce ou utilisateur non trouvé'Response::HTTP_NOT_FOUND);
  238.         }
  239.         $notesAnnonce = new NotesAnnonces();
  240.         $notesAnnonce->setDate(new \DateTime());
  241.         $notesAnnonce->setAnnonces($annonce);
  242.         $notesAnnonce->setUser($user);
  243.         $notesAnnonce->setNote($note);
  244.         $entityManager->persist($notesAnnonce);
  245.         $entityManager->flush();
  246.         return new Response('Note de l\'annonce mise à jour avec succès'Response::HTTP_OK);
  247.     }
  248.     /**
  249.      * @Route("/{id}/republish", name="app_annonces_republish", methods={"GET", "POST"})
  250.      */
  251.     public function republish(Request $requestAnnonces $annonceAnnoncesRepository $annoncesRepositoryCategoriesRepository $categoriesRepositoryImagesRepository $imagesRepositoryAlertesRepository $alertesRepository): Response
  252.     {
  253.         $newAnnonce = new Annonces();
  254.         $newAnnonce->setTitre($annonce->getTitre());
  255.         $newAnnonce->setDescription($annonce->getDescription());
  256.         $newAnnonce->setQuantite($annonce->getQuantite());
  257.         $newAnnonce->setPrix($annonce->getPrix());
  258.         $newAnnonce->setPourcentRemise($annonce->getPourcentRemise());
  259.         $newAnnonce->setVisiblePro($annonce->isVisiblePro());
  260.         $newAnnonce->setCategories($annonce->getCategories());
  261.         $newAnnonce->setUser($this->getUser());
  262.         $newAnnonce->setNbVues(0);
  263.         $form $this->createForm(AnnoncesType::class, $newAnnonce);
  264.         $form->handleRequest($request);
  265.         if ($form->isSubmitted() && $form->isValid()) {
  266.             $cat $categoriesRepository->findOneById($request->request->get('categories'));
  267.             $newAnnonce->setCategories($cat);
  268.             $newAnnonce->setNbVues(0);
  269.             $dDebut $request->request->get('date').' '.$request->request->get('heureDebut');
  270.             $dFin $request->request->get('date').' '.$request->request->get('heureFin');
  271.             $newAnnonce->setDateDebut(new \DateTime($dDebut));
  272.             $newAnnonce->setDateFin(new \DateTime($dFin));
  273.             $newAnnonce->setUser($this->getUser());
  274.             $newAnnonce->setVilles($this->getUser()->getVilles());
  275.             if ($request->request->get('booster')) {
  276.                 $newAnnonce->setBooster(1);
  277.             }
  278.             // Persist the new Annonce first
  279.             $entityManager $this->getDoctrine()->getManager();
  280.             $entityManager->persist($newAnnonce);
  281.             $entityManager->flush();
  282.             // Handle the image upload
  283.             $file $form->get('image')->getData();
  284.             if ($file) {
  285.                 $fileName uniqid() . '-' $file->getClientOriginalName();
  286.                 $file->move(
  287.                     $this->getParameter('annonces_directory'),
  288.                     $fileName
  289.                 );
  290.                 $image = new Images();
  291.                 $image->setLien($fileName);
  292.                 $image->setAnnonces($newAnnonce);
  293.                 $imagesRepository->add($imagetrue);
  294.             }
  295.             return $this->redirectToRoute('mesAnnonces', ['type' => 'encours'], Response::HTTP_SEE_OTHER);
  296.         }
  297.         $user $this->getUser();
  298.         $alertes $alertesRepository->findBy(['User' => $user]);
  299.         $categories $categoriesRepository->findAll();
  300.         return $this->render('annonces/republish.html.twig', [
  301.             'annonce' => $newAnnonce,
  302.             'form' => $form->createView(),
  303.             'categories' => $categories,
  304.             'alertes' => $alertes,
  305.         ]);
  306.     }
  307. }