src/Controller/MainController.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Supplier;
  4. use App\Entity\Users;
  5. use App\Entity\Articles;
  6. use App\Entity\Commentaires;
  7. use App\Form\CommentairesType;
  8. use App\Entity\Categories;
  9. use App\Entity\SousCategories;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\HttpFoundation\File\File;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use Knp\Component\Pager\PaginatorInterface// Nous appelons le bundle KNP Paginator
  16. use Symfony\Bridge\Twig\Mime\NotificationEmail;
  17. use Symfony\Component\Mailer\MailerInterface;
  18. class MainController extends AbstractController
  19. {
  20.     private $mailer;
  21.     public function __construct(MailerInterface $mailer)
  22.      {
  23.         $this->mailer $mailer;
  24.      }
  25.     /**
  26.      * @Route("/", name="accueil")
  27.      */
  28.     public function index(Request $requestPaginatorInterface $paginator)
  29.     {
  30.         // Nous générons la vue de la page d'accueil
  31.         $donnees $this->getDoctrine()->getRepository(Articles::class)->findBy(['deleted_at' => null'actif' => 1],['created_at' => 'desc']);
  32.         $countNew $this->getDoctrine()->getRepository(Articles::class)->countNewArticles();
  33.         
  34.         $articles $paginator->paginate(
  35.             $donnees// Requête contenant les données à paginer (ici nos articles)
  36.             $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  37.             60 // Nombre de résultats par page
  38.         ); 
  39.         
  40.         return $this->render('main/index.html.twig',[
  41.             'articles' => $articles,
  42.             'countNew' => $countNew
  43.         ]);
  44.     }
  45.     
  46.     public function rigthData(Request $request)
  47.     {
  48.         $bestSupplier $this->getDoctrine()->getRepository(Supplier::class)->getBestSuppliers();
  49.         $popularArticle $this->getDoctrine()->getRepository(Articles::class)->getPopularArticle();
  50.         
  51.         return $this->render('main/rightIndex.html.twig',[
  52.             'bestSupplier' => $bestSupplier,
  53.             'popularArticle' => $popularArticle
  54.             
  55.         ]);
  56.     }
  57.     
  58.     public function filterForm(Request $request)
  59.     {
  60.         $suppler = new Supplier;
  61.         
  62.         $listCity $suppler::$listCity;
  63.         
  64.         return $this->render('main/filter_form.html.twig',[
  65.             'listCity' => $listCity,
  66.             
  67.         ]);
  68.     }
  69.     
  70.     /**
  71.      * @Route("/new-promo", name="new")
  72.      */
  73.     public function newPromo(Request $requestPaginatorInterface $paginator)
  74.     {
  75.         // Nous générons la vue de la page d'accueil
  76.         $donnees $this->getDoctrine()->getRepository(Articles::class)->getNewArticles();
  77.         $articles $paginator->paginate(
  78.             $donnees// Requête contenant les données à paginer (ici nos articles)
  79.             $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  80.             60 // Nombre de résultats par page
  81.         );
  82.         return $this->render('main/indexNewArticles.html.twig',[
  83.             'articles' => $articles,
  84.             
  85.         ]);
  86.     }
  87.     
  88.     /**
  89.      * @Route("/hot-promo", name="hot")
  90.      */
  91.     public function hotPromo(Request $requestPaginatorInterface $paginator)
  92.     {
  93.         // Nous générons la vue de la page d'accueil
  94.         $donnees $this->getDoctrine()->getRepository(Articles::class)->getHotArticles();
  95.         $articles $paginator->paginate(
  96.             $donnees// Requête contenant les données à paginer (ici nos articles)
  97.             $request->query->getInt('page'1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  98.             60 // Nombre de résultats par page
  99.         );
  100.         return $this->render('main/indexHotArticles.html.twig',[
  101.             'articles' => $articles,
  102.             
  103.         ]);
  104.     }
  105.     
  106.     /**
  107.      * @Route("/all-stores", name="all_stores")
  108.      */
  109.     public function stores()
  110.     {
  111.         $suppliers $this->getDoctrine()->getRepository(Supplier::class)->findBy(['deleted_at' => null],['name' => 'asc']);
  112.         // Nous générons la vue de la page d'accueil
  113.         return $this->render('main/stores.html.twig',[
  114.             "suppliers" => $suppliers
  115.         ]);
  116.     }
  117.     
  118.     /**
  119.      * @Route("/articles-store/{id}", name="article_store")
  120.      */
  121.     public function storeArticles($idRequest $request)
  122.     {
  123.         //DQL for perfermence
  124.         $supplier $this->getDoctrine()->getRepository(Supplier::class)->find($id);
  125.         //@TODOadd where actif and date limit promo
  126.         $articles $this->getDoctrine()->getRepository(Articles::class)->findBy(['supplier' => $supplier ,'deleted_at' => null'actif' => 1],['created_at' => 'desc']);
  127.         // Nous générons la vue de la page d'accueil
  128.         return $this->render('main/articles.html.twig',[
  129.             "articles" => $articles,
  130.             "supplier" => $supplier
  131.         ]);
  132.     }
  133.     /**
  134.      * @Route("/suppliers-store/{user_id}", name="suppliers_store")
  135.      */
  136.     public function listStore($user_idRequest $request)
  137.     {
  138.         $user $this->getDoctrine()->getRepository(Users::class)->find($user_id);
  139.         //DQL for perfermence
  140.         $suppliers $this->getDoctrine()->getRepository(Supplier::class)->findBy(['user' => $user]);
  141.         // Nous générons la vue de la page d'accueil
  142.         return $this->render('main/user_suppliers.html.twig',[
  143.             "suppliers" => $suppliers
  144.         ]);
  145.     }
  146.     /**
  147.      * @Route("/mentions-legales", name="mentions-legales")
  148.      */
  149.     public function mentionsLegales()
  150.     {
  151.         // Nous générons la vue de la page des mentions légales
  152.         return $this->render('main/mentions-legales.html.twig');
  153.     }
  154.     /**
  155.      * @Route("/change_locale/{locale}", name="change_locale")
  156.      */
  157.     public function changeLocale($localeRequest $request)
  158.     {
  159.         //$request->setLocale($locale);
  160.         $request->getSession()->set('_locale'$locale);
  161.         return $this->redirect($request->headers->get('referer'));
  162.     }
  163.     
  164.     /**
  165.      * @Route("/view-article-sorte/{slug}", name="web_store_article")
  166.     */
  167.     public function storeArticle($slugRequest $requestTranslatorInterface $translator)
  168.     {
  169.         
  170.         // On récupère l'article correspondant au slug
  171.         $article $this->getDoctrine()->getRepository(Articles::class)->findOneBy(['slug' => $slug]);
  172.         $commentaires $this->getDoctrine()->getRepository(Commentaires::class)->findBy([
  173.             'articles' => $article,
  174.             'actif' => 1
  175.         ],['created_at' => 'desc']);
  176.         if(!$article){
  177.             // Si aucun article n'est trouvé, nous créons une exception
  178.             throw $this->createNotFoundException('L\'article n\'existe pas');
  179.         }
  180.         // Nous créons l'instance de "Commentaires"
  181.         $commentaire = new Commentaires();
  182.         // Nous créons le formulaire en utilisant "CommentairesType" et on lui passe l'instance
  183.         $form $this->createForm(CommentairesType::class, $commentaire);
  184.         // Nous récupérons les données
  185.         $form->handleRequest($request);
  186.         // Nous vérifions si le formulaire a été soumis et si les données sont valides
  187.         if ($form->isSubmitted() && $form->isValid()) {
  188.             // Hydrate notre commentaire avec l'article
  189.             $commentaire->setArticles($article);
  190.             // Hydrate notre commentaire avec la date et l'heure courants
  191.             $commentaire->setCreatedAt(new \DateTime('now'));
  192.             $doctrine $this->getDoctrine()->getManager();
  193.             // On hydrate notre instance $commentaire
  194.             $doctrine->persist($commentaire);
  195.             // On écrit en base de données
  196.             $doctrine->flush();
  197.             $this->mailer->send((new NotificationEmail())
  198.             ->subject('New comment posted')
  199.             ->htmlTemplate('emails/comment_notification.html.twig')
  200.             ->from('site@example.com')
  201.             ->to('mohamed.chebli@hotmail.com')
  202.             ->context(['commentPseudo' => $commentaire->getPseudo(),
  203.                        'commentContenu' => $commentaire->getContenu()])
  204.        );
  205.             $message $translator->trans('Comment published successfully');
  206.             $this->addFlash('message'$message);
  207.             return $this->redirectToRoute('web_store_article',['slug' => $slug]);
  208.         }
  209.         // Si l'article existe nous envoyons les données à la vue
  210.         return $this->render('main/web_article.html.twig', [
  211.             'form' => $form->createView(),
  212.             'article' => $article,
  213.             'commentaires' => $commentaires,
  214.         ]);
  215.     }
  216.     
  217.     /**
  218.      * @Route("/all-categories", name="all_categories")
  219.      */
  220.     public function categories()
  221.     {
  222.         $suupliers = [];
  223.         $categories $this->getDoctrine()->getRepository(Categories::class)->findBy(['deleted_at' => null],['nom' => 'asc']);
  224.         // Nous générons la vue de la page d'accueil
  225.         return $this->render('main/categories.html.twig',[
  226.             "categories" => $categories
  227.         ]);
  228.     }
  229.     
  230.     /**
  231.      * @Route("/articles/categorie/{slug}", name="articles_categorie")
  232.      */
  233.     public function articlesCategorie($slugRequest $request)
  234.     {
  235.         $articles = [];
  236.         $categorie $this->getDoctrine()->getRepository(Categories::class)->findOneBy(['slug' => $slug]);
  237.         $categories $this->getDoctrine()->getRepository(Categories::class)->findBy(['deleted_at' => null],['nom' => 'asc']);
  238.         foreach ($categorie->getArticles() as $article){
  239.             if($article->getDeletedAt() == null && $article->getActif()) {
  240.                 $articles[] = $article;
  241.             }
  242.         }
  243.         
  244.         // Nous générons la vue de la page d'accueil
  245.         return $this->render('main/categorie_articles.html.twig',[
  246.             "categorie" => $categorie,
  247.             "categories" => $categories,
  248.             "articles" => $articles
  249.         ]);
  250.     }
  251.     /**
  252.      * @Route("/articles/categorie/{slug}/sub-categorie/{id}", name="articles_sous_categorie")
  253.      */
  254.     public function articlesSubCategorie($slug$idRequest $request)
  255.     {
  256.         
  257.         $articles = [];
  258.         $categorie $this->getDoctrine()->getRepository(Categories::class)->findOneBy(['slug' => $slug]);
  259.         $subCategorie $this->getDoctrine()->getRepository(SousCategories::class)->find($id);
  260.                 
  261.         foreach ($subCategorie->getArticles() as $article){
  262.             if($article->getDeletedAt() == null && $article->getActif()) {
  263.                 $articles[] = $article;
  264.             }
  265.         }
  266.         
  267.         // Nous générons la vue de la page d'accueil
  268.         return $this->render('main/sous_categorie_articles.html.twig',[
  269.             "subCategorie" => $subCategorie,
  270.             "categorie" => $categorie,
  271.             "articles" => $articles
  272.         ]);
  273.     }
  274. }