Griglia   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 181
Duplicated Lines 0 %

Test Coverage

Coverage 98.75%

Importance

Changes 0
Metric Value
wmc 7
eloc 79
dl 0
loc 181
ccs 79
cts 80
cp 0.9875
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A testataPerGriglia() 0 34 1
B datiPerGriglia() 0 93 6
1
<?php
2
3
namespace Fi\CoreBundle\DependencyInjection;
4
5
use Fi\CoreBundle\Utils\GridDati;
6
use Fi\CoreBundle\Utils\GridTestata;
7
use Fi\CoreBundle\Utils\GrigliaParametriUtils;
8
use Fi\CoreBundle\Utils\GrigliaUtils;
9
use Fi\CoreBundle\Utils\GrigliaCampiExtraUtils;
10
use Fi\CoreBundle\Utils\GrigliaColonneUtils;
11
use Fi\CoreBundle\Utils\GrigliaDatiUtils;
12
use Fi\CoreBundle\Utils\GrigliaDatiPrecondizioniUtils;
13
use Fi\CoreBundle\Utils\GrigliaExtraFunzioniUtils;
14
use Fi\CoreBundle\Utils\GrigliaDatiMultiUtils;
15
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
16
17
class Griglia
18
{
19
20
    /**
21
     * Questa funzione è compatibile con jqGrid e risponde con un formato JSON
22
     * contenente i dati di testata per la griglia.
23
     *
24
     * @param array  $paricevuti
25
     * <pre>object $paricevuti[request]      oggetto che contiene il POST passato alla griglia</pre>
26
     * <pre>string $paricevuti[nometabella]  Nome della tabella</pre>
27
     * <pre>array  $paricevuti[dettaglij]    array contenente tutte le tabelle per le quali richiedere
28
     *                                         la join a partire da $paricevuti[nometabella]
29
     *                                         il vettore è composto da
30
     *                                         array("nomecampodadecodificare"=>array(
31
     *                                         "descrizione"=>"nometabella.campodecodifica",
32
     *                                         "lunghezza"=>"40")
33
     *                                         )</pre>
34
     * <pre>array  $paricevuti[colonne_link] array contenente eventuali colonne che debbano essere
35
     *                                         rappresentate da un link. Non è da confondere con i
36
     *                                         parametri_link di datiPerGriglia, perché QUESTO array
37
     *                                         si può passare alla testata se si vuole avere una
38
     *                                         colonna link che prenda in automatico
39
     *                                         parametro id = al valore dell'id della tabella
40
     *                                         principale su cui si sta facendo la griglia</pre>
41
     * <pre>string $paricevuti[output]       : "index" se la testata serve per la griglia dell'index, "stampa" se la testata serve per la stampa</pre>
42
     *
43
     * @return array contentente i dati di testata per la griglia
44
     */
45 19
    public function testataPerGriglia($paricevuti = [])
46
    {
47 19
        $nometabella = $paricevuti['nometabella'];
48 19
        $nomebundle = $paricevuti['nomebundle'];
49 19
        $doctrine = GrigliaParametriUtils::getDoctrineByEm($paricevuti);
50 19
        $doctrineficore = GrigliaParametriUtils::getDoctrineFiCoreByEm($paricevuti, $doctrine);
51
52 19
        $testata = array();
53 19
        $nomicolonne = array();
54 19
        $modellocolonne = array();
55 19
        $indice = 0;
56
57 19
        GrigliaColonneUtils::getColonne($nomicolonne, $modellocolonne, $indice, $paricevuti);
58
59
        /* Controlla se alcune colonne devono essere dei link */
60 19
        GrigliaExtraFunzioniUtils::getColonneLink($paricevuti, $modellocolonne);
61
62
        /* Controlla se ci sono dei campi extra da inserire in griglia
63
          (i campi extra non sono utilizzabili come filtri nella filtertoolbar della griglia) */
64 19
        GrigliaCampiExtraUtils::getCampiExtraTestataPerGriglia($paricevuti, $indice, $nomicolonne, $modellocolonne);
65
66 19
        GrigliaUtils::getOpzioniTabella($doctrineficore, $nometabella, $testata);
67
68 19
        GrigliaUtils::getPermessiTabella($paricevuti, $testata);
69
70 19
        $testata['nomicolonne'] = GrigliaUtils::getNomiColonne($nomicolonne);
71 19
        $testata['modellocolonne'] = GrigliaUtils::getModelloColonne($modellocolonne);
72
73 19
        $testata['tabella'] = $nometabella;
74 19
        $testata['nomebundle'] = $nomebundle;
75 19
        $testata['output'] = GrigliaParametriUtils::getOuputType($paricevuti);
76
77 19
        $response = new GridTestata($testata);
78 19
        return $response->getResponse();
79
    }
80
81
    /**
82
     * Questa funzione è compatibile con jqGrid e risponde con un formato JSON contenente
83
     * i dati di risposta sulla base dei parametri passati.
84
     *
85
     * @param array  $parametri
86
     * <pre>object $parametri["request"]        oggetto che contiene il POST passato alla griglia</pre>
87
     * <pre>string $parametri["nometabella"]   Nome della tabella</pre>
88
     * <pre>array  $parametri["tabellej"]       array contenente tutte le tabelle per le quali richiedere
89
     *                                           la join a partire da $paricevuti[nometabella]</pre>
90
     * <pre>array  $parametri["escludere"]      array contenente tutti i campi che non devono essere restituiti</pre>
91
     * <pre>bool   $parametri["nospan"]         se true non imposta limit e offset</pre>
92
     * <pre>array  $parametri["parametri_link"] array contenente le colonne che devono essere rappresentate
93
     *                                           come dei link e relativi parametri per comporre l'href.
94
     *                                           Da non confondere con colonne_link che si passa a
95
     *                                           testataPerGriglia, perchè QUESTO array genera un
96
     *                                           tag <href> interno alla colonna per il quale si
97
     *                                           possono specificare le parti che lo compongono</pre>
98
     * <pre>array  $parametri["decodifiche"]    = array contenente eventuali decodifiche dei valori di
99
     *                                           una colonna che non può essere tradotta con una join
100
     *                                           ad una tabella</pre>
101
     * <pre>string $parametri["output"]         : "index" se i dati servono per la griglia dell'index, "stampa" se i dati servono per la stampa</pre>
102
     *
103
     * @return array in formato JSON con i dati richiesti
104
     */
105 6
    public function datiPerGriglia($parametri = [])
106
    {
107 6
        $request = $parametri['request'];
108 6
        $container = $parametri['container'];
109 6
        $doctrine = GrigliaParametriUtils::getDoctrineByEm($parametri);
110 6
        $bundle = $parametri['nomebundle'];
111 6
        $nometabella = $parametri['nometabella'];
112
113 6
        $gestionepermessi = $container->get('ficorebundle.gestionepermessi');
114 6
        $canRead = ($gestionepermessi->leggere(array('modulo' => $nometabella)) ? 1 : 0);
115 6
        if (!$canRead) {
116
            throw new AccessDeniedException("Non si hanno i permessi per visualizzare questo contenuto, controllare i permessi dell'utente");
117
        }
118
119 6
        $tabellej = GrigliaDatiUtils::getTabellejNormalizzate($parametri);
120
121 6
        $campiextra = GrigliaDatiUtils::getDatiCampiExtra($parametri);
122
        /* inserisco i filtri passati in un vettore */
123
124
        /* inserisco i parametri che sono passati nella $request all'interno di
125
          apposite variabili in che pagina siamo */
126
        /* direzione dell'ordinamento */
127 6
        $sord = $request->get('sord'); // get the direction if(!$sidx) $sidx =1;
128 6
        $page = $request->get('page'); // get the requested page
129
        /* quante righe restituire (in caso di nospan = false) */
130 6
        $limit = $request->get('rows'); // get how many rows we want to have into the grid
131
        /* su quale campo fare l'ordinamento */
132 6
        $sidx = $request->get('sidx'); // get index row - i.e. user click to sort
133 6
        GrigliaDatiUtils::getDatiOrdinamento($sidx, $nometabella);
134
        /* inizia la query */
135 6
        $entityName = $bundle . ':' . $nometabella;
136 6
        $q = $doctrine->createQueryBuilder();
137 6
        $q->select($nometabella)
138 6
                ->from($entityName, $nometabella);
139
140
        /* scorre le tabelle collegate e crea la leftjoin usando come alias il nome stesso della tabella */
141 6
        if (isset($tabellej)) {
142 4
            GrigliaDatiUtils::setTabelleJoin($q, array('tabellej' => $tabellej, 'nometabella' => $nometabella));
143
        }
144
145 6
        GrigliaUtils::init();
146
147
        /* se ci sono delle precondizioni le imposta qui */
148 6
        GrigliaDatiPrecondizioniUtils::setPrecondizioni($q, $parametri);
149
        
150
        /* scorro ogni singola regola */
151 6
        $quanti = 0;
152 6
        GrigliaDatiMultiUtils::prepareQuery($parametri, $q, $sidx, $sord, $page, $limit, $quanti);
153
154 6
        $total_pages = GrigliaDatiMultiUtils::getTotalPages($quanti, $limit);
155
156
        /* imposta in $vettorerisposta la risposta strutturata per essere compresa da jqgrid */
157 6
        $vettorerisposta = array();
158 6
        $vettorerisposta['page'] = $page;
159 6
        $vettorerisposta['total'] = $total_pages;
160 6
        $vettorerisposta['records'] = $quanti;
161 6
        $vettorerisposta['filtri'] = json_decode($request->get('filters'), true);
162 6
        $indice = 0;
163
164 6
        $escludere = GrigliaParametriUtils::getDatiEscludere($parametri);
165 6
        $escludereutente = GrigliaParametriUtils::getDatiEscludereDaTabella($parametri);
166 6
        $ordinecolonne = GrigliaDatiUtils::getDatiOrdineColonne($parametri);
167 6
        $decodifiche = GrigliaDatiUtils::getDatiDecodifiche($parametri);
168
169 6
        $parametri["escludere"] = $escludere;
170 6
        $parametri["escludereutente"] = $escludereutente;
171 6
        $parametri["ordinecolonne"] = $ordinecolonne;
172 6
        $parametri["decodifiche"] = $decodifiche;
173 6
        $parametri["tabellej"] = $tabellej;
174
175
        /* Si scorrono tutti i records della query */
176 6
        foreach ($q as $singolo) {
177
            /* Si scorrono tutti i campi del record */
178 6
            $vettoreriga = array();
179 6
            $indicecolonna = 0;
180 6
            foreach ($singolo as $nomecampo => $singolocampo) {
181 6
                GrigliaDatiMultiUtils::buildDatiGriglia(
182 6
                    $parametri,
183 6
                    $vettoreriga,
184 6
                    $singolo,
185 6
                    $nomecampo,
186 6
                    $indice,
187 6
                    $indicecolonna,
188 6
                    $singolocampo
189
                );
190
            }
191
192 6
            GrigliaCampiExtraUtils::getCampiExtraDatiPerGriglia($campiextra, $vettoreriga, $doctrine, $entityName, $singolo);
193
194 6
            GrigliaDatiMultiUtils::buildRowGriglia($singolo, $vettoreriga, $vettorerisposta);
195
        }
196 6
        $response = new GridDati($vettorerisposta);
197 6
        return $response->getResponse();
198
    }
199
}
200