src/Controller/LivreController.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Livre;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use App\Entity\Favori;
  6. use App\Entity\Demande;
  7. use App\Entity\Notification;
  8. use App\Form\LivreType;
  9. use App\Data\SearchData;
  10. use App\Form\SearchForm;
  11. use App\Repository\NotificationRepository;
  12. use App\Repository\LivreRepository;
  13. use App\Repository\DemandeRepository;
  14. use App\Repository\FavoriRepository;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Knp\Component\Pager\PaginatorInterface;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  22. use Symfony\Contracts\Translation\TranslatorInterface;
  23. /**
  24.  * @Route("/")
  25.  */
  26. class LivreController extends AbstractController
  27. {
  28.     /**
  29.      * @Route("/loginadmin", name="loginadmin")
  30.      */
  31.     public function loginadmin(AuthenticationUtils $authenticationUtils)
  32.     {
  33.         // get the login error if there is one
  34.         $error $authenticationUtils->getLastAuthenticationError();
  35.         // last username entered by the user
  36.         $lastUsername $authenticationUtils->getLastUsername();
  37.         return $this->render('admin/login.html.twig', [
  38.             'last_username' => $lastUsername,
  39.             'error'         => $error,
  40.         ]);
  41.     }
  42.     /**
  43.      * @Route("/", name="app_livre_index", methods={"GET"})
  44.      */
  45.     public function index(Request $requestLivreRepository $livreRepositoryPaginatorInterface $paginator): Response
  46.     {   
  47.         $data = new SearchData();
  48.         $form $this->createForm(SearchForm::class, $data);
  49.         // $cats = $catRepo->findAll();
  50.         $form->handleRequest($request);
  51.         $isset $form->isSubmitted();
  52.         $livresPage $livreRepository->findSearch($data);
  53.         $livres $paginator->paginate(
  54.             $livresPage,
  55.             $request->query->getInt('page'1),
  56.             10
  57.         );
  58.         $lastbooks $livreRepository->findBy([], ['id' => 'DESC'], 10);
  59.         // dd($lastbooks);
  60.         return $this->render('livre/index.html.twig', [
  61.             'livres' => $livres,
  62.             'isset' => $isset,
  63.             'form' => $form->createView(),
  64.             'lastbooks' => $lastbooks,
  65.         ]);
  66.         // $livres = $paginator->paginate(
  67.         //     $livreRepository->nosLivres(),
  68.         //     $request->query->getInt('page', 1),
  69.         //     10
  70.         // );
  71.         // return $this->render('livre/index.html.twig', [
  72.         //     'livres' => $livres,
  73.         // ]);
  74.     }
  75.     /**
  76.      * @Route("/new", name="app_livre_new", methods={"GET", "POST"})
  77.      * @Route("/edit/{id}", name="edit")
  78.      */
  79.     public function new(Livre $livre null,Request $requestLivreRepository $livreRepository): Response
  80.     {   
  81.         if(!$livre){
  82.             $livre = new Livre();
  83.         }
  84.         
  85.         $form $this->createForm(LivreType::class, $livre);
  86.         $form->handleRequest($request);
  87.         $user $this->get('security.token_storage')->getToken()->getUser();
  88.         if ($form->isSubmitted() && $form->isValid()) {
  89.             $image $form->get('image')->getData();
  90.             if($image){
  91.                 $allowTypes = ['jpg''png''jpeg''gif','webp'];
  92.                 if (in_array($image->guessExtension(), $allowTypes)) {
  93.                     $fichier md5(uniqid()) . '.png';
  94.                     //$helpers->compressImage($image->getPathName(), $this->getParameter('images_directory') . '/' . $fichier, 75);
  95.                     $destination $this->getParameter('images_directory');
  96.                     
  97.                     $image->move(
  98.                         $destination,
  99.                         $fichier
  100.                     );
  101.                 
  102.                     $livre->setPhoto($fichier);
  103.                 
  104.                 } else {
  105.                     $this->addFlash('erreur'$fichier " n'est pas une image ");
  106.                     return new RedirectResponse($request->headers->get('referer'));
  107.                 }
  108.                 
  109.             }
  110.             $livre->setUser($user);
  111.             $livre->setStatus(1);
  112.             $livreRepository->add($livretrue);
  113.             return $this->redirectToRoute('app_livre_index', [], Response::HTTP_SEE_OTHER);
  114.         }
  115.         return $this->renderForm('livre/new.html.twig', [
  116.             'livre' => $livre,
  117.             'editMode' => $livre->getId() !== null,
  118.             'form' => $form,
  119.         ]);
  120.     }
  121.      /**
  122.      * @Route("/login", name="login")
  123.      */
  124.     public function login(Request $requestAuthenticationUtils $authenticationUtils)
  125.     {
  126.         if ($this->isGranted('ROLE_USER')) {
  127.             return $this->redirectToRoute('app_livre_index');
  128.         }
  129.         // get the login error if there is one
  130.         $error $authenticationUtils->getLastAuthenticationError();
  131.         // last username entered by the user
  132.         $lastUsername $authenticationUtils->getLastUsername();
  133.         $session $request->getSession();
  134.         return $this->render('livre/login.html.twig', [
  135.             'last_username' => $lastUsername,
  136.             'error' => $error,
  137.         ]);
  138.     }
  139.     /**
  140.      * @Route("/message/{message}", name="message", methods={"GET", "POST"})
  141.      */
  142.     public function message(String $message)
  143.     {
  144.         return $this->render('livre/message.html.twig', [
  145.             'message' => $message,
  146.         ]);
  147.     }
  148.      /**
  149.      * @Route("/mesLivres", name="mesLivres")
  150.      */
  151.     public function mesLivres(LivreRepository $repo)
  152.     {
  153.         if ($this->isGranted('ROLE_USER')) {
  154.             $user $this->get('security.token_storage')->getToken()->getUser();
  155.             $livres $repo->findBy(['user' => $user->getId()]);
  156.             // dd($livres);
  157.             return $this->render('user/mesLivres.html.twig', [
  158.                 'livres' => $livres,
  159.             ]);
  160.         } else {
  161.             return $this->redirectToRoute('login');
  162.         }
  163.     }
  164.      /**
  165.      * @Route("/mesFavoris", name="mesFavoris")
  166.      */
  167.     public function memFavoris(FavoriRepository $repo)
  168.     {
  169.         if ($this->isGranted('ROLE_USER')) {
  170.             $user $this->get('security.token_storage')->getToken()->getUser();
  171.             $favoris $repo->findBy(['User' => $user->getId()]);
  172.             // dd($livres);
  173.             return $this->render('user/mesFavoris.html.twig', [
  174.                 'favoris' => $favoris,
  175.             ]);
  176.         } else {
  177.             return $this->redirectToRoute('login');
  178.         }
  179.     }
  180.     /**
  181.      * @Route("/addfavori/{id}", name="addfavori", methods={"GET", "POST"})
  182.      */
  183.     public function addfavori(Request $requestlivre $livre ,FavoriRepository $favoriRepository,EntityManagerInterface $manager): Response
  184.     {
  185.         if ($this->isGranted('ROLE_USER')) {
  186.             $favori = new Favori();
  187.             $user $this->get('security.token_storage')->getToken()->getUser();
  188.             $existingFavori $favoriRepository->findOneBy([
  189.                 'User' => $user,
  190.                 'livre' => $livre,
  191.             ]);
  192.             if ($existingFavori) {
  193.                 $this->addFlash('error''Ce livre est dĂ©jĂ  ajoutĂ© aux favoris.');
  194.             } else {
  195.                 $favori->setUser($user);
  196.                 $favori->setLivre($livre);
  197.                 $manager->persist($favori);
  198.                 $manager->flush();
  199.                 $this->addFlash('success''Le livre a Ă©tĂ© ajoutĂ© aux favoris.');
  200.             }
  201.             return $this->redirectToRoute('app_livre_index');
  202.         } else {
  203.             return $this->redirectToRoute('login');
  204.         }
  205.         // return $this->redirectToRoute('message', ['message' => $message]); 
  206.     }
  207.     /**
  208.      * @Route("/livre/{id}/removeFavori", name="removeFavori",methods={"DELETE","POST"})
  209.      */
  210.     public function removeFavori(Request $requestFavori $favoriEntityManagerInterface $manager)
  211.     {
  212.         if ($this->isCsrfTokenValid('remove' $favori->getId(), $request->request->get('csrf_token'))) {
  213.             $manager->remove($favori);
  214.             $manager->flush();
  215.         }
  216.         return $this->redirectToRoute('mesFavoris');
  217.     }
  218.      /**
  219.      * @Route("/livre/{id}/remove", name="remove",methods={"DELETE","POST"})
  220.      */
  221.     public function remove(Request $requestLivre $livreEntityManagerInterface $em)
  222.     {
  223.         if ($this->isCsrfTokenValid('remove' $livre->getId(), $request->request->get('csrf_token'))) {
  224.             $livre->setStatus(3);
  225.             $em->persist($livre);
  226.             $em->flush();
  227.         }
  228.         return $this->redirectToRoute('mesLivres');
  229.     }
  230.     /**
  231.      * @Route("/logout", name="logout")
  232.      */
  233.     public function logout()
  234.     {
  235.     }
  236.     /**
  237.      * @Route("/{id}", name="app_livre_show", methods={"GET"})
  238.      */
  239.     public function show(Livre $livreDemandeRepository $demandeRepoTranslatorInterface $trans): Response
  240.     {
  241.         if ($this->isGranted('ROLE_USER')) {
  242.             $user $this->get('security.token_storage')->getToken()->getUser();
  243.             //vĂ©rifier si l'user a dĂ©jĂ  demandĂ© ce livre 
  244.             $demande $demandeRepo->findBy(['user' => $user,'livre' => $livre]);
  245.             if($demande){
  246.                 return $this->redirectToRoute('message', ['message' => $trans->trans("you already requested this book")]); 
  247.             }
  248.             
  249.         }
  250.         return $this->render('livre/show.html.twig', [
  251.             'livre' => $livre,
  252.         ]);
  253.     }
  254.     /**
  255.      * @Route("/{id}/edit", name="app_livre_edit", methods={"GET", "POST"})
  256.      */
  257.     public function edit(Request $requestLivre $livreLivreRepository $livreRepository): Response
  258.     {
  259.         $form $this->createForm(LivreType::class, $livre);
  260.         $form->handleRequest($request);
  261.         if ($form->isSubmitted() && $form->isValid()) {
  262.             $livreRepository->add($livretrue);
  263.             return $this->redirectToRoute('app_livre_index', [], Response::HTTP_SEE_OTHER);
  264.         }
  265.         return $this->renderForm('livre/edit.html.twig', [
  266.             'livre' => $livre,
  267.             'form' => $form,
  268.         ]);
  269.     }
  270.     /**
  271.      * @Route("/{id}", name="app_livre_delete", methods={"POST"})
  272.      */
  273.     public function delete(Request $requestLivre $livreLivreRepository $livreRepository): Response
  274.     {
  275.         if ($this->isCsrfTokenValid('delete'.$livre->getId(), $request->request->get('_token'))) {
  276.             $livreRepository->remove($livretrue);
  277.         }
  278.         return $this->redirectToRoute('app_livre_index', [], Response::HTTP_SEE_OTHER);
  279.     }
  280.     
  281.     /**
  282.      * @Route("/choix_livre/{id}/{demande}", name="choix_livre", methods={"GET", "POST"})
  283.      */
  284.     public function choixLivre(Request $requestlivre $livreDemande $demande ,DemandeRepository $demandeRepositoryNotificationRepository $notifRepo,EntityManagerInterface $managerTranslatorInterface $trans): Response
  285.     {
  286.         $user $this->get('security.token_storage')->getToken()->getUser();
  287.         $demande->setStatus(2);
  288.         $demande->setLivre2($livre);
  289.         $demande->setDate(new \DateTime());
  290.         $manager->persist($demande);
  291.         $manager->flush();
  292.         $livre->setStatus(2);
  293.         $manager->persist($livre);
  294.         $manager->flush();
  295.         $notif1 = new Notification();
  296.         $notif1->setUser($livre->getUser()); 
  297.         $notif1->setStatus(1);
  298.         $notif1->setDemande($demande);
  299.         $notifRepo->add($notif1true);
  300.         $existingNotif $notifRepo->findOneBy([
  301.             'user' => $user,
  302.             'demande' => $demande,
  303.         ]);
  304.         $existingNotif->setStatus(1);
  305.         // $notif2 = new Notification();
  306.         // $notif2->setUser($user); 
  307.         // $notif2->setStatus(1);
  308.         // $notif2->setDemande($demande);
  309.         // $notifRepo->add($notif2, true);
  310.         $message $trans->trans("your choice is confirmed, please contact the owner on "$livre->getUser()->getEmail());
  311.         return $this->redirectToRoute('message', ['message' => $message]); 
  312.     }
  313.     /**
  314.      * @Route("/markas/seen", name="markassuun", methods={"POST","GET"})
  315.      */
  316.     public function markassuun(Request $requestNotificationRepository $notificationRepositoryEntityManagerInterface $manager)
  317.     {
  318.         // Perform your quick action here
  319.         // Example: Update database, send email, etc.
  320.         $notifications $notificationRepository->findBy(['user' => $this->get('security.token_storage')->getToken()->getUser()]);
  321.         // Marquer toutes les notifications comme "seen"
  322.         foreach ($notifications as $notification) {
  323.             $notification->setStatus(2);
  324.         }
  325.         // Enregistrer les modifications dans la base de donnĂ©es
  326.         $manager->flush();
  327.         // Return a JSON response indicating success
  328.         return new JsonResponse(['success' => true]);
  329.     }
  330.     /**
  331.      * @Route("/create_demande/{id}", name="create_demande", methods={"GET", "POST"})
  332.      */
  333.     public function createDemande(Request $request,LivreRepository $livreRepolivre $livre ,NotificationRepository $notificationRepoDemandeRepository $demandeRepositoryEntityManagerInterface $managerTranslatorInterface $trans): Response
  334.     {
  335.         
  336.         $user $this->get('security.token_storage')->getToken()->getUser();
  337.         if($user==$livre->getUser()){
  338.             $message $trans->trans("Impossible to exchange with your own book");
  339.             return $this->redirectToRoute('message', ['message' => $message]); 
  340.         }
  341.         $demande = new Demande();
  342.         $demande->setUser($user); 
  343.         $demande->setLivre($livre); 
  344.         $demande->setStatus(1); 
  345.         $demande->setDate(new \DateTime());
  346.         $livre->setStatus(2);
  347.         $manager->persist($livre);
  348.         $manager->flush();
  349.         $demandeRepository->add($demandetrue);
  350.         $notification = new Notification();
  351.         $notification->setUser($livre->getUser()); 
  352.         $notification->setStatus(1);
  353.         $notification->setDemande($demande);
  354.         $notificationRepo->add($notificationtrue);
  355.         $message $trans->trans("Your reservation has been successfully registered and requires validation within 48 hours from now");
  356.         return $this->redirectToRoute('message', ['message' => $message]); 
  357.         // return $this->render('livre/message.html.twig', [
  358.         //     'message' => $message,
  359.         // ]);
  360.     }
  361.     /**
  362.      * @Route("/demande/notificationt", name="notif", methods={"GET"})
  363.      */
  364.     public function notif(DemandeRepository $demandeRepo)
  365.     {   
  366.         if ($this->isGranted('ROLE_USER')) {
  367.             $user $this->get('security.token_storage')->getToken()->getUser();
  368.             $demandes $demandeRepo->demandes($user->getId());
  369.             $demande2 $demandeRepo->findBy(['user' => $user,'status' => 2]);
  370.             $mergedArray array_merge($demandes$demande2);
  371.         
  372.             uasort($mergedArray, function($a$b) {
  373.                 return $b->getDate() <=> $a->getDate();
  374.             });
  375.             // Sort the array  
  376.             // usort($mergedArray, 'datecompare');
  377.             dump($mergedArray);
  378.             return $this->render('livre/notif.html.twig', [
  379.                 'count' => count($mergedArray),
  380.                 "demandes" => $mergedArray,
  381.                 "user" => $user
  382.             ]);
  383.            
  384.         } else {
  385.             return new Response(nullResponse::HTTP_OK);
  386.         }
  387.     }
  388.     /**
  389.      * @Route("/demande/notificationt2", name="notif2", methods={"GET"})
  390.      */
  391.     public function notif2(NotificationRepository $notificationRepo)
  392.     {   
  393.         if ($this->isGranted('ROLE_USER')) {
  394.             $user $this->get('security.token_storage')->getToken()->getUser();
  395.             $notifications $notificationRepo->findBy(['user' => $user->getId()],['id' => 'DESC'],5);
  396.             // $demande2 = $notificationRepo->findBy(['user' => $user,'status' => 2]);
  397.             // count des notif non lu parmis 5 dernier ;
  398.             // $count="4";
  399.             $count $notificationRepo->count([
  400.                 'user' => $user,
  401.                 'status' => 1
  402.             ]);
  403.             return $this->render('livre/notif2.html.twig', [
  404.                 'count' => $count,
  405.                 "notifications" => $notifications,
  406.                 "user" => $user
  407.             ]);
  408.            
  409.         } else {
  410.             return new Response(nullResponse::HTTP_OK);
  411.         }
  412.     }
  413.     /**
  414.      * @Route("/change-locale/{locale}", name="change_locale")
  415.      */
  416.     public function changeLocale($url =null,$localeRequest $request)
  417.     {
  418.         $request->getSession()->set('_locale'$locale);
  419.         if($url){
  420.             $urlbase =  $request->server->get("HTTP_HOST");
  421.             return $this->redirect('http://'.$urlbase.'/'.$url);
  422.         }
  423.         if ($request->headers->get('referer')) {
  424.             return $this->redirect($request->headers->get('referer'));
  425.         }
  426.         return $this->redirectToRoute('app_livre_index');
  427.     }
  428.     /**
  429.      * @Route("/cancel/{livre}/{demande}", name="app_echange_cancel", methods={"GET"})
  430.      */
  431.     public function cancelEchange(Livre $livreDemande $demande,EntityManagerInterface $manager): Response
  432.     {
  433.         $demande->setStatus(3);
  434.         $demande->setDate(new \DateTime());
  435.         $manager->persist($demande);
  436.         $manager->flush();
  437.         $livre->setStatus(3);
  438.         $manager->persist($livre);
  439.         $manager->flush();
  440.         // to referer
  441.         return $this->redirectToRoute('app_livre_index');
  442.     }
  443.     
  444.     
  445. }