src/Controller/MainController.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CatalogueImport;
  4. use App\Entity\Images;
  5. use App\Entity\ProductAccessories;
  6. use App\Entity\Products;
  7. use App\Entity\SearchProductsType;
  8. use App\Entity\SelectRecommendation;
  9. use App\Form\ProductsFormType;
  10. use App\Service\SelectTracker;
  11. use App\Form\SearchProductsFormType;
  12. use App\Repository\CategoriesRepository;
  13. use App\Repository\ProductsRepository;
  14. use App\Repository\CatalogueImportRepository;
  15. use App\Service\PictureService;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\String\Slugger\SluggerInterface;
  22. class MainController extends AbstractController
  23. {
  24.     /**
  25.      * Construit la liste des produits proposés, pour les indicateurs SELECT.
  26.      *
  27.      * @return array<int,array{slug:string,name:?string,kind:string}>
  28.      */
  29.     private function collectRecommendations(?array $products, ?array $products2, ?array $accessories): array
  30.     {
  31.         $out = [];
  32.         foreach ([
  33.             SelectRecommendation::KIND_MAIN      => $products,
  34.             SelectRecommendation::KIND_ADVISED   => $products2,
  35.             SelectRecommendation::KIND_ACCESSORY => $accessories,
  36.         ] as $kind => $list) {
  37.             foreach ($list ?? [] as $product) {
  38.                 if ($product->getSlug()) {
  39.                     $out[] = [
  40.                         'slug' => $product->getSlug(),
  41.                         'name' => $product->getName(),
  42.                         'kind' => $kind,
  43.                     ];
  44.                 }
  45.             }
  46.         }
  47.         return $out;
  48.     }
  49.     #[Route('/'name'main'methods: ['POST''GET'])]
  50.     public function index(EntityManagerInterface $entityManagerCategoriesRepository $categoriesRepositoryProductsRepository $productsRepositoryCatalogueImportRepository $catalogueImportRepositoryRequest $requestSelectTracker $selectTracker, array $catalogueHostsstring $publicSiteUrl): Response
  51.     {
  52.         // La racine sert le sélecteur SELECT. Sur les hôtes du catalogue elle n'a
  53.         // pas d'objet : on renvoie vers le site vitrine plutôt que d'afficher un
  54.         // outil qui n'y a pas sa place. Les entrées du catalogue restent
  55.         // /produits/{slug} et /categories/{slug}.
  56.         if (in_array($request->getHost(), $catalogueHoststrue)) {
  57.             return $this->redirect($publicSiteUrl);
  58.         }
  59.         $tabProductAccessories = [];
  60.         // On crée le formulaire
  61.         $searchProductsType = new SearchProductsType();
  62.         $searchProductsForm $this->createForm(SearchProductsFormType::class, $searchProductsType);
  63.         // On traite la requête du formulaire
  64.         $searchProductsForm->handleRequest($request);
  65.         $isAnswerAEnabled false;
  66.         $isAnswerBEnabled false;
  67.         $isAnswerCEnabled false;
  68.         $isAnswerDEnabled false;
  69.         $isAnswerEEnabled false;
  70.         $isAnswerFEnabled false;
  71.         $isAnswerGEnabled false;
  72.         $isAnswerHEnabled false;
  73.         $isAnswerIEnabled false;
  74.         $isAnswerJEnabled false;
  75.         $isAnswerKEnabled false;
  76.         $isAnswerLEnabled false;
  77.         $questionAValue "";
  78.         $questionBValue "";
  79.         $questionCValue "";
  80.         $questionDValue "";
  81.         $questionEValue "";
  82.         $questionFValue "";
  83.         $questionGValue "";
  84.         $questionHValue "";
  85.         $questionIValue "";
  86.         $questionJValue "";
  87.         $questionKValue "";
  88.         $questionLValue "";
  89.         $products null;
  90.         $products2 null;
  91.         $accessories null;
  92.         $tabProductsProducts2 null;
  93.         $catalogueImports $catalogueImportRepository->findAll();
  94.         //On vérifie si le formulaire est soumis ET valide
  95.         if ($searchProductsForm->isSubmitted() && $searchProductsForm->isValid()) {
  96.             if ($request->get('questionA')) {
  97.                 $isAnswerBEnabled true;
  98.                 $questionAValue $request->get('questionA');
  99.             }
  100.             if ($request->get('questionB')) {
  101.                 $questionBValue $request->get('questionB');
  102.                 if ($questionAValue == "Chalumeau") {
  103.                     if (!preg_match('/coupe/i'trim($questionBValue))) {
  104.                         $isAnswerDEnabled true;
  105.                         $questionCValue '-';
  106.                     } else {
  107.                         $isAnswerCEnabled true;
  108.                     }
  109.                 } else {
  110.                     $isAnswerCEnabled true;
  111.                     $questionCValue '-';
  112.                 }
  113.             }
  114.             if ($request->get('questionC')) {
  115.                 $isAnswerDEnabled true;
  116.                 $questionCValue $request->get('questionC');
  117.             }
  118.             if ($request->get('questionD')) {
  119.                 $isAnswerEEnabled true;
  120.                 $questionDValue $request->get('questionD');
  121.             }
  122.             if ($request->get('questionE')) {
  123.                 $questionEValue $request->get('questionE');
  124.                 if ($questionAValue != "Chalumeau") {
  125.                     if (preg_match('/flamme/i'trim($questionBValue))) {
  126.                         $isAnswerGEnabled true;
  127.                         $questionFValue '-';
  128.                     } else {
  129.                         $isAnswerFEnabled true;
  130.                     }
  131.                 } else {
  132.                    
  133.                    $isAnswerFEnabled true;
  134.                 }
  135.             }
  136.             if ($request->get('questionF')) {
  137.                 $isAnswerGEnabled true;
  138.                 $questionFValue $request->get('questionF');
  139.                 if ($questionAValue == "Chalumeau") {
  140.                    
  141.                     //  chalumeaux SOUDEURS et soudage/brasage et CHAUFFEURS
  142.                     if (!preg_match('/coupe/i'trim($questionBValue))) {
  143.                         $isAnswerHEnabled false;
  144.                         $isAnswerGHEnabled false;
  145.                     } else {
  146.                         $isAnswerHEnabled true;
  147.                     }
  148.                     
  149.                 }
  150.             }
  151.             if ($request->get('questionG')) {
  152.                 $isAnswerHEnabled true;
  153.                 if ($questionAValue == "Chalumeau") {
  154.                   //  chalumeaux SOUDEURS et soudage/brasage et CHAUFFEURS
  155.                   if (!preg_match('/coupe/i'trim($questionBValue))) {
  156.                       $isAnswerHEnabled false;
  157.                   }
  158.                 }
  159.                 $questionGValue $request->get('questionG');
  160.             }
  161.             
  162.             if ($request->get('questionH')) {
  163.                 if ($questionAValue != "Chalumeau") {
  164.                     $isAnswerJEnabled true;
  165.                     $questionIValue '-';
  166.                 } else {
  167.                     $isAnswerIEnabled false;
  168.                 }
  169.                 $questionHValue $request->get('questionH');
  170.             }
  171.             if ($request->get('questionI')) {
  172.                 if ($questionAValue == "Chalumeau") {
  173.                     $isAnswerJEnabled true;
  174.                     $questionIValue $request->get('questionI');
  175.                 }
  176.             }
  177.             if ($request->get('questionJ')) {
  178.                 $questionJValue $request->get('questionJ');
  179.             }
  180.             $searchProductsForm $this->createForm(SearchProductsFormType::class, $searchProductsType);
  181.             $productsCatalogue null;
  182.             $questionLastEmpty '';
  183.             if ($request->get('lastEmpty')) {
  184.                 $questionLastEmpty $request->get('lastEmpty');
  185.             }
  186.             if ($questionFValue != '') {
  187.                 if ($questionAValue == "Chalumeau") {
  188.                     if (preg_match('/coupe/i'$questionBValue)) {
  189.                         $criteria = [
  190.                             'colA' => $questionAValue,
  191.                             'colB' => $questionBValue,
  192.                             'colC' => $questionCValue,
  193.                             'colD' => $questionDValue,
  194.                             'colE' => $questionEValue,
  195.                             'colF' => $questionFValue,
  196.                         ];
  197.                         $productsCatalogue $catalogueImportRepository->findBy($criteria);
  198.                         // Vérifier si des enregistrements ont colG ou colH renseignés
  199.                         $hasColGOrH array_filter($productsCatalogue, function($product) {
  200.                             return !empty($product->getColG()) || !empty($product->getColH());
  201.                         });
  202.                         if (!empty($hasColGOrH)) {
  203.                             $criteria = [
  204.                                 'colA' => $questionAValue,
  205.                                 'colB' => $questionBValue,
  206.                                 'colC' => $questionCValue,
  207.                                 'colD' => $questionDValue,
  208.                                 'colE' => $questionEValue,
  209.                                 'colF' => $questionFValue,
  210.                                 'colG' => $questionGValue,
  211.                                 'colH' => $questionHValue,
  212.                             ];
  213.                         }
  214.                         $productsCatalogue $catalogueImportRepository->findBy($criteria);
  215.                     } else {
  216.                         $criteria = [
  217.                             'colA' => $questionAValue,
  218.                             'colB' => $questionBValue,
  219.                             'colD' => $questionDValue,
  220.                             'colE' => $questionEValue,
  221.                             'colF' => $questionFValue,
  222.                         ];
  223.                         $productsCatalogue $catalogueImportRepository->findBy($criteria);
  224.                     }
  225.                 } else {
  226.                     if (preg_match('/flamme/i'$questionBValue)) {
  227.                         $productsCatalogue $catalogueImportRepository->findBy(
  228.                             ['colA' => $questionAValue,
  229.                                 'colB' => $questionBValue,
  230.                                 'colC' => $questionCValue,
  231.                                 'colD' => $questionDValue,
  232.                                 'colE' => $questionEValue,
  233.                                 'colG' => $questionGValue,
  234.                                 'colH' => $questionHValue,
  235.                                 'colJ' => $questionJValue]);
  236.                     } else {
  237.                         $productsCatalogue $catalogueImportRepository->findBy(
  238.                             ['colA' => $questionAValue,
  239.                                 'colB' => $questionBValue,
  240.                                 'colC' => $questionCValue,
  241.                                 'colD' => $questionDValue,
  242.                                 'colE' => $questionEValue,
  243.                                 'colF' => $questionFValue,
  244.                                 'colG' => $questionGValue,
  245.                                 'colH' => $questionHValue,
  246.                                 'colJ' => $questionJValue]);
  247.                     }
  248.                 }
  249.             }
  250.             $tabName null;
  251.             $tabName2 null;
  252.             $tabNameAccessories null;
  253.             $tabProductAccessories = [];
  254.             if ($productsCatalogue != null) {
  255.                 /* Produit principal */
  256.                 foreach ($productsCatalogue as $productCatalogue) {
  257.                     if ($questionAValue == "Chalumeau") {
  258.                         $tabName[] = $productCatalogue->getColI();
  259.                     } else {
  260.                         $tabName[] = $productCatalogue->getColK();
  261.                     }
  262.                 }
  263.                 $queryBuilder $productsRepository->createQueryBuilder('p');
  264.                 $queryBuilder->where($queryBuilder->expr()->in('p.slug'':names'))
  265.                     ->setParameter('names'$tabName);
  266.                 $products $queryBuilder->getQuery()->getResult();
  267.                 /* Gestion des produits conseillés */
  268.                 foreach ($productsCatalogue as $productCatalogue) {
  269.                     if ($questionAValue == "Chalumeau") {
  270.                         $tabName2[] = $productCatalogue->getColN();
  271.                         $tabProductsProducts2[] = $productCatalogue;
  272.                     } else {
  273.                         $tabName2[] = $productCatalogue->getColL();
  274.                         $tabProductsProducts2[] = $productCatalogue;
  275.                     }
  276.                 }        
  277.                 
  278.                 $queryBuilder $productsRepository->createQueryBuilder('p');
  279.                 // Ajout de la clause WHERE avec IN
  280.                 $queryBuilder->where($queryBuilder->expr()->in('p.slug'':names'))
  281.                     ->setParameter('names'$tabName2);
  282.                 // Exécution de la requête
  283.                 $products2 $queryBuilder->getQuery()->getResult();
  284.                 /* Gestion des accessoires */
  285.                 foreach ($productsCatalogue as $productCatalogue) {
  286.                     if ($questionAValue == "Chalumeau") {
  287.                         $tabNameAccessories[] = $productCatalogue->getColK();
  288.                         $tabNameAccessories[] = $productCatalogue->getColP();
  289.                         $tabProductAccessories[] = $productCatalogue;
  290.                     } else {
  291.                         $tabNameAccessories[] = $productCatalogue->getColM();
  292.                         $tabNameAccessories[] = $productCatalogue->getColN();
  293.                         $tabProductAccessories[] = $productCatalogue;
  294.                     }
  295.                 }
  296.                 $queryBuilder $productsRepository->createQueryBuilder('p');
  297.                 $queryBuilder->where($queryBuilder->expr()->in('p.slug'':names'))
  298.                     ->setParameter('names'$tabNameAccessories);
  299.                 $accessories $queryBuilder->getQuery()->getResult();
  300.             }
  301.             // Traçage de la recherche pour les indicateurs SELECT.
  302.             // Renvoie null si le visiteur n'est pas identifiable : pas de statistique anonyme.
  303.             //
  304.             // `complete` : la requête catalogue a été exécutée, donc le questionnaire est
  305.             // allé jusqu'à la dernière combobox. Un parcours abandonné en route ne compte
  306.             // pas comme une recherche sans résultat.
  307.             $complete $productsCatalogue !== null;
  308.             // Références citées par catalogue_import mais absentes de la table produits :
  309.             // c'est la cause d'un écran vide malgré des codes trouvés.
  310.             $foundSlugs = [];
  311.             foreach (array_merge($products ?? [], $products2 ?? []) as $found) {
  312.                 $foundSlugs[$found->getSlug()] = true;
  313.             }
  314.             $missingReferences array_values(array_diff(
  315.                 array_filter(array_merge($tabName ?? [], $tabName2 ?? [])),
  316.                 array_keys($foundSlugs)
  317.             ));
  318.             $trackedSearch $selectTracker->recordSearch(
  319.                 $request,
  320.                 array_filter([
  321.                     'A' => $questionAValue'B' => $questionBValue'C' => $questionCValue,
  322.                     'D' => $questionDValue'E' => $questionEValue'F' => $questionFValue,
  323.                     'G' => $questionGValue'H' => $questionHValue'I' => $questionIValue,
  324.                     'J' => $questionJValue,
  325.                 ], fn($v) => $v !== '' && $v !== '-'),
  326.                 count($products ?? []) + count($products2 ?? []),
  327.                 $this->collectRecommendations($products$products2$accessories),
  328.                 $complete,
  329.                 count($productsCatalogue ?? []),
  330.                 $missingReferences
  331.             );
  332.         }
  333.         // Correspondance slug -> identifiant de recommandation, pour tracer les clics
  334.         $recoBySlug = [];
  335.         foreach (($trackedSearch ?? null)?->getRecommendations() ?? [] as $reco) {
  336.             $recoBySlug[$reco->getProductSlug()] ??= $reco->getId();
  337.         }
  338.         return $this->render('main/index.html.twig', [
  339.             'trackedSearch' => $trackedSearch ?? null,
  340.             'recoBySlug' => $recoBySlug,
  341.             'searchProductsForm' => $searchProductsForm->createView(),
  342.             'isAnswerAEnabled' => $isAnswerAEnabled,
  343.             'isAnswerBEnabled' => $isAnswerBEnabled,
  344.             'isAnswerCEnabled' => $isAnswerCEnabled,
  345.             'isAnswerDEnabled' => $isAnswerDEnabled,
  346.             'isAnswerEEnabled' => $isAnswerEEnabled,
  347.             'isAnswerFEnabled' => $isAnswerFEnabled,
  348.             'isAnswerGEnabled' => $isAnswerGEnabled,
  349.             'isAnswerHEnabled' => $isAnswerHEnabled,
  350.             'isAnswerIEnabled' => $isAnswerIEnabled,
  351.             'isAnswerJEnabled' => $isAnswerJEnabled,
  352.             'isAnswerKEnabled' => $isAnswerKEnabled,
  353.             'isAnswerLEnabled' => $isAnswerLEnabled,
  354.             'questionAValue' => $questionAValue,
  355.             'questionBValue' => $questionBValue,
  356.             'questionCValue' => $questionCValue,
  357.             'questionDValue' => $questionDValue,
  358.             'questionEValue' => $questionEValue,
  359.             'questionFValue' => $questionFValue,
  360.             'questionGValue' => $questionGValue,
  361.             'questionHValue' => $questionHValue,
  362.             'questionIValue' => $questionIValue,
  363.             'questionJValue' => $questionJValue,
  364.             'questionKValue' => $questionKValue,
  365.             'questionLValue' => $questionLValue,
  366.             'products' => $products,
  367.             'products2' => $products2,
  368.             'accessories' => $accessories,
  369.             'productSelected' => $request->get('productSelected'),
  370.             'catalogueImports' => $catalogueImports,
  371.             'tabProductAccessories' => $tabProductAccessories,
  372.             'tabProductsProducts2' => $tabProductsProducts2
  373.         ]);
  374.     }
  375.     #[Route('/update'name'app_update'methods: ['GET'])]
  376.     public function update(EntityManagerInterface $entityManagerSluggerInterface $slugger): Response
  377.     {
  378.         $catalogueImports $entityManager->getRepository(CatalogueImport::class)->findAll();
  379.         foreach ($catalogueImports as $catalogueImport) {
  380.             if ($catalogueImport->getColA() == "Chalumeau") {
  381.                 $product $entityManager->getRepository(Products::class)->findOneBy(['name' => $catalogueImport->getColH()]);
  382.                 if ($product != null) {
  383.                     $product->setDescription($catalogueImport->getColK());
  384.                     $entityManager->persist($product);
  385.                     $entityManager->flush();
  386.                 } else {
  387.                     $product = new Products();
  388.                     $product->setName($catalogueImport->getColH());
  389.                     $slug $slugger->slug($product->getName());
  390.                     $product->setSlug($slug);
  391.                     $product->setDescription($catalogueImport->getColH());
  392.                     $entityManager->persist($product);
  393.                     $entityManager->flush();
  394.                 }
  395.                 if ($catalogueImport->getColJ() != "") {
  396.                     // gestion de l'accessoire
  397.                     $accessoire $entityManager->getRepository(Products::class)->findOneBy(['name' => $catalogueImport->getColJ()]);
  398.                     if ($accessoire != null) {
  399.                         $accessoire->setDescription("");
  400.                         $entityManager->persist($product);
  401.                         $entityManager->flush();
  402.                     } else {
  403.                         $accessoire = new Products();
  404.                         $accessoire->setName($catalogueImport->getColJ());
  405.                         $slug $slugger->slug($accessoire->getName());
  406.                         $accessoire->setSlug($slug);
  407.                         $accessoire->setDescription("");
  408.                         $entityManager->persist($accessoire);
  409.                         $entityManager->flush();
  410.                     }
  411.                     $product->addAccessory($accessoire);
  412.                     $entityManager->persist($product);
  413.                     $entityManager->flush();
  414.                 }
  415.             } else {
  416.                 $product $entityManager->getRepository(Products::class)->findOneBy(['name' => $catalogueImport->getColK()]);
  417.                 if ($product != null) {
  418.                     $product->setDescription($catalogueImport->getColK());
  419.                 } else {
  420.                     $product = new Products();
  421.                     $product->setName($catalogueImport->getColK());
  422.                     $slug $slugger->slug($product->getName());
  423.                     $product->setSlug($slug);
  424.                     $product->setDescription($catalogueImport->getColK());
  425.                     $entityManager->persist($product);
  426.                     $entityManager->flush();
  427.                 }
  428.             }
  429.         }
  430.         return $this->redirectToRoute('main');
  431.     }
  432.     #[Route('/importimages'name'app_import_images'methods: ['GET'])]
  433.     public function importImages(EntityManagerInterface $entityManagerSluggerInterface $sluggerPictureService $pictureService): Response
  434.     {
  435.         set_time_limit(0); // 0 = no limits
  436.         $files array_diff(scandir('../data/import_images/'), array('.''..'));
  437.         foreach ($files as $file) {
  438.             //dd(substr($file, -3));
  439.             if (pathinfo($filePATHINFO_EXTENSION) != "png") {
  440.                 // Vérification de l'existance du produit
  441.                 $reference substr($file06);
  442.                 $product $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $reference]);
  443.                 if ($product != null) {
  444.                     if (count($product->getImages()) == 0) {
  445.                         //dd("test".$reference);
  446.                         $folder 'products';
  447.                         // On appelle le service d'ajout
  448.                         $fichier $pictureService->import('../data/import_images/' $file$folder450250);
  449.                         $img = new Images();
  450.                         $img->setName($fichier);
  451.                         $product->addImage($img);
  452.                         $entityManager->persist($product);
  453.                         $entityManager->flush();
  454.                     }
  455.                 }
  456.             }
  457.         }
  458.         return $this->redirectToRoute('main');
  459.     }
  460.     #[Route('/import/{importFile}'name'app_import'methods: ['GET'])]
  461.     public function import(string $importFileEntityManagerInterface $entityManagerSluggerInterface $sluggerPictureService $pictureService): Response
  462.     {
  463.         set_time_limit(0); // 0 = no limits
  464.         $files array_diff(scandir('../data/'), array('.''..'));
  465.         foreach ($files as $file) {
  466.             if ($file == "produits_20241120.csv" && "importproduits" == $importFile) {
  467.                 $rowNo 1;
  468.                 // $fp is file pointer to file sample.csv
  469.                 if (($fp fopen('../data/' $file"r")) !== FALSE) {
  470.                     while (($row fgetcsv($fp1000";")) !== FALSE) {
  471.                         if ($rowNo 1) {
  472.                             $colA = (trim($row[0])); // categorie1
  473.                             $colB = (trim($row[1])); // categorie2
  474.                             $colC = (trim($row[2])); // categorie3
  475.                             $colD = (trim($row[3])); // derniereCategorie
  476.                             $colE = (trim($row[4])); // name
  477.                             $colF = (trim($row[5])); // header
  478.                             $colG = (trim($row[6])); // mainRreference
  479.                             $colH = (trim($row[7])); // description
  480.                             $colI = (trim($row[8])); // donnees techniques
  481.                             $colJ = (trim($row[9])); // video produit ...
  482.                             $colK = (trim($row[10])); // sous type
  483.                             $colL = (trim($row[11])); // Capacité en mm
  484.                             $colM = (trim($row[12])); // L. hors tout en mm
  485.                             $colN = (trim($row[13])); // Poids en kg
  486.                             $colO = (trim($row[14])); // Accessoire
  487.                             $colP = (trim($row[15])); // gaz
  488.                             $colQ = (trim($row[16])); // Calibre
  489.                             $colR = (trim($row[17])); // Epaisseur de coupe en mm
  490.                             $colS = (trim($row[18])); // Débit l/h
  491.                             $colT = (trim($row[19])); // Débit/Pression
  492.                             $colU = (trim($row[20])); // Pression maxi en bar
  493.                             $colV = (trim($row[21])); // Filetage
  494.                             $colW = (trim($row[22])); // Afficher graduation
  495.                             $colX = (trim($row[23])); // graduation
  496.                             $colY = (trim($row[24])); // Afficher entrée
  497.                             $colZ = (trim($row[25])); // Entrée
  498.                             $colAA = (trim($row[26])); // Afficher sortie
  499.                             $colAB = (trim($row[27])); //     Sortie
  500.                             $colAC = (trim($row[28])); // Titre
  501.                             $colAD = (trim($row[29])); // Sous titre
  502.                             $colAE = (trim($row[30])); //
  503.                             $colAF = (trim($row[31])); // Autres produits
  504.                             $colAG = (trim($row[32])); // Accessoires
  505.                             // Convertir la chaîne en un tableau en utilisant explode()
  506.                             $autres explode("\n"$colAF);
  507.                             // Supprimer les espaces blancs autour des valeurs, si nécessaire
  508.                             $autres array_map('trim'$autres);
  509.                             // Convertir la chaîne en un tableau en utilisant explode()
  510.                             $accessoires explode("\n"$colAG);
  511.                             // Supprimer les espaces blancs autour des valeurs, si nécessaire
  512.                             $accessoires array_map('trim'$accessoires);
  513.                             $product $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
  514.                             if ($product == null) {
  515.                                 $product = new Products();
  516.                             }
  517.                             /*
  518.                                 $product->setCategorie1($colA);
  519.                                 $product->setCategorie2($colB);
  520.                                 $product->setCategorie3($colC);
  521.                                 $product->setDerniereCategorie($colD);
  522.                                 $product->setName(trim($colE));
  523.                                 $slug = $slugger->slug($product->getName());
  524.                                 $product->setSlug($slug);
  525.                                 $product->setHeader($colF);
  526.                                 $product->setMainReference($colG);
  527.                                 $product->setDescription($colH);
  528.                                 $product->setDonneesTechniques($colI);
  529.                                 $product->setSubType($colK);
  530.                                 $product->setCapacity($colL);
  531.                                 $product->setLength($colM);
  532.                                 $product->setWeight($colN);
  533.                                 $product->setAccessoryTxt($colO);
  534.                                 $product->setGas($colP);
  535.                                 $product->setCaliber($colQ);
  536.                                 $product->setThickness($colR);
  537.                                 $product->setSpeed($colS);
  538.                                 $product->setFlowPressure($colT);
  539.                                 $product->setMaximumPressure($colU);
  540.                                 $product->setThread($colV);
  541.                                 if ($colW == "oui") {
  542.                                     $product->setBoolGraduation($colW);
  543.                                 }
  544.                                 $product->setGraduation($colX);
  545.                                 $product->setTitle($colAC);
  546.                                 $product->setSubTitle($colAD);
  547.                                 $product->setName(trim($colE));
  548.                                 $slug = $slugger->slug($colG);
  549.                                 $product->setSlug($slug);
  550.                                 if ($colY == "oui") {
  551.                                     $product->setBoolInPort($colY);
  552.                                 }
  553.                                 $product->setInPort($colZ);
  554.                                 if ($colY == "oui") {
  555.                                     $product->setBoolOutPort($colAA);
  556.                                 }
  557.                                 $product->setOutPort($colAB);
  558.                                 $entityManager->persist($product);
  559.                                 $entityManager->flush();
  560.                                 $productLinked = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' =>  $colG]);
  561.                                 $product->addLinkedProduct($productLinked);
  562.                                 $entityManager->persist($product);
  563.                                 $entityManager->flush();
  564.                                 */
  565.                             /*
  566.                             foreach ($autres as $value) {
  567.                                 $productLinked = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' =>  $value]);
  568.                                 if ($productLinked != null && $value != $colG) {
  569.                                 $product->addLinkedProduct($productLinked);
  570.                                 $entityManager->persist($product);
  571.                                 $entityManager->flush();
  572.                                 }
  573.                             }
  574.                                 */
  575.                             foreach ($accessoires as $value) {
  576.                                 // Traiter chaque valeur, ici on l'affiche
  577.                                 //echo $value . "\n";
  578.                                 $accessory $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $value]);
  579.                                 if ($accessory != null && $value != $colG) {
  580.                                     $product->addAccessory($accessory);
  581.                                     $entityManager->persist($product);
  582.                                     $entityManager->flush();
  583.                                 }
  584.                             }
  585.                         }
  586.                         $rowNo++;
  587.                     }
  588.                     fclose($fp);
  589.                 }
  590.             }
  591.             if ($file == "accessoires_20241120.csv" && "importaccessoires" == $importFile) {
  592.                 $rowNo 1;
  593.                 // $fp is file pointer to file sample.csv
  594.                 if (($fp fopen('../data/' $file"r")) !== FALSE) {
  595.                     while (($row fgetcsv($fp1000";")) !== FALSE) {
  596.                         if ($rowNo 1) {
  597.                             //$row = array_map(fn($field) => mb_convert_encoding($field, 'UTF-8', 'UTF-8'), $row);
  598.                             $colA = (trim($row[0])); // TYPE FICHE         Epaisseur de gougeage en mm
  599.                             $colB = (trim($row[1])); // Type PRODUIT
  600.                             $colC = (trim($row[2])); // Réf principale
  601.                             $colD = (trim($row[3])); // Titre
  602.                             $colE = (trim($row[4])); // Sous-titre
  603.                             $colF = (trim($row[5])); // Sous-sous-type
  604.                             $colG = (trim($row[6])); // Réf.
  605.                             $colH = (trim($row[7])); // Réf photo.
  606.                             $colI = (trim($row[8])); // Gaz
  607.                             $colJ = (trim($row[9])); // Calibre
  608.                             $colK = (trim($row[10])); // Epaisseur de coupe en mm
  609.                             $colL = (trim($row[11])); // Débit g/l
  610.                             $colM = (trim($row[12])); // Débit l/h
  611.                             $colN = (trim($row[13])); // Filetage
  612.                             $colO = (trim($row[14])); // Type
  613.                             $colP = (trim($row[15])); //  Epaisseur de dérivetage en mm
  614.                             $colQ = (trim($row[16])); // Epaisseur de gougeage en mm
  615.                             $colR = (trim($row[17])); // Epaisseur de perçage
  616.                             $colS = (trim($row[18])); // Pression de service en bar
  617.                             $product $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
  618.                             if ($product == null) {
  619.                                 $product = new Products();
  620.                                 $product->setName(trim($colG));
  621.                                 $slug $slugger->slug($colG);
  622.                                 $product->setSlug($slug);
  623.                                 $product->setHeader($colG);
  624.                                 $product->setMainReference($colG);
  625.                                 $product->setDescription($colG);
  626.                                 $product->setDonneesTechniques($colG);
  627.                                 $product->setTitle($colD);
  628.                                 $product->setSubTitle($colE);
  629.                                 $product->setSubSubType($colF);
  630.                                 $product->setGas($colI);
  631.                                 $product->setCaliber($colJ);
  632.                                 $product->setThickness($colK);
  633.                                 $product->setSpeedGl($colL);
  634.                                 $product->setSpeed($colM);
  635.                                 $product->setThread($colN);
  636.                                 $product->setAccessoryType($colO);
  637.                                 $product->setDriftThickness($colP);
  638.                                 $product->setGougingThickness($colQ);
  639.                                 $product->setDrillingThickness($colR);
  640.                                 $product->setPressureInBar($colS);
  641.                                 $entityManager->persist($product);
  642.                                 $entityManager->flush();
  643.                                 /*
  644.                                 $origProduct = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' =>  $colC]);
  645.                                 if ($origProduct != null) {
  646.                                     $origProductAccessories = $origProduct->getAccessories();
  647.                                     $exist = false;
  648.                                     foreach ($origProductAccessories as $origProductAccessory) {
  649.                                         if ($origProductAccessory->getName() == $colG) {
  650.                                             $exist = true;
  651.                                         }
  652.                                     }
  653.                                     if (!$exist) {
  654.                                         $origProduct->addAccessory($product);
  655.                                         $entityManager->persist($origProduct);
  656.                                         $entityManager->flush();
  657.                                     }
  658.                                 }*/
  659.                             }
  660.                         }
  661.                         $rowNo++;
  662.                     }
  663.                     fclose($fp);
  664.                 }
  665.             }
  666.             if ($file == "accessoires_20241120.csv" && "importphotosaccessoires" == $importFile) {
  667.                 $rowNo 1;
  668.                 // $fp is file pointer to file sample.csv
  669.                 if (($fp fopen('../data/' $file"r")) !== FALSE) {
  670.                     while (($row fgetcsv($fp1000";")) !== FALSE) {
  671.                         if ($rowNo 1) {
  672.                             $colG = (trim($row[6])); // Réf.
  673.                             $colH = (trim($row[7])); // Réf photo.
  674.                             $accessory $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
  675.                             if ($accessory != null) {
  676.                                 $product $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colH]);
  677.                                 if ($product != null) {
  678.                                     $imagePrincipale $product->getImages()->get(0);
  679.                                     if ($imagePrincipale != null) {
  680.                                         if (count($accessory->getImages()) == 0) {
  681.                                             $img = new Images();
  682.                                             $img->setName($imagePrincipale->getName());
  683.                                             $accessory->addImage($img);
  684.                                             $entityManager->persist($product);
  685.                                             $entityManager->flush();
  686.                                         }
  687.                                     }
  688.                                 }
  689.                             }
  690.                         }
  691.                         $rowNo++;
  692.                     }
  693.                     fclose($fp);
  694.                 }
  695.             }
  696.         }
  697.         dd("import termine");
  698.         return $this->redirectToRoute('main');
  699.     }
  700. }