Passed
Push — master ( 2c321e...f12c68 )
by Henri
01:20
created

DataTrait   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 133
Duplicated Lines 0 %

Importance

Changes 9
Bugs 0 Features 2
Metric Value
eloc 74
c 9
b 0
f 2
dl 0
loc 133
rs 10
wmc 24
1
<?php
2
3
namespace HnrAzevedo\Datamanager;
4
5
trait DataTrait{
6
    use CrudTrait, CheckTrait;
7
8
    protected ?string $table = null;
9
    protected ?string $primary = null;
10
    protected array $data = [];
11
    protected bool $full = false;
12
13
    protected array $result = [];
14
    protected ?string $clause = null;
15
16
    protected ?string $order = null;
17
    protected ?string $limit = null;
18
    protected ?int $offset = null;
19
    protected array $excepts = [];
20
    protected int $count = 0;
21
    protected array $select = [];
22
    protected ?string $query = null;
23
24
    protected function mountRemove(): array
25
    {
26
        $return = ['data' => '', 'where' => ''];
27
        $c = -1;
28
        foreach($this->where as $clause => $condition){
29
            $c++;
30
            if(strlen($clause) === 0){
31
                $return['where'] .= " {$clause} {$condition[0]} {$condition[1]} :q_{$condition[0]}{$c} ";
32
                $return['data'] .= "q_{$condition[0]}={$condition[2]}{$c}&";
33
                continue;
34
            }
35
                
36
            foreach($condition as $value){
37
                $return['where'] .= " {$clause} {$value[0]} {$value[1]} :q_{$value[0]}{$c} ";
38
                $return['data'] .= "q_{$value[0]}={$value[2]}{$c}&";
39
            }
40
        }
41
        return $return;
42
    }   
43
44
    protected function mountSave(): array
45
    {
46
        $return = ['data' => []];
47
48
        foreach ($this->data as $key => $value) {
49
            if($this->upgradeable($key) && !$this->isIncremented($key)){
50
                $return['data'][$key] = $this->data[$key]['value'];
51
            }
52
        }
53
54
        return $return;
55
    }
56
57
    private function mountWheres(array $value, string $key, int $c): array
58
    {
59
        $return = ['where' => '', 'data' => []];
60
        for($i = 0; $i < count($value); $i++){
61
                
62
            if(!is_array($value[$i][2])){
63
                $return['where'] .= " {$key} {$value[$i][0]} {$value[$i][1]} :q_{$value[$i][0]}{$c}{$i} ";
64
                $return['data']["q_{$value[$i][0]}{$c}{$i}"] = $value[$i][2];
65
                continue;
66
            }
67
68
            $return['where'] .= " {$key} {$value[$i][0]} {$value[$i][1]} (";
69
70
            foreach($value[$i][2] as $v => $valu){
71
                $return['where'] .= " :q_{$value[$i][0]}{$c}{$i}_{$v},";
72
                $return['data']["q_{$value[$i][0]}{$c}{$i}_{$v}"] = $valu;
73
            }
74
75
            $return['where'] = substr($return['where'],0,-1) .') ';
76
        }
77
        return $return;
78
    }
79
80
    protected function mountWhereExec(): array
81
    {
82
        $return = ['where' => '', 'data' => []];
83
        $c = -1;
84
        foreach ($this->where as $key => $value) {
85
            $c++;
86
            $key = (!$key) ? '' : " {$key} ";
87
88
            if(!is_array($value[0])){
89
                $return['where'] .= " {$key} {$value[0]} {$value[1]} :q_{$value[0]}{$c} ";
90
                $return['data']["q_{$value[0]}{$c}"] = $value[2];
91
                continue;
92
            }
93
94
            $altReturn = $this->mountWheres($value, $key, $c);
95
            $return['where'] .= $altReturn['where'];
96
            $return['data'] = array_merge($return['data'],$altReturn['data']);
97
            
98
        }
99
        return $return;
100
    }
101
102
    protected function mountBetweenExec(): array
103
    {
104
        $return = ['where' => '', 'data' => []];
105
106
        $c = -1;
107
        foreach($this->between as $field => $value){
108
            $c++;
109
            $condition = (count(explode(' ',$field)) > 2) ? ' '.explode(' ',$field)[0].' ' : ' AND ';
110
            $field = str_replace(['AND','OR',' '],'',$field);
111
            $return['where'] .= " {$condition} {$field} BETWEEN :q_1{$field}{$c} AND :q_2{$field}{$c} ";
112
            $return['data'] = [
113
                "q_1{$field}{$c}" => (date_format( date_create_from_format(DATAMANAGER_CONFIG['dateformat'],$value[0]) , 'Y-m-d')),
114
                "q_2{$field}{$c}" => (date_format( date_create_from_format(DATAMANAGER_CONFIG['dateformat'],$value[1]) , 'Y-m-d'))
115
            ];
116
        }
117
        return $return;
118
    }
119
120
    protected function mountSelect()
121
    {
122
        $select = implode(',',array_keys($this->select));
123
124
        $this->query = str_replace('*', $select,$this->query);
125
    }
126
127
    protected function mountLimit()
128
    {
129
        if(!is_null($this->limit)){
130
            $this->query .= " LIMIT {$this->limit}";
131
        }
132
    }
133
134
    protected function mountOffset()
135
    {
136
        if(!is_null($this->offset)){
137
            $this->query .= " OFFSET {$this->offset}";
138
        }
139
    }
140
141
}
142