src/Controller/ShopComuneController.php line 352
<?php
namespace App\Controller;
use App\Entity\FiltroVisualizzazioneArticoliClienti;
use App\Entity\MagazzinoSecondarioDisponibilita;
use App\Entity\MappaCategorieArticoli;
use App\Entity\StatisticheRicerca;
use App\Model\Caching\Caching_Categorie;
use App\Model\Costanti;
use App\Model\DizionarioDatabase;
use App\Model\Entita\AlberoCategorie;
use App\Model\Entita\Categoria;
use App\Model\Entita\MagazzinoSecondario;
use App\Model\Entita\MappaCategoriaArticolo;
use App\Model\FiltroAttributi;
use App\Model\RecuperoDati;
use App\Model\ContenitoreCategoriePerFiltri;
use App\Model\FiltroRicerca;
use App\Entity\User;
use App\Model\RitornoRigheShop;
use App\Model\SearchEngine;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ShopComuneController extends AbstractController
{
/** @var LoggerInterface */
private $logger;
/** @var ReturnImpostazioniServiceController */
private $imp;
/** @var ServiziController */
private $servizi;
/**
* ShopComuneController constructor.
* @param LoggerInterface $logger
* @param ReturnImpostazioniServiceController $imp
* @param ServiziController $servizi
*/
public function __construct(LoggerInterface $logger, ReturnImpostazioniServiceController $imp, ServiziController $servizi)
{
$this->logger = $logger;
$this->imp = $imp;
$this->servizi = $servizi;
}
/**
* @Route("/shopCM")
* @Route("/shopCM", methods={"GET"})
* @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"=""})
*/
public function redirectNaviga(Request $request , $categoria_1 = "", $categoria_2 = "", $categoria_3 = "", $categoria_4 = "", $categoria_5 = "", $page = 1)
{
return $this->redirectToRoute('home_shop_comune_naviga', array(
'page' => $page,
'categoria_1' => $categoria_1,
'categoria_2' => $categoria_2,
'categoria_3' => $categoria_3,
'categoria_4' => $categoria_4,
'categoria_5' => $categoria_5
), Response::HTTP_MOVED_PERMANENTLY);
}
/**
* @Route("/richiestaPrezzo/{idMappa}", name="richiesta_prezzo_modal", options={"expose"=true})
*/
public function richiestaPrezzo(Request $request, $idMappa){
$mappa = $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->find($idMappa);
/** @var User $user */
$user = $this->servizi->OttieniUtenteCorrente();
/** @var MappaCategoriaArticolo $mappaEntita */
$mappaEntita = MappaCategoriaArticolo::CreaDaEntitadoctrine($this->servizi->doctrine, $this->servizi, $user ? $user->getCodiceCliente() : '', $mappa, $user, $request->getLocale());
return $this->render('ZZ_front_end/modal/modal_richiesta_prezzo.html.twig', array(
Costanti::T_DETTAGLIO_ARTICOLO_IDENTIFICATO => $mappaEntita
));
}
/**
* @Route("/modalMagazziniSecondari/{idMappa}/{qta}", name="magazzini_secondari_modal", options={"expose"=true})
*/
public function magazziniSecondariModal(Request $request, $idMappa, $qta){
$mappa = $this->servizi->doctrine->getRepository(MappaCategorieArticoli::class)->find($idMappa);
$recuperoDati = new RecuperoDati($this->servizi->doctrine, $this->imp, $this->servizi);
/** @var User $user */
$user = $this->servizi->OttieniUtenteCorrente();
/** @var MappaCategoriaArticolo $mappaEntita */
$mappaEntita = MappaCategoriaArticolo::CreaDaEntitadoctrine($this->servizi->doctrine, $this->servizi, $user ? $user->getCodiceCliente() : '', $mappa, $user, $request->getLocale());
/** @var MagazzinoSecondario[] $magazziniSecondari */
$magazziniSecondariDaMappa = $recuperoDati->RitornaMagazziniSecondariDaMappa($idMappa);
return $this->render('ZZ_front_end/modal/modal_magazzini_secondari.html.twig', array(
Costanti::T_MAGAZZINI_SECONDARI => $magazziniSecondariDaMappa,
Costanti::T_MAPPA_IDENTIFICATA => $mappaEntita,
Costanti::T_QTA_ORDINATA => $qta
));
}
/**
* @Route("/products", name="home_shop_comune")
* @Route("/products", name="shop_comune_cerca_generico", methods={"GET"}, options={"expose"=true})
* @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"=""})
*/
public function navigaShopComune(Request $request, $categoria_1 = "", $categoria_2 = "", $categoria_3 = "", $categoria_4 = "", $categoria_5 = "", $page = 1)
{
$this->imp->caricaCacheImpostazioniDaNomi(array('UsaSearchEngine', 'AbilitaB2C', 'FiltroVisualizzazioneArticoloPerShopComune', 'NumeroArticoliPaginaPrincipaleShopComune', 'AbilitaDebugUtentiAmministrativi', 'AttivaUtilizzoAttributiArticoli', 'CodiceListinoShopComune', 'DisponibileSommatoMagazziniSecondari'));
/** @var User $user */
$user = $this->servizi->OttieniUtenteCorrente();
$usaSearchEngine = $this->imp->ritornaImpostazioneDaNome('UsaSearchEngine') == '1';
if ($this->imp->ritornaImpostazioneDaNome('AbilitaB2C') != '1' && !$this->servizi->OttieniUtenteCorrente())
{
return $this->redirectToRoute('home_login');
}
$filtroComune = $this->imp->ritornaImpostazioneDaNome('FiltroVisualizzazioneArticoloPerShopComune');
// FILTRO VISUALIZZAZIONE ARTICOLI CLIENTI
$filtroRiferimento = null;
if ($user){
if ($user->getFiltroVisualizzazioneArticoliClienti()) {
if ($user->getFiltroVisualizzazioneArticoliClienti()->getElencoCategorie() != '')
$filtroRiferimento = $user->getFiltroVisualizzazioneArticoliClienti();
}
}else if ($filtroComune != ''){
$ffl = $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class)->find($filtroComune);
if ($ffl && $ffl->getElencoCategorie() != '')
$filtroRiferimento = $ffl;
}
$recuperoDati = new RecuperoDati($this->servizi->doctrine, $this->imp, $this->servizi);
$numeroArticoliPerPagina = $this->imp->ritornaImpostazioneDaNome("NumeroArticoliPaginaPrincipaleShopComune");
$abAttrVariabile = $this->imp->ritornaImpostazioneDaNome("AttivaUtilizzoAttributiArticoli");
$debug = $this->imp->ritornaImpostazioneDaNome("AbilitaDebugUtentiAmministrativi");
$logger = $this->logger;
$abilitaAttributi = $abAttrVariabile == '1' ? true : false;
$deviazioneSuPaginaRicerca = false;
if ($numeroArticoliPerPagina == "" || $numeroArticoliPerPagina <= 0)
$numeroArticoliPerPagina = 1;
$codiceCliente = "";
if($this->servizi->OttieniUtenteCorrente()){
$codiceCliente = $this->servizi->OttieniUtenteCorrente()->getCodiceCliente();
if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")){
$altriDati = $this->servizi->OttieniUtenteCorrente() ? $this->servizi->OttieniUtenteCorrente()->getAltriDati() : null;
if ($altriDati && $altriDati != null){
$json = json_decode($altriDati, true);
$anagraficaTrovata = $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($json['codice'], $this->servizi->OttieniUtenteCorrente());
if ($anagraficaTrovata){
$clienteSelezionatoAgente = $anagraficaTrovata;
$codiceCliente = $clienteSelezionatoAgente->getCodice();
}
}
}
}
/* SISTEMO LE VARIABILI AGGIUNGENDO / SE TOLTO E SOSTITUITO CON £-£ */
$categoria_1 = str_replace("£-£", "/", $categoria_1);
$categoria_2 = str_replace("£-£", "/", $categoria_2);
$categoria_3 = str_replace("£-£", "/", $categoria_3);
$categoria_4 = str_replace("£-£", "/", $categoria_4);
$categoria_5 = str_replace("£-£", "/", $categoria_5);
$filtro = new ContenitoreCategoriePerFiltri();
/** @var $categorie AlberoCategorie[] */
$listaCategorie = $recuperoDati->recuperaAlberoCategorie($filtro, $request->getLocale(), $filtroRiferimento);
$listaCategorieChiaviParent = array();
foreach ($listaCategorie as $lc){
if($lc->parent){
$_lc_id = $lc->parent->id;
if (key_exists($_lc_id, $listaCategorieChiaviParent)){
array_push($listaCategorieChiaviParent[$_lc_id], $lc);
}else{
$listaCategorieChiaviParent[$_lc_id] = array($lc);
}
}
}
$filtroRicerca = array();
if (key_exists("search", $request->query->all())){ //Se ritorna true vuol dire che c'è una stringa di ricerca
if ($debug){
$logger->info('Search parameter: ' . $request->query->get('search'));
}
$deviazioneSuPaginaRicerca = true;
//Splitto con spazio le varie stringhe di ricerca
$f = new FiltroRicerca();
$stringaRicerca = $request->query->get('search');
$f->soloSearchEngine = $usaSearchEngine;
$f->stringaSearchEngine = ($stringaRicerca . ' | ((@assArtCli_codiceAnagrafica ' . SearchEngine::verificaEscape($codiceCliente) . ') (@(assArtCli_codice,assArtCli_descrizione) ' . SearchEngine::verificaEscape($stringaRicerca) . ')) ' );
array_push($filtroRicerca, $f);
} else if (count( $request->query->all()) > 0){
if ($debug){
$logger->info('Parametri request: ' . print_r($request->query->all(), true));
}
//Se esistono dei parametri vuol dire che sto filtrando con gli attributi
$dizionarioDb = new DizionarioDatabase($this->servizi->doctrine);
$colonneAmmesse = $dizionarioDb->ritornaArrayNomiColonnePerFiltroFormAttributi();
/*
* Array con chiave id parametro e all'interno 2 parametri da a oppure uno se =
* ES: {
* 'id' => {
* 'da' => ''
* 'a' => ''
* }
* }
* Alla fine se $raccoltaRangeParametri contiene qualcosa itero e aggiungo il filtro
*/
$raccoltaRangeParametri = array();
foreach ($request->query->all() as $key => $value){
$deviazioneSuPaginaRicerca = true;
$chiaveDecod = urldecode($key);
$valoreDecod = urldecode($request->query->all()[$key]);
if ($debug){
$logger->info('Chiave: ' . $chiaveDecod . ' --- Valore: ' . $valoreDecod);
}
if ($valoreDecod != '') {
$valoreCorrettoDaUtilizzare = str_replace(Costanti::CSI_CERCA_CON_FILTRO_SU_COLONNA, '', $chiaveDecod);
if (strpos($chiaveDecod, Costanti::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
if (in_array($valoreCorrettoDaUtilizzare, $colonneAmmesse)) {
//Verifico se la colonna indicata è presente nell'array delle colonne concesse così da prevenire l'SQL INJECTION
//Se non è permessa la colonna salto il parametro di filtro
$f = new FiltroRicerca();
$f->colonne = array(str_replace('-', '.', $valoreCorrettoDaUtilizzare)); //Sostituisco - con .
$f->operatore = 'LIKE';
$f->valore = '%' . $valoreDecod . '%';
array_push($filtroRicerca, $f);
}
} else {
$idAtt = $chiaveDecod;
if (strpos($chiaveDecod, Costanti::CSI_ATTRIBUTI_INIZIO_A) === 0 || strpos($chiaveDecod, Costanti::CSI_ATTRIBUTI_INIZIO_DA) === 0){
//Se la chiave contiene il valore di inizio o fine attributo lo tratto come tale
$idAtt = str_replace(Costanti::CSI_ATTRIBUTI_INIZIO_DA, '', $idAtt);
$idAtt = str_replace(Costanti::CSI_ATTRIBUTI_INIZIO_A, '', $idAtt);
if (!array_key_exists($idAtt, $raccoltaRangeParametri)){
$raccoltaRangeParametri[$idAtt] = array('da' => '', 'a' => '');
}
if (strpos($chiaveDecod, Costanti::CSI_ATTRIBUTI_INIZIO_DA) === 0){
$raccoltaRangeParametri[$idAtt]['da'] = $valoreDecod;
}else if (strpos($chiaveDecod, Costanti::CSI_ATTRIBUTI_INIZIO_A) === 0){
$raccoltaRangeParametri[$idAtt]['a'] = $valoreDecod;
}
}else {
//Vuol dire che non è un parametro da a
$raccoltaRangeParametri[$idAtt] = $valoreDecod;
}
}
}
}
if ($debug){
$logger->info('Raccolta range parametri: ' . print_r($raccoltaRangeParametri, true));
}
foreach ($raccoltaRangeParametri as $key => $value){
if (is_array($value)){ //Vuol dire che ho il da - a
$f = new FiltroAttributi();
$f->idAttributo = $key;
$f->valoreDa = $value['da'];
if($value['a'] != '') { //Se il valore a è diverso da vuoto uso il between altrimenti il semplice uguale
$f->valoreA = $value['a'];
$f->operatore = 'BETWEEN';
}else{
$f->operatore = '=';
}
array_push($filtroRicerca, $f);
}else{
$f = new FiltroAttributi();
$f->idAttributo = $key;
$f->valoreDa = strtolower($value);
array_push($filtroRicerca, $f);
}
}
}
$noFilter = false;
if (key_exists('search_no_filter', $request->query->all())){
if ($request->query->get('search_no_filter') == '1'){
$noFilter = true;
}
}
//Verifico se sono specificate delle categorie per aggiungerle al filtro a meno che la variabile $noFilter non sia vera
if (!$noFilter) {
if ($categoria_1 != "") {
$deviazioneSuPaginaRicerca = true;
$f = new FiltroRicerca();
$f->colonne = array('categoria1.nome_univoco');
$f->operatore = "=";
$f->valore = $categoria_1;
array_push($filtroRicerca, $f);
}
if ($categoria_2 != "") {
$deviazioneSuPaginaRicerca = true;
$f = new FiltroRicerca();
$f->colonne = array('categoria2.nome_univoco');
$f->operatore = "=";
$f->valore = $categoria_2;
array_push($filtroRicerca, $f);
}
if ($categoria_3 != "") {
$deviazioneSuPaginaRicerca = true;
$f = new FiltroRicerca();
$f->colonne = array('categoria3.nome_univoco');
$f->operatore = "=";
$f->valore = $categoria_3;
array_push($filtroRicerca, $f);
}
if ($categoria_4 != "") {
$deviazioneSuPaginaRicerca = true;
$f = new FiltroRicerca();
$f->colonne = array('categoria4.nome_univoco');
$f->operatore = "=";
$f->valore = $categoria_4;
array_push($filtroRicerca, $f);
}
if ($categoria_5 != "") {
$deviazioneSuPaginaRicerca = true;
$f = new FiltroRicerca();
$f->colonne = array('categoria5.nome_univoco');
$f->operatore = "=";
$f->valore = $categoria_5;
array_push($filtroRicerca, $f);
}
}
$da = 0;
$a = $numeroArticoliPerPagina;
if ($page > 1){
$da = $numeroArticoliPerPagina * ($page - 1);
}
//Necessario per recuperare gli attributi ma attenzione a non inserirlo prima di recuperare le categorie
$filtro->nomeUnivocoCat1 = $categoria_1;
$filtro->nomeUnivocoCat2 = $categoria_2;
$filtro->nomeUnivocoCat3 = $categoria_3;
$filtro->nomeUnivocoCat4 = $categoria_4;
$filtro->nomeUnivocoCat5 = $categoria_5;
/** @var MappaCategoriaArticolo[] $righeShop */
$ritornoRighe = $recuperoDati->recuperaRigheShop($filtroRicerca, $da, $a, $request->getLocale(), $codiceCliente, $filtro, $this->servizi->OttieniUtenteCorrente(), false, false, false, true, $abilitaAttributi);
$righeShop = $ritornoRighe->righe;
//Aggiungo statistiche ricerca / categorie
if ($deviazioneSuPaginaRicerca && $request->query->get('search')){
try{
$stat = new StatisticheRicerca();
$stat->setDataRicerca(new \DateTime());
$stat->setConteggioRisultati($ritornoRighe->count);
$stat->setStringaRicerca($request->query->get('search'));
$stat->setCategorie($noFilter ? '' : $filtro->nomeUnivocoCat1 . '-' . $filtro->nomeUnivocoCat2 . '-' . $filtro->nomeUnivocoCat3 . '-' . $filtro->nomeUnivocoCat4 . '-' . $filtro->nomeUnivocoCat5);
$em = $this->servizi->doctrine->getManager();
$em->persist($stat);
$em->flush();
}catch (\Exception $ex)
{
}
}
$servizi = $this->servizi;
$ct1_db = null; $ct2_db = null; $ct3_db = null; $ct4_db = null; $ct5_db = null;
$cacheCategorie = new Caching_Categorie($servizi);
if ($categoria_5 != ''){
$cat = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_5);
//$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_5));
$ct5_db = $cat;
$ct5_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct5_db, $request->getLocale());
$servizi->inserisciStatisticaNavigazioneCategoria($cat, $request, $this->servizi->OttieniUtenteCorrente());
} else if ($categoria_4 != ''){
$cat = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_4);
//$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_4));
$ct4_db = $cat;
$ct4_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct4_db, $request->getLocale());
$servizi->inserisciStatisticaNavigazioneCategoria($cat, $request, $this->servizi->OttieniUtenteCorrente());
} else if ($categoria_3 != ''){
$cat = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_3);
//$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_3));
$ct3_db = $cat;
$ct3_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct3_db, $request->getLocale());
$servizi->inserisciStatisticaNavigazioneCategoria($cat, $request, $this->servizi->OttieniUtenteCorrente());
} else if ($categoria_2 != ''){
$cat = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_2);
//$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_2));
$ct2_db = $cat;
$ct2_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct2_db, $request->getLocale());
$servizi->inserisciStatisticaNavigazioneCategoria($cat, $request, $this->servizi->OttieniUtenteCorrente());
} else if ($categoria_1 != ''){
$cat = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_1);
//$cat = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_1));
$ct1_db = $cat;
$ct1_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct1_db, $request->getLocale());
$servizi->inserisciStatisticaNavigazioneCategoria($cat, $request, $this->servizi->OttieniUtenteCorrente());
}
if($categoria_1 != '' && !$ct1_db){
$ct1_db = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_1);
//$ct1_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_1));
$ct1_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct1_db, $request->getLocale());
}
if($categoria_2 != '' && !$ct2_db){
$ct2_db = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_2);
//$ct2_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_2));
$ct2_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct2_db, $request->getLocale());
}
if($categoria_3 != '' && !$ct3_db){
$ct3_db = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_3);
//$ct3_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_3));
$ct3_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct3_db, $request->getLocale());
}
if($categoria_4 != '' && !$ct4_db){
$ct4_db = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_4);
// $ct4_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_4));
$ct4_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct4_db, $request->getLocale());
}
if($categoria_5 != '' && !$ct5_db){
$ct5_db = $cacheCategorie->getCategoriaDaNomeUnivoco($categoria_5);
//$ct5_db = $this->servizi->doctrine->getRepository(Categorie::class)->findOneBy(array('nomeUnivoco' => $categoria_5));
$ct5_db = Categoria::CreaDaEntitadoctrine($this->servizi, $ct5_db, $request->getLocale());
}
/** @var MappaCategoriaArticolo[] $ritornoRigheCasuale */
$ritornoRigheCasuale = $recuperoDati->recuperaRigheShop(null, 0, 25, $request->getLocale(), $codiceCliente, null, $this->servizi->OttieniUtenteCorrente(), false, true, false, true, false)->righe;
//Calcolo il numero di pagine eventuali
$ritornoR2 = $recuperoDati->recuperaRigheShop($filtroRicerca, $da, $a, $request->getLocale(), $codiceCliente, null, $this->servizi->OttieniUtenteCorrente(), true, false);
$countRigheShop = $ritornoR2->count;
$numeroPagine = 0;
if ($countRigheShop > 0)
$numeroPagine = ceil($countRigheShop / $numeroArticoliPerPagina); //arrotondo per eccesso
$response = $this->render('ZZ_front_end/shop/shop_comune.html.twig', array(
Costanti::T_LISTA_CATEGORIE => $listaCategorie,
Costanti::T_LISTA_CATEGORIE_CHIAVI_PARENT => $listaCategorieChiaviParent,
Costanti::T_CODICE_CLIENTE_IDENTIFICATO => $codiceCliente,
Costanti::T_ATTRIBUTI => $ritornoRighe->attributi,
Costanti::T_RIGHE_SHOP_CASUALI => $ritornoRigheCasuale,
'cat1' => $categoria_1,
'cat2' => $categoria_2,
'cat3' => $categoria_3,
'cat4' => $categoria_4,
'cat5' => $categoria_5,
Costanti::CATEGORIA_1_DB => $ct1_db,
Costanti::CATEGORIA_2_DB => $ct2_db,
Costanti::CATEGORIA_3_DB => $ct3_db,
Costanti::CATEGORIA_4_DB => $ct4_db,
Costanti::CATEGORIA_5_DB => $ct5_db,
'abilitaAttributi' => $abAttrVariabile,
Costanti::T_PAGINA_CORRENTE => $page,
Costanti::T_NUMERO_PAGINE => $numeroPagine,
Costanti::T_RIGHE_SHOP => $righeShop,
Costanti::T_DEVIAZIONE_SU_PAGINA_RICERCA => $deviazioneSuPaginaRicerca,
));
/*$response->setCache(array(
'max_age' => 604800,
's_maxage' => 604800,
'public' => true
));*/
return $response;
}
/**
* @Route("/shopCM/{codice}", requirements={"codice"=".+"})
*/
public function redirectDettaglio(Request $request, $codice)
{
return $this->redirectToRoute('home_shop_comune_dettaglio_prodotto', array('codice' => $codice), Response::HTTP_MOVED_PERMANENTLY);
}
/**
* @Route("/product/{codice}", name="home_shop_comune_dettaglio_prodotto", requirements={"codice"=".+"})
*/
public function dettaglioProdotto(Request $request, $codice)
{
/** @var ReturnImpostazioniServiceController $imp */
$imp = $this->imp;
$imp->caricaCacheImpostazioniDaNomi(array('AbilitaB2C', 'FiltroVisualizzazioneArticoloPerShopComune', 'CodiceListinoShopComune', 'AttivaUtilizzoAttributiArticoli', 'DisponibileSommatoMagazziniSecondari'));
/** @var User $user */
$user = $this->servizi->OttieniUtenteCorrente();
if ($imp->ritornaImpostazioneDaNome('AbilitaB2C') != '1' && !$this->servizi->OttieniUtenteCorrente())
{
return $this->redirectToRoute('home_login');
}
$filtroComune = $imp->ritornaImpostazioneDaNome('FiltroVisualizzazioneArticoloPerShopComune');
// FILTRO VISUALIZZAZIONE ARTICOLI CLIENTI
$filtroRiferimento = null;
if ($user){
if ($user->getFiltroVisualizzazioneArticoliClienti()) {
if ($user->getFiltroVisualizzazioneArticoliClienti()->getElencoCategorie() != '')
$filtroRiferimento = $user->getFiltroVisualizzazioneArticoliClienti();
}
}else if ($filtroComune != ''){
$ffl = $this->servizi->doctrine->getRepository(FiltroVisualizzazioneArticoliClienti::class)->find($filtroComune);
if ($ffl && $ffl->getElencoCategorie() != '')
$filtroRiferimento = $ffl;
}
$recuperoDati = new RecuperoDati($this->servizi->doctrine, $imp, $this->servizi);
$abilitaAttributi = $imp->ritornaImpostazioneDaNome("AttivaUtilizzoAttributiArticoli") == '1' ? true : false;
/* SISTEMO LE VARIABILI AGGIUNGENDO / SE TOLTO E SOSTITUITO CON £-£ */
$codice = str_replace("£-£", "/", $codice);
//Ottengo l'id del codice
$servizi = $this->servizi;
$idMappa = $servizi->estraiIdMappaDaLink($codice);
//Recupero riga articolo
$filtroRicerca = array();
$f = new FiltroRicerca();
$f->colonne = array('mappa.id');
$f->operatore = "=";
$f->valore = $idMappa;
array_push($filtroRicerca, $f);
$codiceCliente = "";
if($this->servizi->OttieniUtenteCorrente()){
$codiceCliente = $this->servizi->OttieniUtenteCorrente()->getCodiceCliente();
if ($this->isGranted("ROLE_ADMIN") || $this->isGranted("ROLE_AGENTE") || $this->isGranted("ROLE_COMMERCIALE")){
$altriDati = $this->servizi->OttieniUtenteCorrente() ? $this->servizi->OttieniUtenteCorrente()->getAltriDati() : null;
if ($altriDati && $altriDati != null){
$json = json_decode($altriDati, true);
$anagraficaTrovata = $this->servizi->ritornaAnagraficaShopSelezionataDaCookieIdentificativo($json['codice'], $this->servizi->OttieniUtenteCorrente());
if ($anagraficaTrovata){
$clienteSelezionatoAgente = $anagraficaTrovata;
$codiceCliente = $clienteSelezionatoAgente->getCodice();
}
}
}
}
/** @var RitornoRigheShop */
$ritornoRighe = $recuperoDati->recuperaRigheShop($filtroRicerca, 0, 1, $request->getLocale(), $codiceCliente, null, $this->servizi->OttieniUtenteCorrente(), false, false, true, true, $abilitaAttributi);
/** @var MappaCategoriaArticolo[] $righeShop */
$righeShop = $ritornoRighe->righe;
/** @var RitornoRigheShop */
$ritornoRigheCasuale = $recuperoDati->recuperaRigheShop(null, 0, 25, $request->getLocale(), $codiceCliente, null, $this->servizi->OttieniUtenteCorrente(), false, true, false, true, false);
// RECUPERO LISTA CATEGORIE
/** @var MappaCategoriaArticolo|null $mappaIdentificata */
$mappaIdentificata = null;
if (count($righeShop) > 0){
$mappaIdentificata = $righeShop[0];
}
$categoria_1 = ''; $categoria_2 = ''; $categoria_3 = ''; $categoria_4 = ''; $categoria_5 = '';
if ($mappaIdentificata){
$categoria_1 = str_replace("£-£", "/", $mappaIdentificata->categoria1 ? $mappaIdentificata->categoria1->categoriaInLingua->nomeUnivoco : '');
$categoria_2 = str_replace("£-£", "/", $mappaIdentificata->categoria2 ? $mappaIdentificata->categoria2->categoriaInLingua->nomeUnivoco : '');
$categoria_3 = str_replace("£-£", "/", $mappaIdentificata->categoria3 ? $mappaIdentificata->categoria3->categoriaInLingua->nomeUnivoco : '');
$categoria_4 = str_replace("£-£", "/", $mappaIdentificata->categoria4 ? $mappaIdentificata->categoria4->categoriaInLingua->nomeUnivoco : '');
$categoria_5 = str_replace("£-£", "/", $mappaIdentificata->categoria5 ? $mappaIdentificata->categoria5->categoriaInLingua->nomeUnivoco : '');
}
//POSSIBILI VARIANTI DISPONIBILI
$variantiDisponibili = array(
"1" => array(),
"2" => array(),
"3" => array(),
"4" => array(),
"5" => array()
);
if ($mappaIdentificata && count($mappaIdentificata->varianti) > 0){
foreach ($mappaIdentificata->varianti as $var){
if ($var->varianteInLingua){
$var = $var->varianteInLingua;
}
$uno = (string)$var->codiceDimensione1 . "£££" . (string)$var->descrizioneDimensione1;
$due = (string)$var->codiceDimensione2 . "£££" . (string)$var->descrizioneDimensione2;
$tre = (string)$var->codiceDimensione3 . "£££" . (string)$var->descrizioneDimensione3;
$quattro = (string)$var->codiceDimensione4 . "£££" . (string)$var->descrizioneDimensione4;
$cinque = (string)$var->codiceDimensione5 . "£££" . (string)$var->descrizioneDimensione5;
if (!in_array($uno, $variantiDisponibili["1"]) && $var->codiceDimensione1 != ''){
array_push($variantiDisponibili["1"], $uno);
}
if (!in_array($due, $variantiDisponibili["2"]) && $var->codiceDimensione2 != ''){
array_push($variantiDisponibili["2"], $due);
}
if (!in_array($tre, $variantiDisponibili["3"]) && $var->codiceDimensione3 != ''){
array_push($variantiDisponibili["3"], $tre);
}
if (!in_array($quattro, $variantiDisponibili["4"]) && $var->codiceDimensione4 != ''){
array_push($variantiDisponibili["4"], $quattro);
}
if (!in_array($cinque, $variantiDisponibili["5"]) && $var->codiceDimensione5 != ''){
array_push($variantiDisponibili["5"], $cinque);
}
}
}
$filtro = new ContenitoreCategoriePerFiltri();
/** @var $categorie AlberoCategorie[] */
$listaCategorie = $recuperoDati->recuperaAlberoCategorie($filtro, $request->getLocale(), $filtroRiferimento);
$listaCategorieChiaviParent = array();
foreach ($listaCategorie as $lc){
if($lc->parent){
$_lc_id = $lc->parent->id;
if (key_exists($_lc_id, $listaCategorieChiaviParent)){
array_push($listaCategorieChiaviParent[$_lc_id], $lc);
}else{
$listaCategorieChiaviParent[$_lc_id] = array($lc);
}
}
}
$response = $this->render('ZZ_front_end/shop/dettaglio_prodotto/shop_comune_dettaglio_prodotto.html.twig', array(
Costanti::T_LISTA_CATEGORIE => $listaCategorie,
Costanti::T_LISTA_CATEGORIE_CHIAVI_PARENT => $listaCategorieChiaviParent,
Costanti::T_DETTAGLIO_ARTICOLO_IDENTIFICATO => $mappaIdentificata,
Costanti::T_MAPPA_IDENTIFICATA => $mappaIdentificata,
Costanti::T_ASSOCIAZIONE_ATTRIBUTI => ($mappaIdentificata ? $mappaIdentificata->associazioneAttributi : array()),
Costanti::T_RIGHE_SHOP => $righeShop,
Costanti::T_ATTRIBUTI => $ritornoRighe->attributi,
Costanti::T_CODICE_CLIENTE_IDENTIFICATO => $codiceCliente,
'variantiDisponibili' => $variantiDisponibili,
Costanti::T_RIGHE_SHOP_CASUALI => $ritornoRigheCasuale->righe,
Costanti::T_PAGINA_CORRENTE => 1,
Costanti::T_NUMERO_PAGINE => 1,
'cat1' => $categoria_1,
'cat2' => $categoria_2,
'cat3' => $categoria_3,
'cat4' => $categoria_4,
'cat5' => $categoria_5,
Costanti::CATEGORIA_1_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria1 ? $mappaIdentificata->categoria1 : null) : null),
Costanti::CATEGORIA_2_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria2 ? $mappaIdentificata->categoria2 : null) : null),
Costanti::CATEGORIA_3_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria3 ? $mappaIdentificata->categoria3 : null) : null),
Costanti::CATEGORIA_4_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria4 ? $mappaIdentificata->categoria4 : null) : null),
Costanti::CATEGORIA_5_DB => ($mappaIdentificata ? ($mappaIdentificata->categoria5 ? $mappaIdentificata->categoria5 : null) : null),
));
/*$response->setCache(array(
'max_age' => 604800,
's_maxage' => 604800,
'public' => true
));*/
return $response;
}
}