src/Controller/ShopComuneController.php line 352

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\FiltroVisualizzazioneArticoliClienti;
  4. use App\Entity\MagazzinoSecondarioDisponibilita;
  5. use App\Entity\MappaCategorieArticoli;
  6. use App\Entity\StatisticheRicerca;
  7. use App\Model\Caching\Caching_Categorie;
  8. use App\Model\Costanti;
  9. use App\Model\DizionarioDatabase;
  10. use App\Model\Entita\AlberoCategorie;
  11. use App\Model\Entita\Categoria;
  12. use App\Model\Entita\MagazzinoSecondario;
  13. use App\Model\Entita\MappaCategoriaArticolo;
  14. use App\Model\FiltroAttributi;
  15. use App\Model\RecuperoDati;
  16. use App\Model\ContenitoreCategoriePerFiltri;
  17. use App\Model\FiltroRicerca;
  18. use App\Entity\User;
  19. use App\Model\RitornoRigheShop;
  20. use App\Model\SearchEngine;
  21. use Psr\Log\LoggerInterface;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Response;
  26. class ShopComuneController extends AbstractController
  27. {
  28.     /** @var LoggerInterface */
  29.     private $logger;
  30.     /** @var ReturnImpostazioniServiceController */
  31.     private $imp;
  32.     /** @var ServiziController */
  33.     private $servizi;
  34.     /**
  35.      * ShopComuneController constructor.
  36.      * @param LoggerInterface $logger
  37.      * @param ReturnImpostazioniServiceController $imp
  38.      * @param ServiziController $servizi
  39.      */
  40.     public function __construct(LoggerInterface $loggerReturnImpostazioniServiceController $impServiziController $servizi)
  41.     {
  42.         $this->logger $logger;
  43.         $this->imp $imp;
  44.         $this->servizi $servizi;
  45.     }
  46.     /**
  47.      * @Route("/shopCM")
  48.      * @Route("/shopCM", methods={"GET"})
  49.      * @Route("/shopCM/{page}/{categoria_1}/{categoria_2}/{categoria_3}/{categoria_4}/{categoria_5}", defaults={"page"="1", "categoria_1"="", "categoria_2"="", "categoria_3"="", "categoria_4"="", "categoria_5"=""})
  50.      */
  51.     public function redirectNaviga(Request $request $categoria_1 ""$categoria_2 ""$categoria_3 ""$categoria_4 ""$categoria_5 ""$page 1)
  52.     {
  53.         return $this->redirectToRoute('home_shop_comune_naviga', array(
  54.             'page' => $page,
  55.             'categoria_1' => $categoria_1,
  56.             'categoria_2' => $categoria_2,
  57.             'categoria_3' => $categoria_3,
  58.             'categoria_4' => $categoria_4,
  59.             'categoria_5' => $categoria_5
  60.         ), Response::HTTP_MOVED_PERMANENTLY);
  61.     }
  62.     /**
  63.      * @Route("/richiestaPrezzo/{idMappa}", name="richiesta_prezzo_modal", options={"expose"=true})
  64.      */
  65.     public function richiestaPrezzo(Request $request$idMappa){
  66.         $mappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->find($idMappa);
  67.         /** @var User $user */
  68.         $user $this->servizi->OttieniUtenteCorrente();
  69.         /** @var MappaCategoriaArticolo $mappaEntita */
  70.         $mappaEntita MappaCategoriaArticolo::CreaDaEntitadoctrine($this->servizi->doctrine$this->servizi$user $user->getCodiceCliente() : ''$mappa$user$request->getLocale());
  71.         return $this->render('ZZ_front_end/modal/modal_richiesta_prezzo.html.twig', array(
  72.            Costanti::T_DETTAGLIO_ARTICOLO_IDENTIFICATO => $mappaEntita
  73.         ));
  74.     }
  75.     /**
  76.      * @Route("/modalMagazziniSecondari/{idMappa}/{qta}", name="magazzini_secondari_modal", options={"expose"=true})
  77.      */
  78.     public function magazziniSecondariModal(Request $request$idMappa$qta){
  79.         $mappa $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->find($idMappa);
  80.         $recuperoDati = new RecuperoDati($this->servizi->doctrine$this->imp$this->servizi);
  81.         /** @var User $user */
  82.         $user $this->servizi->OttieniUtenteCorrente();
  83.         /** @var MappaCategoriaArticolo $mappaEntita */
  84.         $mappaEntita MappaCategoriaArticolo::CreaDaEntitadoctrine($this->servizi->doctrine$this->servizi$user $user->getCodiceCliente() : ''$mappa$user$request->getLocale());
  85.         /** @var MagazzinoSecondario[] $magazziniSecondari */
  86.         $magazziniSecondariDaMappa $recuperoDati->RitornaMagazziniSecondariDaMappa($idMappa);
  87.         return $this->render('ZZ_front_end/modal/modal_magazzini_secondari.html.twig', array(
  88.             Costanti::T_MAGAZZINI_SECONDARI => $magazziniSecondariDaMappa,
  89.             Costanti::T_MAPPA_IDENTIFICATA => $mappaEntita,
  90.             Costanti::T_QTA_ORDINATA => $qta
  91.         ));
  92.     }
  93.     /**
  94.      * @Route("/products", name="home_shop_comune")
  95.      * @Route("/products", name="shop_comune_cerca_generico", methods={"GET"}, options={"expose"=true})
  96.      * @Route("/products/{page}/{categoria_1}/{categoria_2}/{categoria_3}/{categoria_4}/{categoria_5}", name="home_shop_comune_naviga", defaults={"page"="1", "categoria_1"="", "categoria_2"="", "categoria_3"="", "categoria_4"="", "categoria_5"=""})
  97.      */
  98.     public function navigaShopComune(Request $request$categoria_1 ""$categoria_2 ""$categoria_3 ""$categoria_4 ""$categoria_5 ""$page 1)
  99.     {
  100.         $this->imp->caricaCacheImpostazioniDaNomi(array('UsaSearchEngine''AbilitaB2C''FiltroVisualizzazioneArticoloPerShopComune''NumeroArticoliPaginaPrincipaleShopComune''AbilitaDebugUtentiAmministrativi''AttivaUtilizzoAttributiArticoli''CodiceListinoShopComune''DisponibileSommatoMagazziniSecondari'));
  101.         /** @var User $user */
  102.         $user $this->servizi->OttieniUtenteCorrente();
  103.         $usaSearchEngine $this->imp->ritornaImpostazioneDaNome('UsaSearchEngine') == '1';
  104.         if ($this->imp->ritornaImpostazioneDaNome('AbilitaB2C') != '1' && !$this->servizi->OttieniUtenteCorrente())
  105.         {
  106.             return $this->redirectToRoute('home_login');
  107.         }
  108.         $filtroComune $this->imp->ritornaImpostazioneDaNome('FiltroVisualizzazioneArticoloPerShopComune');
  109.         // FILTRO VISUALIZZAZIONE ARTICOLI CLIENTI
  110.         $filtroRiferimento null;
  111.         if ($user){
  112.             if ($user->getFiltroVisualizzazioneArticoliClienti()) {
  113.                 if ($user->getFiltroVisualizzazioneArticoliClienti()->getElencoCategorie() != '')
  114.                     $filtroRiferimento $user->getFiltroVisualizzazioneArticoliClienti();
  115.             }
  116.         }else if ($filtroComune != ''){
  117.             $ffl $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class)->find($filtroComune);
  118.             if ($ffl && $ffl->getElencoCategorie() != '')
  119.                 $filtroRiferimento $ffl;
  120.         }
  121.         $recuperoDati = new RecuperoDati($this->servizi->doctrine$this->imp$this->servizi);
  122.         $numeroArticoliPerPagina $this->imp->ritornaImpostazioneDaNome("NumeroArticoliPaginaPrincipaleShopComune");
  123.         $abAttrVariabile $this->imp->ritornaImpostazioneDaNome("AttivaUtilizzoAttributiArticoli");
  124.         $debug $this->imp->ritornaImpostazioneDaNome("AbilitaDebugUtentiAmministrativi");
  125.         $logger $this->logger;
  126.         $abilitaAttributi $abAttrVariabile == '1' true false;
  127.         $deviazioneSuPaginaRicerca false;
  128.         if ($numeroArticoliPerPagina == "" || $numeroArticoliPerPagina <= 0)
  129.             $numeroArticoliPerPagina 1;
  130.         $codiceCliente "";
  131.         if($this->servizi->OttieniUtenteCorrente()){
  132.             $codiceCliente $this->servizi->OttieniUtenteCorrente()->getCodiceCliente();
  133.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")){
  134.                 $altriDati $this->servizi->OttieniUtenteCorrente() ? $this->servizi->OttieniUtenteCorrente()->getAltriDati() : null;
  135.                 if ($altriDati && $altriDati != null){
  136.                     $json json_decode($altriDatitrue);
  137.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($json['codice'], $this->servizi->OttieniUtenteCorrente());
  138.                     if ($anagraficaTrovata){
  139.                         $clienteSelezionatoAgente $anagraficaTrovata;
  140.                         $codiceCliente $clienteSelezionatoAgente->getCodice();
  141.                     }
  142.                 }
  143.             }
  144.         }
  145.         /* SISTEMO LE VARIABILI AGGIUNGENDO / SE TOLTO E SOSTITUITO CON £-£ */
  146.         $categoria_1 str_replace("£-£""/"$categoria_1);
  147.         $categoria_2 str_replace("£-£""/"$categoria_2);
  148.         $categoria_3 str_replace("£-£""/"$categoria_3);
  149.         $categoria_4 str_replace("£-£""/"$categoria_4);
  150.         $categoria_5 str_replace("£-£""/"$categoria_5);
  151.         $filtro = new ContenitoreCategoriePerFiltri();
  152.         /** @var $categorie AlberoCategorie[] */
  153.         $listaCategorie $recuperoDati->recuperaAlberoCategorie($filtro$request->getLocale(), $filtroRiferimento);
  154.         $listaCategorieChiaviParent = array();
  155.         foreach ($listaCategorie as $lc){
  156.             if($lc->parent){
  157.                 $_lc_id $lc->parent->id;
  158.                 if (key_exists($_lc_id$listaCategorieChiaviParent)){
  159.                     array_push($listaCategorieChiaviParent[$_lc_id], $lc);
  160.                 }else{
  161.                     $listaCategorieChiaviParent[$_lc_id] = array($lc);
  162.                 }
  163.             }
  164.         }
  165.         $filtroRicerca = array();
  166.         if (key_exists("search"$request->query->all())){ //Se ritorna true vuol dire che c'è una stringa di ricerca
  167.             if ($debug){
  168.                 $logger->info('Search parameter: ' $request->query->get('search'));
  169.             }
  170.             $deviazioneSuPaginaRicerca true;
  171.             //Splitto con spazio le varie stringhe di ricerca
  172.             $f = new FiltroRicerca();
  173.             $stringaRicerca $request->query->get('search');
  174.             $f->soloSearchEngine $usaSearchEngine;
  175.             $f->stringaSearchEngine = ($stringaRicerca ' | ((@assArtCli_codiceAnagrafica ' SearchEngine::verificaEscape($codiceCliente) . ') (@(assArtCli_codice,assArtCli_descrizione) ' SearchEngine::verificaEscape($stringaRicerca) . ')) ' );
  176.             array_push($filtroRicerca$f);
  177.         } else if (count$request->query->all()) > 0){
  178.             if ($debug){
  179.                 $logger->info('Parametri request: ' print_r($request->query->all(), true));
  180.             }
  181.             //Se esistono dei parametri vuol dire che sto filtrando con gli attributi
  182.             $dizionarioDb = new DizionarioDatabase($this->servizi->doctrine);
  183.             $colonneAmmesse $dizionarioDb->ritornaArrayNomiColonnePerFiltroFormAttributi();
  184.             /*
  185.              * Array con chiave id parametro e all'interno 2 parametri da a oppure uno se =
  186.              * ES: {
  187.              *          'id' => {
  188.              *                      'da' => ''
  189.              *                      'a' => ''
  190.              *                  }
  191.              *      }
  192.              * Alla fine se $raccoltaRangeParametri contiene qualcosa itero e aggiungo il filtro
  193.              */
  194.             $raccoltaRangeParametri = array();
  195.             foreach ($request->query->all() as $key => $value){
  196.                 $deviazioneSuPaginaRicerca true;
  197.                 $chiaveDecod urldecode($key);
  198.                 $valoreDecod urldecode($request->query->all()[$key]);
  199.                 if ($debug){
  200.                     $logger->info('Chiave: ' $chiaveDecod ' --- Valore: ' $valoreDecod);
  201.                 }
  202.                 if ($valoreDecod != '') {
  203.                     $valoreCorrettoDaUtilizzare str_replace(Costanti::CSI_CERCA_CON_FILTRO_SU_COLONNA''$chiaveDecod);
  204.                     if (strpos($chiaveDecodCostanti::CSI_CERCA_CON_FILTRO_SU_COLONNA) === 0) { //Se inizia con il carattere speciale che determina il filtro su una colonna e non su un attributo
  205.                         if (in_array($valoreCorrettoDaUtilizzare$colonneAmmesse)) {
  206.                             //Verifico se la colonna indicata è presente nell'array delle colonne concesse così da prevenire l'SQL INJECTION
  207.                             //Se non è permessa la colonna salto il parametro di filtro
  208.                             $f = new FiltroRicerca();
  209.                             $f->colonne = array(str_replace('-''.'$valoreCorrettoDaUtilizzare)); //Sostituisco - con .
  210.                             $f->operatore 'LIKE';
  211.                             $f->valore '%' $valoreDecod '%';
  212.                             array_push($filtroRicerca$f);
  213.                         }
  214.                     } else {
  215.                         $idAtt $chiaveDecod;
  216.                         if (strpos($chiaveDecodCostanti::CSI_ATTRIBUTI_INIZIO_A) === || strpos($chiaveDecodCostanti::CSI_ATTRIBUTI_INIZIO_DA) === 0){
  217.                             //Se la chiave contiene il valore di inizio o fine attributo lo tratto come tale
  218.                             $idAtt str_replace(Costanti::CSI_ATTRIBUTI_INIZIO_DA''$idAtt);
  219.                             $idAtt str_replace(Costanti::CSI_ATTRIBUTI_INIZIO_A''$idAtt);
  220.                             if (!array_key_exists($idAtt$raccoltaRangeParametri)){
  221.                                 $raccoltaRangeParametri[$idAtt] = array('da' => '''a' => '');
  222.                             }
  223.                             if (strpos($chiaveDecodCostanti::CSI_ATTRIBUTI_INIZIO_DA) === 0){
  224.                                 $raccoltaRangeParametri[$idAtt]['da'] = $valoreDecod;
  225.                             }else if (strpos($chiaveDecodCostanti::CSI_ATTRIBUTI_INIZIO_A) === 0){
  226.                                 $raccoltaRangeParametri[$idAtt]['a'] = $valoreDecod;
  227.                             }
  228.                         }else {
  229.                             //Vuol dire che non è un parametro da a
  230.                             $raccoltaRangeParametri[$idAtt] = $valoreDecod;
  231.                         }
  232.                     }
  233.                 }
  234.             }
  235.             if ($debug){
  236.                 $logger->info('Raccolta range parametri: ' print_r($raccoltaRangeParametritrue));
  237.             }
  238.             foreach ($raccoltaRangeParametri as $key => $value){
  239.                 if (is_array($value)){ //Vuol dire che ho il da - a
  240.                     $f = new FiltroAttributi();
  241.                     $f->idAttributo $key;
  242.                     $f->valoreDa $value['da'];
  243.                     if($value['a'] != '') { //Se il valore a è diverso da vuoto uso il between altrimenti il semplice uguale
  244.                         $f->valoreA $value['a'];
  245.                         $f->operatore 'BETWEEN';
  246.                     }else{
  247.                         $f->operatore '=';
  248.                     }
  249.                     array_push($filtroRicerca$f);
  250.                 }else{
  251.                     $f = new FiltroAttributi();
  252.                     $f->idAttributo $key;
  253.                     $f->valoreDa strtolower($value);
  254.                     array_push($filtroRicerca$f);
  255.                 }
  256.             }
  257.         }
  258.         $noFilter false;
  259.         if (key_exists('search_no_filter'$request->query->all())){
  260.             if ($request->query->get('search_no_filter') == '1'){
  261.                 $noFilter true;
  262.             }
  263.         }
  264.         //Verifico se sono specificate delle categorie per aggiungerle al filtro a meno che la variabile $noFilter non sia vera
  265.         if (!$noFilter) {
  266.             if ($categoria_1 != "") {
  267.                 $deviazioneSuPaginaRicerca true;
  268.                 $f = new FiltroRicerca();
  269.                 $f->colonne = array('categoria1.nome_univoco');
  270.                 $f->operatore "=";
  271.                 $f->valore $categoria_1;
  272.                 array_push($filtroRicerca$f);
  273.             }
  274.             if ($categoria_2 != "") {
  275.                 $deviazioneSuPaginaRicerca true;
  276.                 $f = new FiltroRicerca();
  277.                 $f->colonne = array('categoria2.nome_univoco');
  278.                 $f->operatore "=";
  279.                 $f->valore $categoria_2;
  280.                 array_push($filtroRicerca$f);
  281.             }
  282.             if ($categoria_3 != "") {
  283.                 $deviazioneSuPaginaRicerca true;
  284.                 $f = new FiltroRicerca();
  285.                 $f->colonne = array('categoria3.nome_univoco');
  286.                 $f->operatore "=";
  287.                 $f->valore $categoria_3;
  288.                 array_push($filtroRicerca$f);
  289.             }
  290.             if ($categoria_4 != "") {
  291.                 $deviazioneSuPaginaRicerca true;
  292.                 $f = new FiltroRicerca();
  293.                 $f->colonne = array('categoria4.nome_univoco');
  294.                 $f->operatore "=";
  295.                 $f->valore $categoria_4;
  296.                 array_push($filtroRicerca$f);
  297.             }
  298.             if ($categoria_5 != "") {
  299.                 $deviazioneSuPaginaRicerca true;
  300.                 $f = new FiltroRicerca();
  301.                 $f->colonne = array('categoria5.nome_univoco');
  302.                 $f->operatore "=";
  303.                 $f->valore $categoria_5;
  304.                 array_push($filtroRicerca$f);
  305.             }
  306.         }
  307.         $da 0;
  308.         $a $numeroArticoliPerPagina;
  309.         if ($page 1){
  310.             $da $numeroArticoliPerPagina * ($page 1);
  311.         }
  312.         //Necessario per recuperare gli attributi ma attenzione a non inserirlo prima di recuperare le categorie
  313.         $filtro->nomeUnivocoCat1 $categoria_1;
  314.         $filtro->nomeUnivocoCat2 $categoria_2;
  315.         $filtro->nomeUnivocoCat3 $categoria_3;
  316.         $filtro->nomeUnivocoCat4 $categoria_4;
  317.         $filtro->nomeUnivocoCat5 $categoria_5;
  318.         /** @var MappaCategoriaArticolo[] $righeShop */
  319.         $ritornoRighe $recuperoDati->recuperaRigheShop($filtroRicerca$da$a$request->getLocale(), $codiceCliente$filtro$this->servizi->OttieniUtenteCorrente(), falsefalsefalsetrue$abilitaAttributi);
  320.         $righeShop $ritornoRighe->righe;
  321.         //Aggiungo statistiche ricerca / categorie
  322.         if ($deviazioneSuPaginaRicerca && $request->query->get('search')){
  323.             try{
  324.                 $stat = new StatisticheRicerca();
  325.                 $stat->setDataRicerca(new \DateTime());
  326.                 $stat->setConteggioRisultati($ritornoRighe->count);
  327.                 $stat->setStringaRicerca($request->query->get('search'));
  328.                 $stat->setCategorie($noFilter '' $filtro->nomeUnivocoCat1 '-' $filtro->nomeUnivocoCat2 '-' $filtro->nomeUnivocoCat3 '-' $filtro->nomeUnivocoCat4 '-' $filtro->nomeUnivocoCat5);
  329.                 $em $this->servizi->doctrine->getManager();
  330.                 $em->persist($stat);
  331.                 $em->flush();
  332.             }catch (\Exception $ex)
  333.             {
  334.             }
  335.         }
  336.         $servizi $this->servizi;
  337.         $ct1_db null$ct2_db null$ct3_db null$ct4_db null$ct5_db null;
  338.         $cacheCategorie = new Caching_Categorie($servizi);
  339.         if ($categoria_5 != ''){
  340.             $cat $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_5);
  341.             //$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_5));
  342.             $ct5_db $cat;
  343.             $ct5_db Categoria::CreaDaEntitadoctrine($this->servizi$ct5_db$request->getLocale());
  344.             $servizi->inserisciStatisticaNavigazioneCategoria($cat$request$this->servizi->OttieniUtenteCorrente());
  345.         } else if ($categoria_4 != ''){
  346.             $cat $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_4);
  347.             //$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_4));
  348.             $ct4_db $cat;
  349.             $ct4_db Categoria::CreaDaEntitadoctrine($this->servizi$ct4_db$request->getLocale());
  350.             $servizi->inserisciStatisticaNavigazioneCategoria($cat$request$this->servizi->OttieniUtenteCorrente());
  351.         } else if ($categoria_3 != ''){
  352.             $cat $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_3);
  353.             //$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_3));
  354.             $ct3_db $cat;
  355.             $ct3_db Categoria::CreaDaEntitadoctrine($this->servizi$ct3_db$request->getLocale());
  356.             $servizi->inserisciStatisticaNavigazioneCategoria($cat$request$this->servizi->OttieniUtenteCorrente());
  357.         } else if ($categoria_2 != ''){
  358.             $cat $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_2);
  359.             //$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_2));
  360.             $ct2_db $cat;
  361.             $ct2_db Categoria::CreaDaEntitadoctrine($this->servizi$ct2_db$request->getLocale());
  362.             $servizi->inserisciStatisticaNavigazioneCategoria($cat$request$this->servizi->OttieniUtenteCorrente());
  363.         } else if ($categoria_1 != ''){
  364.             $cat $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_1);
  365.             //$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_1));
  366.             $ct1_db $cat;
  367.             $ct1_db Categoria::CreaDaEntitadoctrine($this->servizi$ct1_db$request->getLocale());
  368.             $servizi->inserisciStatisticaNavigazioneCategoria($cat$request$this->servizi->OttieniUtenteCorrente());
  369.         }
  370.         if($categoria_1 != '' && !$ct1_db){
  371.             $ct1_db $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_1);
  372.             //$ct1_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_1));
  373.             $ct1_db Categoria::CreaDaEntitadoctrine($this->servizi$ct1_db$request->getLocale());
  374.         }
  375.         if($categoria_2 != '' && !$ct2_db){
  376.             $ct2_db $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_2);
  377.             //$ct2_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_2));
  378.             $ct2_db Categoria::CreaDaEntitadoctrine($this->servizi$ct2_db$request->getLocale());
  379.         }
  380.         if($categoria_3 != '' && !$ct3_db){
  381.             $ct3_db $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_3);
  382.             //$ct3_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_3));
  383.             $ct3_db Categoria::CreaDaEntitadoctrine($this->servizi$ct3_db$request->getLocale());
  384.         }
  385.         if($categoria_4 != '' && !$ct4_db){
  386.             $ct4_db $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_4);
  387.             // $ct4_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_4));
  388.             $ct4_db Categoria::CreaDaEntitadoctrine($this->servizi$ct4_db$request->getLocale());
  389.         }
  390.         if($categoria_5 != '' && !$ct5_db){
  391.             $ct5_db $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_5);
  392.             //$ct5_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_5));
  393.             $ct5_db Categoria::CreaDaEntitadoctrine($this->servizi$ct5_db$request->getLocale());
  394.         }
  395.         /** @var MappaCategoriaArticolo[] $ritornoRigheCasuale */
  396.         $ritornoRigheCasuale $recuperoDati->recuperaRigheShop(null025$request->getLocale(), $codiceClientenull$this->servizi->OttieniUtenteCorrente(), falsetruefalsetruefalse)->righe;
  397.         //Calcolo il numero di pagine eventuali
  398.         $ritornoR2 $recuperoDati->recuperaRigheShop($filtroRicerca$da$a$request->getLocale(), $codiceClientenull$this->servizi->OttieniUtenteCorrente(), truefalse);
  399.         $countRigheShop $ritornoR2->count;
  400.         $numeroPagine 0;
  401.         if ($countRigheShop 0)
  402.             $numeroPagine ceil($countRigheShop $numeroArticoliPerPagina); //arrotondo per eccesso
  403.         $response $this->render('ZZ_front_end/shop/shop_comune.html.twig', array(
  404.             Costanti::T_LISTA_CATEGORIE => $listaCategorie,
  405.             Costanti::T_LISTA_CATEGORIE_CHIAVI_PARENT => $listaCategorieChiaviParent,
  406.             Costanti::T_CODICE_CLIENTE_IDENTIFICATO => $codiceCliente,
  407.             Costanti::T_ATTRIBUTI => $ritornoRighe->attributi,
  408.             Costanti::T_RIGHE_SHOP_CASUALI => $ritornoRigheCasuale,
  409.             'cat1' => $categoria_1,
  410.             'cat2' => $categoria_2,
  411.             'cat3' => $categoria_3,
  412.             'cat4' => $categoria_4,
  413.             'cat5' => $categoria_5,
  414.             Costanti::CATEGORIA_1_DB => $ct1_db,
  415.             Costanti::CATEGORIA_2_DB => $ct2_db,
  416.             Costanti::CATEGORIA_3_DB => $ct3_db,
  417.             Costanti::CATEGORIA_4_DB => $ct4_db,
  418.             Costanti::CATEGORIA_5_DB => $ct5_db,
  419.             'abilitaAttributi' => $abAttrVariabile,
  420.             Costanti::T_PAGINA_CORRENTE => $page,
  421.             Costanti::T_NUMERO_PAGINE => $numeroPagine,
  422.             Costanti::T_RIGHE_SHOP => $righeShop,
  423.             Costanti::T_DEVIAZIONE_SU_PAGINA_RICERCA => $deviazioneSuPaginaRicerca,
  424.         ));
  425.         /*$response->setCache(array(
  426.             'max_age'       => 604800,
  427.             's_maxage'      => 604800,
  428.             'public'        => true
  429.         ));*/
  430.         return $response;
  431.     }
  432.     /**
  433.      * @Route("/shopCM/{codice}", requirements={"codice"=".+"})
  434.      */
  435.     public function redirectDettaglio(Request $request$codice)
  436.     {
  437.         return $this->redirectToRoute('home_shop_comune_dettaglio_prodotto', array('codice' => $codice), Response::HTTP_MOVED_PERMANENTLY);
  438.     }
  439.     /**
  440.      * @Route("/product/{codice}", name="home_shop_comune_dettaglio_prodotto", requirements={"codice"=".+"})
  441.      */
  442.     public function dettaglioProdotto(Request $request$codice)
  443.     {
  444.         /** @var ReturnImpostazioniServiceController $imp */
  445.         $imp $this->imp;
  446.         $imp->caricaCacheImpostazioniDaNomi(array('AbilitaB2C''FiltroVisualizzazioneArticoloPerShopComune''CodiceListinoShopComune''AttivaUtilizzoAttributiArticoli''DisponibileSommatoMagazziniSecondari'));
  447.         /** @var User $user */
  448.         $user $this->servizi->OttieniUtenteCorrente();
  449.         if ($imp->ritornaImpostazioneDaNome('AbilitaB2C') != '1' && !$this->servizi->OttieniUtenteCorrente())
  450.         {
  451.             return $this->redirectToRoute('home_login');
  452.         }
  453.         $filtroComune $imp->ritornaImpostazioneDaNome('FiltroVisualizzazioneArticoloPerShopComune');
  454.         // FILTRO VISUALIZZAZIONE ARTICOLI CLIENTI
  455.         $filtroRiferimento null;
  456.         if ($user){
  457.             if ($user->getFiltroVisualizzazioneArticoliClienti()) {
  458.                 if ($user->getFiltroVisualizzazioneArticoliClienti()->getElencoCategorie() != '')
  459.                     $filtroRiferimento $user->getFiltroVisualizzazioneArticoliClienti();
  460.             }
  461.         }else if ($filtroComune != ''){
  462.             $ffl $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class)->find($filtroComune);
  463.             if ($ffl && $ffl->getElencoCategorie() != '')
  464.                 $filtroRiferimento $ffl;
  465.         }
  466.         $recuperoDati = new RecuperoDati($this->servizi->doctrine$imp$this->servizi);
  467.         $abilitaAttributi $imp->ritornaImpostazioneDaNome("AttivaUtilizzoAttributiArticoli") == '1' true false;
  468.         /* SISTEMO LE VARIABILI AGGIUNGENDO / SE TOLTO E SOSTITUITO CON £-£ */
  469.         $codice str_replace("£-£""/"$codice);
  470.         //Ottengo l'id del codice
  471.         $servizi $this->servizi;
  472.         $idMappa $servizi->estraiIdMappaDaLink($codice);
  473.         //Recupero riga articolo
  474.         $filtroRicerca = array();
  475.         $f = new FiltroRicerca();
  476.         $f->colonne = array('mappa.id');
  477.         $f->operatore "=";
  478.         $f->valore $idMappa;
  479.         array_push($filtroRicerca$f);
  480.         $codiceCliente "";
  481.         if($this->servizi->OttieniUtenteCorrente()){
  482.             $codiceCliente $this->servizi->OttieniUtenteCorrente()->getCodiceCliente();
  483.             if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")){
  484.                 $altriDati $this->servizi->OttieniUtenteCorrente() ? $this->servizi->OttieniUtenteCorrente()->getAltriDati() : null;
  485.                 if ($altriDati && $altriDati != null){
  486.                     $json json_decode($altriDatitrue);
  487.                     $anagraficaTrovata $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($json['codice'], $this->servizi->OttieniUtenteCorrente());
  488.                     if ($anagraficaTrovata){
  489.                         $clienteSelezionatoAgente $anagraficaTrovata;
  490.                         $codiceCliente $clienteSelezionatoAgente->getCodice();
  491.                     }
  492.                 }
  493.             }
  494.         }
  495.         /** @var  RitornoRigheShop */
  496.         $ritornoRighe $recuperoDati->recuperaRigheShop($filtroRicerca01$request->getLocale(), $codiceClientenull$this->servizi->OttieniUtenteCorrente(), falsefalsetruetrue$abilitaAttributi);
  497.         /** @var MappaCategoriaArticolo[] $righeShop */
  498.         $righeShop $ritornoRighe->righe;
  499.         /** @var RitornoRigheShop */
  500.         $ritornoRigheCasuale $recuperoDati->recuperaRigheShop(null025$request->getLocale(), $codiceClientenull$this->servizi->OttieniUtenteCorrente(), falsetruefalsetruefalse);
  501.         // RECUPERO LISTA CATEGORIE
  502.         /** @var MappaCategoriaArticolo|null $mappaIdentificata */
  503.         $mappaIdentificata null;
  504.         if (count($righeShop) > 0){
  505.             $mappaIdentificata $righeShop[0];
  506.         }
  507.         $categoria_1 ''$categoria_2 ''$categoria_3 ''$categoria_4 ''$categoria_5 '';
  508.         if ($mappaIdentificata){
  509.             $categoria_1 str_replace("£-£""/"$mappaIdentificata->categoria1 $mappaIdentificata->categoria1->categoriaInLingua->nomeUnivoco '');
  510.             $categoria_2 str_replace("£-£""/"$mappaIdentificata->categoria2 $mappaIdentificata->categoria2->categoriaInLingua->nomeUnivoco '');
  511.             $categoria_3 str_replace("£-£""/"$mappaIdentificata->categoria3 $mappaIdentificata->categoria3->categoriaInLingua->nomeUnivoco '');
  512.             $categoria_4 str_replace("£-£""/"$mappaIdentificata->categoria4 $mappaIdentificata->categoria4->categoriaInLingua->nomeUnivoco '');
  513.             $categoria_5 str_replace("£-£""/"$mappaIdentificata->categoria5 $mappaIdentificata->categoria5->categoriaInLingua->nomeUnivoco '');
  514.         }       
  515.         //POSSIBILI VARIANTI DISPONIBILI
  516.         $variantiDisponibili = array(
  517.             "1" => array(),
  518.             "2" => array(),
  519.             "3" => array(),
  520.             "4" => array(),
  521.             "5" => array()
  522.         );
  523.         if ($mappaIdentificata && count($mappaIdentificata->varianti) > 0){
  524.             foreach ($mappaIdentificata->varianti as $var){
  525.                 if ($var->varianteInLingua){
  526.                     $var $var->varianteInLingua;
  527.                 }
  528.                 $uno = (string)$var->codiceDimensione1 "£££" . (string)$var->descrizioneDimensione1;
  529.                 $due = (string)$var->codiceDimensione2 "£££" . (string)$var->descrizioneDimensione2;
  530.                 $tre = (string)$var->codiceDimensione3 "£££" . (string)$var->descrizioneDimensione3;
  531.                 $quattro = (string)$var->codiceDimensione4 "£££" . (string)$var->descrizioneDimensione4;
  532.                 $cinque = (string)$var->codiceDimensione5 "£££" . (string)$var->descrizioneDimensione5;
  533.                 if (!in_array($uno$variantiDisponibili["1"]) && $var->codiceDimensione1 != ''){
  534.                     array_push($variantiDisponibili["1"], $uno);
  535.                 }
  536.                 if (!in_array($due$variantiDisponibili["2"]) && $var->codiceDimensione2 != ''){
  537.                     array_push($variantiDisponibili["2"], $due);
  538.                 }
  539.                 if (!in_array($tre$variantiDisponibili["3"]) && $var->codiceDimensione3 != ''){
  540.                     array_push($variantiDisponibili["3"], $tre);
  541.                 }
  542.                 if (!in_array($quattro$variantiDisponibili["4"]) && $var->codiceDimensione4 != ''){
  543.                     array_push($variantiDisponibili["4"], $quattro);
  544.                 }
  545.                 if (!in_array($cinque$variantiDisponibili["5"]) && $var->codiceDimensione5 != ''){
  546.                     array_push($variantiDisponibili["5"], $cinque);
  547.                 }
  548.             }
  549.         }
  550.         $filtro = new ContenitoreCategoriePerFiltri();
  551.         /** @var $categorie AlberoCategorie[] */
  552.         $listaCategorie $recuperoDati->recuperaAlberoCategorie($filtro$request->getLocale(), $filtroRiferimento);
  553.         $listaCategorieChiaviParent = array();
  554.         foreach ($listaCategorie as $lc){
  555.             if($lc->parent){
  556.                 $_lc_id $lc->parent->id;
  557.                 if (key_exists($_lc_id$listaCategorieChiaviParent)){
  558.                     array_push($listaCategorieChiaviParent[$_lc_id], $lc);
  559.                 }else{
  560.                     $listaCategorieChiaviParent[$_lc_id] = array($lc);
  561.                 }
  562.             }
  563.         }
  564.         $response $this->render('ZZ_front_end/shop/dettaglio_prodotto/shop_comune_dettaglio_prodotto.html.twig', array(
  565.             Costanti::T_LISTA_CATEGORIE => $listaCategorie,
  566.             Costanti::T_LISTA_CATEGORIE_CHIAVI_PARENT => $listaCategorieChiaviParent,
  567.             Costanti::T_DETTAGLIO_ARTICOLO_IDENTIFICATO => $mappaIdentificata,
  568.             Costanti::T_MAPPA_IDENTIFICATA => $mappaIdentificata,
  569.             Costanti::T_ASSOCIAZIONE_ATTRIBUTI => ($mappaIdentificata $mappaIdentificata->associazioneAttributi : array()),
  570.             Costanti::T_RIGHE_SHOP => $righeShop,
  571.             Costanti::T_ATTRIBUTI => $ritornoRighe->attributi,
  572.             Costanti::T_CODICE_CLIENTE_IDENTIFICATO => $codiceCliente,
  573.             'variantiDisponibili' => $variantiDisponibili,
  574.             Costanti::T_RIGHE_SHOP_CASUALI => $ritornoRigheCasuale->righe,
  575.             Costanti::T_PAGINA_CORRENTE => 1,
  576.             Costanti::T_NUMERO_PAGINE => 1,
  577.             'cat1' => $categoria_1,
  578.             'cat2' => $categoria_2,
  579.             'cat3' => $categoria_3,
  580.             'cat4' => $categoria_4,
  581.             'cat5' => $categoria_5,
  582.             Costanti::CATEGORIA_1_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria1 $mappaIdentificata->categoria1 null) : null),
  583.             Costanti::CATEGORIA_2_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria2 $mappaIdentificata->categoria2 null) : null),
  584.             Costanti::CATEGORIA_3_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria3 $mappaIdentificata->categoria3 null) : null),
  585.             Costanti::CATEGORIA_4_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria4 $mappaIdentificata->categoria4 null) : null),
  586.             Costanti::CATEGORIA_5_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria5 $mappaIdentificata->categoria5 null) : null),
  587.         ));
  588.         /*$response->setCache(array(
  589.             'max_age'       => 604800,
  590.             's_maxage'      => 604800,
  591.             'public'        => true
  592.         ));*/
  593.         return $response;
  594.     }
  595. }