Passed
Push — master ( 88d705...44ae42 )
by Andrea
12:16
created

Griglia   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 216
Duplicated Lines 0 %

Test Coverage

Coverage 98.17%

Importance

Changes 0
Metric Value
dl 0
loc 216
ccs 107
cts 109
cp 0.9817
rs 10
c 0
b 0
f 0
wmc 8

2 Methods

Rating   Name   Duplication   Size   Complexity  
C datiPerGriglia() 0 128 7
B testataPerGriglia() 0 34 1
1
<?php
2
3
namespace Fi\CoreBundle\Controller;
4
5
use Fi\CoreBundle\DependencyInjection\GridDati;
6
use Fi\CoreBundle\DependencyInjection\GridTestata;
7
use Fi\CoreBundle\DependencyInjection\GrigliaParametriUtils;
8
use Fi\CoreBundle\DependencyInjection\GrigliaUtils;
9
use Fi\CoreBundle\DependencyInjection\GrigliaRegoleUtils;
10
use Fi\CoreBundle\DependencyInjection\GrigliaCampiExtraUtils;
11
use Fi\CoreBundle\DependencyInjection\GrigliaColonneUtils;
12
use Fi\CoreBundle\DependencyInjection\GrigliaDatiUtils;
13
use Fi\CoreBundle\DependencyInjection\GrigliaDatiPrecondizioniUtils;
14
use Fi\CoreBundle\DependencyInjection\GrigliaExtraFunzioniUtils;
15
use Fi\CoreBundle\DependencyInjection\GrigliaDatiMultiUtils;
16
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
17
18
class Griglia extends Controller
19
{
20
21
    /**
22
     * Questa funzione è compatibile con jqGrid e risponde con un formato JSON
23
     * contenente i dati di testata per la griglia.
24
     *
25
     * @param array  $paricevuti
26
     * <pre>object $paricevuti[request]      oggetto che contiene il POST passato alla griglia</pre>
27
     * <pre>string $paricevuti[nometabella]  Nome della tabella</pre>
28
     * <pre>array  $paricevuti[dettaglij]    array contenente tutte le tabelle per le quali richiedere
29
     *                                         la join a partire da $paricevuti[nometabella]
30
     *                                         il vettore è composto da
31
     *                                         array("nomecampodadecodificare"=>array(
32
     *                                         "descrizione"=>"nometabella.campodecodifica",
33
     *                                         "lunghezza"=>"40")
34
     *                                         )</pre>
35
     * <pre>array  $paricevuti[colonne_link] array contenente eventuali colonne che debbano essere
36
     *                                         rappresentate da un link. Non è da confondere con i
37
     *                                         parametri_link di datiPerGriglia, perché QUESTO array
38
     *                                         si può passare alla testata se si vuole avere una
39
     *                                         colonna link che prenda in automatico
40
     *                                         parametro id = al valore dell'id della tabella
41
     *                                         principale su cui si sta facendo la griglia</pre>
42
     * <pre>string $paricevuti[output]       : "index" se la testata serve per la griglia dell'index, "stampa" se la testata serve per la stampa</pre>
43
     *
44
     * @return array contentente i dati di testata per la griglia
45
     */
46 13
    public static function testataPerGriglia($paricevuti = array())
47
    {
48 13
        $nometabella = $paricevuti['nometabella'];
49 13
        $nomebundle = $paricevuti['nomebundle'];
50 13
        $doctrine = GrigliaParametriUtils::getDoctrineByEm($paricevuti);
51 13
        $doctrineficore = GrigliaParametriUtils::getDoctrineFiCoreByEm($paricevuti, $doctrine);
52
53 13
        $testata = array();
54 13
        $nomicolonne = array();
55 13
        $modellocolonne = array();
56 13
        $indice = 0;
57
58 13
        GrigliaColonneUtils::getColonne($nomicolonne, $modellocolonne, $indice, $paricevuti);
59
60
        /* Controlla se alcune colonne devono essere dei link */
61 13
        GrigliaExtraFunzioniUtils::getColonneLink($paricevuti, $modellocolonne);
62
63
        /* Controlla se ci sono dei campi extra da inserire in griglia
64
          (i campi extra non sono utilizzabili come filtri nella filtertoolbar della griglia) */
65 13
        GrigliaCampiExtraUtils::getCampiExtraTestataPerGriglia($paricevuti, $indice, $nomicolonne, $modellocolonne);
66
67 13
        GrigliaUtils::getOpzioniTabella($doctrineficore, $nometabella, $testata);
68
69 13
        GrigliaUtils::getPermessiTabella($paricevuti, $testata);
70
71 13
        $testata['nomicolonne'] = GrigliaUtils::getNomiColonne($nomicolonne);
72 13
        $testata['modellocolonne'] = GrigliaUtils::getModelloColonne($modellocolonne);
73
74 13
        $testata['tabella'] = $nometabella;
75 13
        $testata['nomebundle'] = $nomebundle;
76 13
        $testata['output'] = GrigliaParametriUtils::getOuputType($paricevuti);
77
        
78 13
        $response = new GridTestata($testata);
79 13
        return $response->getResponse();
80
    }
81
82
    /**
83
     * Questa funzione è compatibile con jqGrid e risponde con un formato JSON contenente
84
     * i dati di risposta sulla base dei parametri passati.
85
     *
86
     * @param array  $parametri
87
     * <pre>object $parametri["request"]        oggetto che contiene il POST passato alla griglia</pre>
88
     * <pre>string $parametri["nometabella"]   Nome della tabella</pre>
89
     * <pre>array  $parametri["tabellej"]       array contenente tutte le tabelle per le quali richiedere
90
     *                                           la join a partire da $paricevuti[nometabella]</pre>
91
     * <pre>array  $parametri["escludere"]      array contenente tutti i campi che non devono essere restituiti</pre>
92
     * <pre>bool   $parametri["nospan"]         se true non imposta limit e offset</pre>
93
     * <pre>array  $parametri["parametri_link"] array contenente le colonne che devono essere rappresentate
94
     *                                           come dei link e relativi parametri per comporre l'href.
95
     *                                           Da non confondere con colonne_link che si passa a
96
     *                                           testataPerGriglia, perchè QUESTO array genera un
97
     *                                           tag <href> interno alla colonna per il quale si
98
     *                                           possono specificare le parti che lo compongono</pre>
99
     * <pre>array  $parametri["decodifiche"]    = array contenente eventuali decodifiche dei valori di
100
     *                                           una colonna che non può essere tradotta con una join
101
     *                                           ad una tabella</pre>
102
     * <pre>string $parametri["output"]         : "index" se i dati servono per la griglia dell'index, "stampa" se i dati servono per la stampa</pre>
103
     *
104
     * @return JSON con i dati richiesti
0 ignored issues
show
Bug introduced by
The type Fi\CoreBundle\Controller\JSON was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
105
     */
106 1
    public static function datiPerGriglia($parametri = array())
107
    {
108 1
        $request = $parametri['request'];
109 1
        $doctrine = GrigliaParametriUtils::getDoctrineByEm($parametri);
110 1
        $bundle = $parametri['nomebundle'];
111 1
        $nometabella = $parametri['nometabella'];
112
        /* qui */
113 1
        $tabellej = GrigliaDatiUtils::getTabellejNormalizzate($parametri);
114
115 1
        $precondizioni = GrigliaDatiUtils::getDatiPrecondizioni($parametri);
116
117 1
        $precondizioniAvanzate = GrigliaDatiUtils::getDatiPrecondizioniAvanzate($parametri);
118
119 1
        $campiextra = GrigliaDatiUtils::getDatiCampiExtra($parametri);
120
        /* inserisco i filtri passati in un vettore */
121
122 1
        $filtri = json_decode($request->get('filters'), true);
123
        /* inserisco i parametri che sono passati nella $request all'interno di
124
          apposite variabili in che pagina siamo */
125
        /* direzione dell'ordinamento */
126 1
        $sord = $request->get('sord'); // get the direction if(!$sidx) $sidx =1;
0 ignored issues
show
Unused Code Comprehensibility introduced by
45% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
127 1
        $page = $request->get('page'); // get the requested page
128
        /* quante righe restituire (in caso di nospan = false) */
129 1
        $limit = $request->get('rows'); // get how many rows we want to have into the grid
130
        /* su quale campo fare l'ordinamento */
131 1
        $sidx = $request->get('sidx'); // get index row - i.e. user click to sort
132 1
        GrigliaDatiUtils::getDatiOrdinamento($sidx, $nometabella);
133
        /* inizia la query */
134 1
        $entityName = $bundle . ':' . $nometabella;
135 1
        $q = $doctrine->createQueryBuilder();
136 1
        $q->select($nometabella)
137 1
                ->from($entityName, $nometabella);
138
139
        /* scorre le tabelle collegate e crea la leftjoin usando come alias il nome stesso della tabella */
140 1
        if (isset($tabellej)) {
141 1
            GrigliaDatiUtils::setTabelleJoin($q, array('tabellej' => $tabellej, 'nometabella' => $nometabella));
142 1
        }
143
144
        /* dal filtro prende il tipo di operatore (AND o OR sono i due fin qui gestiti) */
145 1
        $tipof = $filtri['groupOp'];
146
        /* prende un vettore con tutte le ricerche */
147 1
        $regole = $filtri['rules'];
148
149 1
        GrigliaUtils::init();
150
151
        /* se ci sono delle precondizioni le imposta qui */
152 1
        $primo = true;
153 1
        if ($precondizioni) {
154
            GrigliaDatiPrecondizioniUtils::setPrecondizioni($q, $primo, array('precondizioni' => $precondizioni));
155
        }
156
157
        /* se ci sono delle precondizioni avanzate le imposta qui */
158 1
        if ($precondizioniAvanzate) {
159 1
            GrigliaDatiPrecondizioniUtils::setPrecondizioniAvanzate(
160 1
                $q,
161 1
                $primo,
162 1
                array('precondizioniAvanzate' => $precondizioniAvanzate,
163 1
                'doctrine' => $doctrine,
164 1
                'nometabella' => $nometabella,
165 1
                'entityName' => $entityName,
166 1
                'bundle' => $bundle,)
167 1
            );
168 1
        }
169
        /* scorro ogni singola regola */
170 1
        if (isset($regole)) {
171 1
            GrigliaRegoleUtils::setRegole(
172 1
                $q,
173 1
                $primo,
174
                array(
175 1
                'regole' => $regole,
176 1
                'doctrine' => $doctrine,
177 1
                'nometabella' => $nometabella,
178 1
                'entityName' => $entityName,
179 1
                'bundle' => $bundle,
180 1
                'tipof' => $tipof,
181
                    )
182 1
            );
183 1
        }
184 1
        $quanti = 0;
185 1
        GrigliaDatiMultiUtils::prepareQuery($parametri, $q, $sidx, $sord, $page, $limit, $quanti);
186
187 1
        $total_pages = GrigliaDatiMultiUtils::getTotalPages($quanti, $limit);
188
189
        /* imposta in $vettorerisposta la risposta strutturata per essere compresa da jqgrid */
190 1
        $vettorerisposta = array();
191 1
        $vettorerisposta['page'] = $page;
192 1
        $vettorerisposta['total'] = $total_pages;
193 1
        $vettorerisposta['records'] = $quanti;
194 1
        $vettorerisposta['filtri'] = $filtri;
195 1
        $indice = 0;
196
197
198
199 1
        $escludere = GrigliaParametriUtils::getDatiEscludere($parametri);
200 1
        $escludereutente = GrigliaParametriUtils::getDatiEscludereDaTabella($parametri);
201 1
        $ordinecolonne = GrigliaDatiUtils::getDatiOrdineColonne($parametri);
202 1
        $decodifiche = GrigliaDatiUtils::getDatiDecodifiche($parametri);
203
204 1
        $parametri["escludere"] = $escludere;
205 1
        $parametri["escludereutente"] = $escludereutente;
206 1
        $parametri["ordinecolonne"] = $ordinecolonne;
207 1
        $parametri["decodifiche"] = $decodifiche;
208 1
        $parametri["tabellej"] = $tabellej;
209
210
211
        /* Si scorrono tutti i records della query */
212 1
        foreach ($q as $singolo) {
213
            /* Si scorrono tutti i campi del record */
214 1
            $vettoreriga = array();
215 1
            $indicecolonna = 0;
216 1
            foreach ($singolo as $nomecampo => $singolocampo) {
217 1
                GrigliaDatiMultiUtils::buildDatiGriglia(
218 1
                    $parametri,
219 1
                    $vettoreriga,
220 1
                    $singolo,
221 1
                    $nomecampo,
222 1
                    $indice,
223 1
                    $indicecolonna,
224
                    $singolocampo
225 1
                );
226 1
            }
227
228 1
            GrigliaCampiExtraUtils::getCampiExtraDatiPerGriglia($campiextra, $vettoreriga, $doctrine, $entityName, $singolo);
229
230 1
            GrigliaDatiMultiUtils::buildRowGriglia($singolo, $vettoreriga, $vettorerisposta);
231 1
        }
232 1
        $response = new GridDati($vettorerisposta);
233 1
        return $response->getResponse();
234
    }
235
}
236