src/Controller/ArticleController.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Articles;
  4. use App\Entity\Images;
  5. use App\Repository\ArticlesRepository;
  6. use App\Repository\CategoriesRepository;
  7. use App\Repository\ImagesRepository;
  8. use App\Repository\VillesRepository;
  9. use App\services\ImageOptimizer;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\Notifier\Notification\Notification;
  17. use Symfony\Component\Notifier\Notifier;
  18. use Symfony\Component\Notifier\NotifierInterface;
  19. #[Route('/article'name'app_article')]
  20. class ArticleController extends AbstractController
  21. {
  22.     private  CategoriesRepository  $categoriesRepository ;
  23.     private  ImagesRepository $imagesRepository ;
  24.     private   VillesRepository $villesRepository;
  25.     private ImageOptimizer $imageOptimizer ;
  26.     /**
  27.      * @param CategoriesRepository $categoriesRepository
  28.      * @param ImagesRepository $imagesRepository
  29.      * @param VillesRepository $villesRepository
  30.      */
  31.     public function __construct(CategoriesRepository $categoriesRepositoryImagesRepository $imagesRepositoryVillesRepository $villesRepositoryImageOptimizer $imageOptimizer)
  32.     {
  33.         $this->categoriesRepository $categoriesRepository;
  34.         $this->imagesRepository $imagesRepository;
  35.         $this->villesRepository$villesRepository ;
  36.         $this->imageOptimizer $imageOptimizer ;
  37.     }
  38.     #[Route('/'name'index')]
  39.     public function index(): Response
  40.     {
  41.         return $this->render('article/index.html.twig', [
  42.             'controller_name' => 'ArticleController',
  43.         ]);
  44.     }
  45.     #[Route('add'name'add')]
  46.     public function add(Request $request,  EntityManagerInterface $entityManager): Response
  47.     {
  48.         if(!$this->getUser()){
  49.             return $this->redirectToRoute('app_login');
  50.         }
  51.         $article = new Articles();
  52.         $categories $this->categoriesRepository->findAll();
  53.         $villes =  $this->villesRepository->findAll() ;
  54.         if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-article'$request->request->get('token')))) {
  55.             $article $this->buildArticle($request);
  56.             $articleFile $request->files->get("articleFile");
  57.             $newFilename "";
  58.             $destination "";
  59.             if (!empty($articleFile)) {
  60.                 $destination $this->getParameter('kernel.project_dir') . '/public/uploads/articles/' trim($article->getCode());
  61.                 $newFilename uniqid() . "-" $article->getCode() . '.' $articleFile->guessExtension();
  62.                 $article->setImageprincipale($newFilename);
  63.             }
  64.             if ($this->articleCheck($article)) {
  65.                 try {
  66.                     $articleFile->move($destination$newFilename);
  67.                     $this->imageOptimizer->resize($destination.'/'.$newFilename);
  68.                 } catch (FileException $ex) {
  69.                 }
  70.                 $entityManager->persist($article);
  71.                 $entityManager->flush();
  72.                 return $this->redirectToRoute('app_articledetail',['id'=>$article->getId()]);
  73.             }
  74.         }
  75.         return $this->render('article/add.html.twig', [
  76.             'categories' =>  $categories,
  77.             'article' => $article,
  78.             'villes'=>$villes
  79.         ]);
  80.     }
  81.     #[Route('detail/{id}'name'detail')]
  82.     public function detailArticle(ArticlesRepository $articlesRepositoryArticles $article): Response{
  83.         return $this->render('article/detail.html.twig', [
  84.             'article' => $article
  85.         ]);
  86.     }
  87.     #[Route('publier/{id}'name'publication')]
  88.     public function publierArticle(ArticlesRepository $articlesRepositoryArticles $articleEntityManagerInterface $entityManager,NotifierInterface $notifier): Response{
  89.         if($article->getId() > 0){
  90.             $article->setStatus(UtilsFunctions::PUBLICATION_STATUS);
  91.             $article->setPubDate(new \DateTimeImmutable());
  92.             $entityManager->persist($article);
  93.             $entityManager->flush();
  94.             $notifier->send(new Notification("Operation réussie  l'article est bien publié",['browser']));
  95.         }else{
  96.             return $this->render('errorrs/notfound.html.twig', [
  97.                 'article' => $article
  98.             ]);
  99.         }
  100.         return $this->render('article/detail.html.twig', [
  101.             'article' => $article
  102.         ]);
  103.     }
  104.     #[Route('suspendre/{id}'name'suspension')]
  105.     public function suspendreArticle(ArticlesRepository $articlesRepositoryArticles $articleEntityManagerInterface $entityManagerNotifierInterface $notifier): Response{
  106.         if($article->getId() > 0){
  107.             $article->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);
  108.             $article->setPubDate(new \DateTimeImmutable());
  109.             $entityManager->persist($article);
  110.             $entityManager->flush();
  111.             $notifier->send(new Notification("Operation réussie  l'article est suspendu",['browser']));
  112.         }else{
  113.             return $this->render('errorrs/notfound.html.twig', [
  114.                 'article' => $article
  115.             ]);
  116.         }
  117.         return $this->render('article/detail.html.twig', [
  118.             'article' => $article
  119.         ]);
  120.     }
  121.     #[Route('delete/{id}'name'supprimer')]
  122.     public function supprimerArticle(ArticlesRepository $articlesRepositoryArticles $articleEntityManagerInterface $entityManager): Response{
  123.         if($article->getId() > 0){
  124.             $article->setStatus(UtilsFunctions::DELETE_STATUS);
  125.             $entityManager->persist($article);
  126.             $entityManager->flush();
  127.         }else{
  128.             return $this->render('errorrs/notfound.html.twig', [
  129.                 'article' => $article
  130.             ]);
  131.         }
  132.         return $this->redirectToRoute('app_vendor_home_index');
  133.     }
  134.     #[Route('image/{id}'name'addimage')]
  135.     public function addImage(Request $request,  EntityManagerInterface $entityManager,ArticlesRepository $articlesRepositoryArticles $article,){
  136.              $image = new Images();
  137.              if($request->isMethod("POST") && ($this->isCsrfTokenValid('add-image'$request->request->get('token')))) {
  138.                  $articleId $request->request->get('id');
  139.                  $articleForImage $articlesRepository->find($articleId);
  140.                  $image1 $request->files->get("image1");
  141.                  $image2 $request->files->get("image2");
  142.                  $image3 $request->files->get("image3");
  143.                  $image4 $request->files->get("image4");
  144.                  $this->deleteOldImage($articleForImage);
  145.                  $this->saveImage($articleForImage,$image1$entityManager);
  146.                  $this->saveImage($articleForImage,$image2,$entityManager);
  147.                  $this->saveImage($articleForImage,$image3$entityManager);
  148.                  $this->saveImage($articleForImage,$image4$entityManager);
  149.                  return $this->redirectToRoute('app_articledetail',['id'=>$articleId]);
  150.              }
  151.             return $this->render('article/add-image.html.twig', [
  152.                 'article' => $article
  153.             ]);
  154.     }
  155.     public function deleteOldImage(Articles $article){
  156.         $images $article->getImages() ;
  157.         if(!$images->isEmpty()){
  158.             for($i=0$i $images->count() ; $i++){
  159.                 $image $images->get($i);
  160.                 $this->imagesRepository->remove($image);
  161.             }
  162.         }
  163.     }
  164.     public function saveImage(Articles $article$imageFileEntityManagerInterface $entityManager){
  165.         $imageTosave = new Images();
  166.         if (!empty($imageFile)) {
  167.             $destination $this->getParameter('kernel.project_dir') . '/public/uploads/articles/' trim($article->getCode());
  168.             $code UtilsFunctions::generateRandomString(4);
  169.             $newFilename uniqid() . "-" .$code '.' $imageFile->guessExtension();
  170.             $imageTosave->setCode($code);
  171.             $imageTosave->setNom($newFilename);
  172.             $imageTosave->setArticle($article);
  173.             try {
  174.                 $imageFile->move($destination$newFilename);
  175.                 $this->imageOptimizer->resize($destination.'/'.$newFilename);
  176.                 $entityManager->persist($imageTosave);
  177.                 $entityManager->flush();
  178.             } catch (FileException $ex) {
  179.             }
  180.         }
  181.     }
  182.     public  function buildArticle($request):Articles
  183.     {
  184.         $article = new Articles();
  185.         $article->setLibelle($request->request->get('libelle'));
  186.         $article->setDescription($request->request->get('description'));
  187.         $article->setEtat($request->request->get('etat'));
  188.         $prix = !empty($request->request->get('prix'))?$request->request->get('prix'):;
  189.         $article->setPrix($prix);
  190.         $article->setVille($request->request->get('ville'));
  191.         $ispromo = !empty($request->request->get('ispromo'));
  192.         $issolde = !empty($request->request->get('issolde'));
  193.         $isnoprice= !empty($request->request->get('isNoprice'));
  194.         $article->setIsNoprice($isnoprice);
  195.         $article->setIsSolde($issolde);
  196.         $article->setIspromo($ispromo);
  197.         $prixpromo = !empty($request->request->get('prixpromo'))?$request->request->get('prixpromo'):;
  198.         $article->setPrixpromo($prixpromo);
  199.         $soldepourcentage =!empty($request->request->get('soldePourcentage'))?$request->request->get('soldePourcentage'):;
  200.         $article->setSoldePourcentage($soldepourcentage);
  201.         $article->setStatus(UtilsFunctions::NO_PUBLICATION_STATUS);
  202.         $article->setCategorie($this->categoriesRepository->find($request->request->get('categorie')));
  203.         $article->setVille($request->request->get('ville'));
  204.         $article->setCreatedBy($this->getUser());
  205.         $article->setSlug(substr($article->getLibelle(),0,6)."-".UtilsFunctions::generateRandomString(5));
  206.         $article->setCode(UtilsFunctions::generateRandomString(8));
  207.         $article->setCreatedAt(new \DateTimeImmutable());
  208.         return  $article ;
  209.     }
  210.     private function articleCheck(Articles $article):bool{
  211.        return (!empty($article->getLibelle()) || !empty($article->getImageprincipale())|| !empty($article->getCategorie()) || !empty("ville")) ;
  212.     }
  213. }