GrigliaDatiPrecondizioniUtils::setPrecondizioni()   C
last analyzed

Complexity

Conditions 11
Paths 36

Size

Total Lines 73
Code Lines 57

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 51
CRAP Score 11.0008

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 57
c 1
b 0
f 0
dl 0
loc 73
ccs 51
cts 52
cp 0.9808
rs 6.7915
cc 11
nc 36
nop 2
crap 11.0008

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Fi\CoreBundle\Utils;
4
5
use Fi\CoreBundle\Controller\FiUtilita;
6
7
class GrigliaDatiPrecondizioniUtils
8
{
9
10 6
    public static function setPrecondizioni(&$q, $parametri = array())
11
    {
12 6
        $request = $parametri['request'];
13 6
        $precondizioniAvanzate = GrigliaDatiPrecondizioniUtils::mergePrecondizioni($parametri);
14 6
        $doctrine = GrigliaParametriUtils::getDoctrineByEm($parametri);
15 6
        $bundle = $parametri['nomebundle'];
16 6
        $nometabella = $parametri['nometabella'];
17 6
        $entityName = $bundle . ':' . $nometabella;
18 6
        $regoleprecondizioni = array();
19 6
        $filtri = \json_decode($request->get('filters'), true);
20
        /* dal filtro prende il tipo di operatore (AND o OR sono i due fin qui gestiti) */
21 6
        $operatorelogicofiltrigriglia = isset($filtri['groupOp']) ? $filtri['groupOp'] : '';
22
        /* prende un vettore con tutte le ricerche */
23 6
        $regolegriglia = isset($filtri['rules']) ? $filtri['rules'] : array();
24 6
        foreach ($precondizioniAvanzate as $elem) {
25 5
            $nometabellaprecondizione = '';
26 5
            $nomecampoprecondizione = '';
27 5
            $valorecampoprecondizione = '';
28 5
            $operatoreprecondizione = '=';
29 5
            $operatorelogicoprecondizione = '';
30 5
            foreach ($elem as $keypre => $valuepre) {
31 5
                switch ($keypre) {
32 5
                    case 'nometabella':
33 5
                        $nometabellaprecondizione = $valuepre;
34 5
                        break;
35 5
                    case 'nomecampo':
36 5
                        $nomecampoprecondizione = $valuepre;
37 5
                        break;
38 5
                    case 'operatore':
39
                        /*'LIKE' => 'bw', 'NOT LIKE' => 'bn', 'LIKE' => 'eq', 'NOT LIKE' => 'en',*/
40 5
                        $array_operatori = array('=' => 'eq', '<>' => 'ne', '<' => 'lt',
41
                            '<=' => 'le', '>' => 'gt', '>=' => 'ge',
42
                            'IN' => 'in', 'NOT IN' => 'ni',
43
                            'LIKE' => 'cn', 'NOT LIKE' => 'nc', 'IS' => 'nu', 'IS NOT' => 'nn');
44 5
                        $operatoreprecondizione = $array_operatori[strtoupper($valuepre)];
45 5
                        break;
46 5
                    case 'valorecampo':
47 5
                        if (is_array($valuepre)) {
48 1
                            $type = $doctrine->getClassMetadata($entityName)->getFieldMapping($nomecampoprecondizione);
49 1
                            $valorecampoprecondizione = self::elaboravalorecampo($type, $valuepre);
50
                        } else {
51 5
                            $valorecampoprecondizione = $valuepre;
52
                        }
53 5
                        break;
54 1
                    case 'operatorelogico':
55 1
                        $operatorelogicoprecondizione = strtoupper($valuepre);
56 1
                        break;
57
                    default:
58
                        break;
59
                }
60
            }
61
62 5
            $regoleprecondizioni[] = array(
63 5
                'field' => sprintf("%s.%s", $nometabellaprecondizione, $nomecampoprecondizione),
64 5
                'op' => $operatoreprecondizione,
65 5
                'data' => $valorecampoprecondizione,
66 5
                'typof' => $operatorelogicoprecondizione);
67
        }
68
69 6
        $regolefiltri = array_merge($regoleprecondizioni, $regolegriglia);
70
71 6
        self::setOperatoreLogicoGlobale($regolefiltri, $operatorelogicofiltrigriglia);
72
73
        /**/
74
        $regole = array(
75 6
            'regole' => $regolefiltri,
76 6
            'doctrine' => $doctrine,
77 6
            'nometabella' => $nometabella,
78 6
            'entityName' => $entityName,
79 6
            'bundle' => $bundle
80
        );
81
82 6
        GrigliaRegoleUtils::setRegole($q, $regole);
83 6
    }
84
85 6
    private static function setOperatoreLogicoGlobale(&$regolefiltri, $operatorelogicofiltrigriglia)
86
    {
87 6
        $operatore = 'AND';
88 6
        if ($operatorelogicofiltrigriglia == 'OR') {
89 1
            $operatore = 'OR';
90
        } else {
91
            //Se c'è anche una sola condizione in OR, diventano tutte in OR
92 6
            foreach (array_keys($regolefiltri) as $key) {
93 5
                if (isset($regolefiltri[$key]["typof"]) && $regolefiltri[$key]["typof"] == 'OR') {
94 1
                    $operatore = 'OR';
95 1
                    break;
96
                }
97
            }
98
        }
99 6
        foreach (array_keys($regolefiltri) as $key) {
100 5
            $regolefiltri[$key]["typof"] = $operatore;
101
        }
102 6
    }
103
104 1
    private static function elaboravalorecampo($type, $valuepre)
105
    {
106 1
        $tipo = $type['type'];
107 1
        if ($tipo && ($tipo == 'date' || $tipo == 'datetime')) {
108
            GrigliaUtils::setVettoriPerData();
109
            foreach ($valuepre as $chiave => $valore) {
110
                $valuepre[$chiave] = FiUtilita::data2db($valore);
111
            }
112
            return implode(', ', $valuepre);
113 1
        } elseif ($tipo && $tipo == 'string') {
114 1
            GrigliaUtils::setVettoriPerStringa();
115 1
            foreach ($valuepre as $chiave => $valore) {
116 1
                $valuepre[$chiave] = strtolower($valore);
117
            }
118 1
            return implode(', ', $valuepre);
119
        } else {
120 1
            GrigliaUtils::setVettoriPerNumero();
121 1
            return implode(', ', $valuepre);
122
        }
123
    }
124
125 6
    public static function mergePrecondizioni($parametri)
126
    {
127 6
        $precondizioni = GrigliaDatiUtils::getDatiPrecondizioni($parametri);
128
129 6
        $precondizioniAvanzate = GrigliaDatiUtils::getDatiPrecondizioniAvanzate($parametri);
130
131 6
        foreach ($precondizioni as $campoprecondizione => $valoreprecondizione) {
132 2
            if (strpos($campoprecondizione, ".") === false) {
133 1
                $nometabellaprecondizione = $parametri['nometabella'];
134 1
                $nomecampoprecondizione = $campoprecondizione;
135
            } else {
136 1
                $nometabellaprecondizione = substr($campoprecondizione, 0, strrpos($campoprecondizione, '.'));
137 1
                $nomecampoprecondizione = substr($campoprecondizione, strrpos($campoprecondizione, '.') + 1);
138
            }
139 2
            $precondizioniAvanzate[] = array('nometabella' => $nometabellaprecondizione,
140 2
                'nomecampo' => $nomecampoprecondizione,
141 2
                'operatore' => '=',
142 2
                'valorecampo' => $valoreprecondizione);
143
        }
144 6
        return $precondizioniAvanzate;
145
    }
146
}
147