GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#4)
by
unknown
01:03
created

Builder::getResponse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of vaibhavpandeyvpz/doctrine-datatables package.
5
 *
6
 * (c) Vaibhav Pandey <[email protected]>
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.md.
10
 */
11
12
namespace Doctrine\DataTables;
13
14
use Doctrine\DBAL\Query\QueryBuilder;
15
use Doctrine\ORM\QueryBuilder as ORMQueryBuilder;
16
17
/**
18
 * Class Builder
19
 * @package Doctrine\DataTables
20
 */
21
class Builder {
22
23
    /**
24
     * @var array
25
     */
26
    protected $columnAliases = array();
27
28
    /**
29
     * @var string
30
     */
31
    protected $columnField = 'data'; // or 'name'
32
33
    /**
34
     * @var string
35
     */
36
    protected $indexColumn = '*';
37
38
    /**
39
     * @var QueryBuilder|ORMQueryBuilder
40
     */
41
    protected $queryBuilder;
42
43
    /**
44
     * @var array
45
     */
46
    protected $requestParams;
47
    
48
    /**
49
     * @var string
50
     */
51
    protected $searchDelimiter = false;
52
    
53
54
    /**
55
     * @return array
56
     */
57
    public function getData() {
58
        $query = $this->getFilteredQuery();
59
        $columns = &$this->requestParams['columns'];
60
        // Order
61
        if (array_key_exists('order', $this->requestParams)) {
62
            $order = &$this->requestParams['order'];
63
            foreach ($order as $sort) {
64
                $column = &$columns[intval($sort['column'])];
65
                if (array_key_exists($column[$this->columnField], $this->columnAliases)) {
66
                    $column[$this->columnField] = $this->columnAliases[$column[$this->columnField]];
67
                }
68
                $query->addOrderBy($column[$this->columnField], $sort['dir']);
69
            }
70
        }
71
        // Offset
72
        if (array_key_exists('start', $this->requestParams)) {
73
            $query->setFirstResult(intval($this->requestParams['start']));
74
        }
75
        // Limit
76
        if (array_key_exists('length', $this->requestParams)) {
77
            $length = intval($this->requestParams['length']);
78
            if ($length > 0) {
79
                $query->setMaxResults($length);
80
            }
81
        }
82
        // Fetch
83
        return $query instanceof ORMQueryBuilder ?
84
                $query->getQuery()->getScalarResult() : $query->execute()->fetchAll();
85
    }
86
87
    /**
88
     * @return QueryBuilder|ORMQueryBuilder
89
     */
90
    public function getFilteredQuery() {
91
        $query = clone $this->queryBuilder;
92
        $columns = &$this->requestParams['columns'];
93
        $c = count($columns);
94
        // Search
95
        if (array_key_exists('search', $this->requestParams)) {
96
            if ($value = trim($this->requestParams['search']['value'])) {
97
                
98
                if ($this->searchDelimiter !== false && strpos($value, $this->searchDelimiter) !== false) {
99
                    $index = 0;
100
                    $parts = explode($this->searchDelimiter, $value);
101
                    $partsAndX = $query->expr()->andX();
102
                    foreach ($parts as $part) {
103
104
                        $orX = $query->expr()->orX();
105
                        for ($i = 0; $i < $c; $i++) {
106
                            $column = &$columns[$i];
107
                            if ($column['searchable'] == 'true') {
108
                                if (array_key_exists($column[$this->columnField], $this->columnAliases)) {
109
                                    $column[$this->columnField] = $this->columnAliases[$column[$this->columnField]];
110
                                }
111
                                $orX->add($query->expr()->like($column[$this->columnField], ':search'.$index));
112
                            }
113
                        }
114
                        
115
                        $partsAndX->add($orX);
116
                        $query->setParameter('search'.$index, "%{$part}%");
117
                        $index++;
118
                    }
119
                    if ($partsAndX->count() >= 1) {
120
                        $query->andWhere($partsAndX);
121
                    }
122
                    
123
                } else {
124
                    $orX = $query->expr()->orX();
125
                    for ($i = 0; $i < $c; $i++) {
126
                        $column = &$columns[$i];
127
                        if ($column['searchable'] == 'true') {
128
                            if (array_key_exists($column[$this->columnField], $this->columnAliases)) {
129
                                $column[$this->columnField] = $this->columnAliases[$column[$this->columnField]];
130
                            }
131
                            $orX->add($query->expr()->like($column[$this->columnField], ':search'));
132
                        }
133
                    }
134
                    if ($orX->count() >= 1) {
135
                        $query->andWhere($orX)
136
                                ->setParameter('search', "%{$value}%");
137
                    }
138
                }
139
            }
140
        }
141
        // Filter
142
        
143
        for ($i = 0; $i < $c; $i++) {
144
            $column = &$columns[$i];
145
            $andX = $query->expr()->andX();
146
            if (($column['searchable'] == 'true') && ($value = trim($column['search']['value']))) {
147
                if (array_key_exists($column[$this->columnField], $this->columnAliases)) {
148
                    $column[$this->columnField] = $this->columnAliases[$column[$this->columnField]];
149
                }
150
                $operator = preg_match('~^\[(?<operator>[=!%<>]+)\].*$~', $value, $matches) ? $matches['operator'] : '=';
151
                switch ($operator) {
152
                    case '!=': // Not equals; usage: [!=]search_term
153
                        $andX->add($query->expr()->neq($column[$this->columnField], ":filter_{$i}"));
154
                        break;
155
                    case '%': // Like; usage: [%]search_term
156
                        $andX->add($query->expr()->like($column[$this->columnField], ":filter_{$i}"));
157
                        $value = "%{$value}%";
158
                        break;
159
                    case '<': // Less than; usage: [>]search_term
160
                        $andX->add($query->expr()->lt($column[$this->columnField], ":filter_{$i}"));
161
                        break;
162
                    case '>': // Greater than; usage: [<]search_term
163
                        $andX->add($query->expr()->gt($column[$this->columnField], ":filter_{$i}"));
164
                        break;
165
                    case '=': // Equals (default); usage: [=]search_term
0 ignored issues
show
Unused Code Comprehensibility introduced by
43% 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...
166
                    default:
167
                        $andX->add($query->expr()->eq($column[$this->columnField], ":filter_{$i}"));
168
                        break;
169
                }
170
                $query->setParameter("filter_{$i}", $value);
171
            }
172
            if ($andX->count() >= 1) {
173
                $query->andWhere($andX);
174
            }
175
        }
176
        // Done
177
        return $query;
178
    }
179
180
    /**
181
     * @return int
182
     */
183
    public function getRecordsFiltered() {
184
        $query = $this->getFilteredQuery();
185
        if ($query instanceof ORMQueryBuilder) {
186
            return $query->resetDQLPart('select')
187
                            ->select("COUNT({$this->indexColumn})")
188
                            ->getQuery()
189
                            ->getSingleScalarResult();
190
        } else {
191
            return $query->resetQueryPart('select')
192
                            ->select("COUNT({$this->indexColumn})")
193
                            ->execute()
194
                            ->fetchColumn(0);
195
        }
196
    }
197
198
    /**
199
     * @return int
200
     */
201
    public function getRecordsTotal() {
202
        $query = clone $this->queryBuilder;
203
        if ($query instanceof ORMQueryBuilder) {
204
            return $query->resetDQLPart('select')
205
                            ->select("COUNT({$this->indexColumn})")
206
                            ->getQuery()
207
                            ->getSingleScalarResult();
208
        } else {
209
            return $query->resetQueryPart('select')
210
                            ->select("COUNT({$this->indexColumn})")
211
                            ->execute()
212
                            ->fetchColumn(0);
213
        }
214
    }
215
216
    /**
217
     * @return array
218
     */
219
    public function getResponse() {
220
        return array(
221
            'data' => $this->getData(),
222
            'draw' => $this->requestParams['draw'],
223
            'recordsFiltered' => $this->getRecordsFiltered(),
224
            'recordsTotal' => $this->getRecordsTotal(),
225
        );
226
    }
227
228
    /**
229
     * @param string $indexColumn
230
     * @return static
231
     */
232
    public function withIndexColumn($indexColumn) {
233
        $this->indexColumn = $indexColumn;
234
        return $this;
235
    }
236
237
    /**
238
     * @param array $columnAliases
239
     * @return static
240
     */
241
    public function withColumnAliases($columnAliases) {
242
        $this->columnAliases = $columnAliases;
243
        return $this;
244
    }
245
246
    /**
247
     * @param string $columnField
248
     * @return static
249
     */
250
    public function withColumnField($columnField) {
251
        $this->columnField = $columnField;
252
        return $this;
253
    }
254
255
    /**
256
     * @param QueryBuilder|ORMQueryBuilder $queryBuilder
257
     * @return static
258
     */
259
    public function withQueryBuilder($queryBuilder) {
260
        $this->queryBuilder = $queryBuilder;
261
        return $this;
262
    }
263
264
    /**
265
     * @param array $requestParams
266
     * @return static
267
     */
268
    public function withRequestParams($requestParams) {
269
        $this->requestParams = $requestParams;
270
        return $this;
271
    }
272
    
273
    /**
274
     * @param string $delimiter
275
     * @return static
276
     */
277
    public function withSearchDelimiter($delimiter) {
278
        $this->searchDelimiter = $delimiter;
279
        return $this;
280
    }
281
282
}
283