src/Controller/FrontendController.php line 24

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Filtre;
  4. use App\Entity\Utilisateur;
  5. use App\Form\FiltreType;
  6. use App\Repository\ConfigurationRepository;
  7. use App\Repository\DocumentationRepository;
  8. use App\Repository\MarqueRepository;
  9. use App\Repository\ProduitRepository;
  10. use App\Repository\UrlRepository;
  11. use App\Repository\VendeurRepository;
  12. use App\Service\CrawlService;
  13. use PhpParser\Node\Expr\Array_;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\HttpFoundation\Request;
  18. class FrontendController extends AbstractController
  19. {
  20.     #[Route('/'name'homepage')]
  21.     public function index(?Utilisateur $utilisateurUrlRepository $urlRepository): Response
  22.     {
  23.             $derniereUrl $urlRepository->findBy([],["dateTimeMaj"=>"DESC"],['limit'=>1]);
  24.             return $this->render('frontend/camouflage.html.twig', [
  25.                 'derniereUrl' => $derniereUrl[0]->getDateTimeMaj()
  26.             ]);
  27.     }
  28.     #[Route('/documentation'name'app_documentation')]
  29.     public function documentation(DocumentationRepository $documentationRepository): Response
  30.     {
  31.         return $this->render('frontend/documentation.html.twig', [
  32.             'documentation' => $documentationRepository->findAll(),
  33.         ]);
  34.     }
  35.     #[Route('/dashboard/{mode?}'name'app_dashboard'defaults: ['mode' => null], methods: ['GET''POST'])]
  36.     public function dashboard(Request $request,
  37.                               ProduitRepository $produitRepository,
  38.                               UrlRepository $urlRepository,
  39.                               VendeurRepository $vendeurRepository,
  40.                               ConfigurationRepository $configurationRepository,
  41.                               $mode): Response
  42.     {
  43.         //tableau pour le stockage des résultats [nomProduit] = Array(urlEntity1, urlEntity2...)
  44.         $resultat = Array();
  45.         $correspondanceProduitId = Array();
  46.         $prixReferents = Array();
  47.         $tousLesVendeurs $vendeurRepository->findAll();
  48.         //récupère tous les produits
  49.         //$produits = $produitRepository->findAll();
  50.         if($mode == null){
  51.             $produits $produitRepository->getProduits();
  52.         }elseif($mode == "integrateur"){
  53.             $produits $produitRepository->findBy([],['id' => 'DESC']);
  54.         }
  55.         $vendeurReferentPrimaire $configurationRepository->findOneBy(["parametre" => "vendeurReferentPrimaire"])->getValeur();
  56.         $vendeurReferentSecondaire $configurationRepository->findOneBy(["parametre" => "vendeurReferentSecondaire"])->getValeur();
  57.         $dashboardUrlsRapide $configurationRepository->findOneBy(["parametre" => "dashboardUrlsRapide"])->getValeur();
  58.         //filtre de recherche pour le dashboard
  59.         //création du formulaire
  60.         $filtre = new Filtre();
  61.         $form $this->createForm(FiltreType::class, $filtre);
  62.         $form->handleRequest($request);
  63.         if ($form->isSubmitted() && $form->isValid()) {
  64.             /*
  65.             /Si une ou plusieurs marques ont été choisi, on prend le tableau des valeur du formulaire et on lance
  66.             /une nouvelle récupération des produits qui respectent  la ou les marques choisi
  67.             */
  68.             if(isset($_POST['filtre']['marque'])){
  69.                 $produits $produitRepository->findBy(
  70.                     ['marque' => $_POST['filtre']['marque']]
  71.                 );
  72.             }
  73.             /*
  74.             /Si une ou plusieurs produits ont été choisi, on prend le tableau des valeurs du formulaire et on lance
  75.             /une nouvelle récupération des produits qui respectent  la ou les produits choisi
  76.             */
  77.             if(isset($_POST['filtre']['produit'] )){
  78.                 $produits $produitRepository->findBy(
  79.                     ['id' => $_POST['filtre']['produit']]
  80.                 );
  81.             }
  82.         }
  83.         //findUrlsByIdProduitAndVendeur
  84.         //Mise en variable des résultats [nomProduit] = Array(urlEntity1, urlEntity2...)
  85.         foreach ($produits as $produit) {
  86.             $resultat[$produit->getNom()] = $urlRepository->findUrlsByIdProduit($produit->getId());
  87.             $correspondanceProduitId[$produit->getNom()] = $produit->getId();
  88.             if ($form->isSubmitted() && $form->isValid()) {
  89.                 if(isset($_POST['filtre']['vendeur'])){
  90.                     $resultat[$produit->getNom()] = $urlRepository->findUrlsByIdProduitAndVendeur($produit->getId(),$_POST['filtre']['vendeur']);
  91.                 }
  92.             }
  93.             foreach ($urlRepository->findUrlsByIdProduit($produit->getId()) as $url){
  94.                 if($url->getVendeur() == $vendeurReferentPrimaire || $url->getVendeur() == $vendeurReferentSecondaire){
  95.                     $prixReferents[$produit->getNom()] = $url->getPrix();
  96.                 }
  97.             }
  98.         }
  99.         return $this->render('frontend/index.html.twig', [
  100.             'produits' => $resultat,
  101.             'correspondanceProduitId' => $correspondanceProduitId,
  102.             'prixReferents' => $prixReferents,
  103.             'tousLesVendeurs' => $tousLesVendeurs,
  104.             'dashboardUrlsRapide'=>$dashboardUrlsRapide,
  105.             'form' => $form->createView(),
  106.         ]);
  107.     }
  108. }