Code Duplication    Length = 77-79 lines in 2 locations

system/modules/Db/objects/Mysql/Query.php 2 locations

@@ 189-267 (lines=79) @@
186
     * @param string $operation
187
     * @param string $concatenation
188
     */
189
    public function buildWhere($where = '', $value = '', $operation = '=', $concatenation = 'AND') {
190
        if (!is_array($where)) {
191
            if (empty($operation)) {
192
                $operation = '=';
193
            }
194
195
            if ($concatenation === false) {
196
                $concatenation = 'AND';
197
            } elseif ($concatenation === true) {
198
                $concatenation = '';
199
            }
200
201
            if ($this->whereString == '') {
202
                $this->whereString = ' WHERE ';
203
            }
204
205
            if (stristr($operation, 'IN') || stristr($operation, 'NOT IN')) {
206
                if (is_array($value)) {
207
                    $newValue = '';
208
                    foreach ($value as $item) {
209
                        if ($newValue) {
210
                            $newValue .= ',';
211
                        }
212
                        if (is_string($item)) {
213
                            $newValue .= '"' . $item . '"';
214
                        } else {
215
                            $newValue .= $item;
216
                        }
217
                    }
218
                    $value = '(' . $newValue . ')';
219
                } elseif (!preg_match('!\(!', $value) && !preg_match('![^0-9,\.\(\) ]!', $value)) {
220
                    $value = "({$value})";
221
                } elseif (preg_match('!\(!', $value) && preg_match('![^0-9,\.\(\) ]!', $value)) {
222
                    $value = "\"{$value}\"";
223
                }
224
            } elseif (!in_array($value, array('CURRENT_TIMESTAMP', 'NULL'))) {
225
                $this->params[] = $value;
226
                $value = "?";
227
            }
228
229
            if (substr($this->whereString, -1, 1) == '(' || substr($this->whereString, -2, 2) == 'E ') {
230
                $this->whereString .= " {$where} {$operation} {$value} ";
231
            } else {
232
                $this->whereString .= "{$concatenation} {$where} {$operation} {$value} ";
233
            }
234
        } else {
235
            $i = -1;
236
            while (isset($where[++$i])) {
237
                $item = $where[$i];
238
                if (isset($where[$i + 1]) && !isset($where[$i - 1]) && is_array($where[$i])) {
239
                    if ($this->whereString != null && substr($this->whereString, -1, 1) != '(' && $this->whereString != 'WHERE ') {
240
                        if (!isset($item[3])) {
241
                            $concatenation = 'AND';
242
                        } else {
243
                            $concatenation = $item[3];
244
                        }
245
246
                        $this->whereString .= "{$concatenation} ";
247
                    }
248
249
                    if ($this->whereString != '') {
250
                        $this->whereString .= '(';
251
                    } else {
252
                        $this->whereString = 'WHERE (';
253
                    }
254
                }
255
256
                if (!is_array($item)) {
257
                    call_user_func_array(array($this, 'buildWhere'), $where);
258
                    break;
259
                } else {
260
                    $this->buildWhere($item);
261
                }
262
                if (!isset($where[$i + 1]) && isset($where[$i - 1])) {
263
                    $this->whereString .= ') ';
264
                }
265
            }
266
        }
267
    }
268
269
    /**
270
     * Build having string
@@ 277-353 (lines=77) @@
274
     * @param string $operation
275
     * @param string $concatenation
276
     */
277
    public function buildHaving($where = '', $value = '', $operation = '=', $concatenation = 'AND') {
278
        if (!is_array($where)) {
279
            if (empty($operation)) {
280
                $operation = '=';
281
            }
282
            if ($concatenation === false) {
283
                $concatenation = 'AND';
284
            } elseif ($concatenation === true) {
285
                $concatenation = '';
286
            }
287
288
            if ($this->havingString == '') {
289
                $this->havingString = ' HAVING ';
290
            }
291
292
            if (stristr($operation, 'IN') || stristr($operation, 'NOT IN')) {
293
                if (is_array($value)) {
294
                    $newValue = '';
295
                    foreach ($value as $item) {
296
                        if ($newValue) {
297
                            $newValue .= ',';
298
                        }
299
                        if (is_string($item)) {
300
                            $newValue .= '"' . $item . '"';
301
                        } else {
302
                            $newValue .= $item;
303
                        }
304
                    }
305
                    $value = '(' . $newValue . ')';
306
                } elseif (!preg_match('!\(!', $value) && !preg_match('![^0-9,\.\(\) ]!', $value)) {
307
                    $value = "({$value})";
308
                } elseif (preg_match('!\(!', $value) && preg_match('![^0-9,\.\(\) ]!', $value)) {
309
                    $value = "\"{$value}\"";
310
                }
311
            } elseif (!in_array($value, array('CURRENT_TIMESTAMP', 'NULL'))) {
312
                $this->params[] = $value;
313
                $value = "?";
314
            }
315
            if (substr($this->havingString, -1, 1) == '(' || substr($this->havingString, -2, 2) == 'G ') {
316
                $this->havingString .= " {$where} {$operation} {$value} ";
317
            } else {
318
                $this->havingString .= "{$concatenation} {$where} {$operation} {$value} ";
319
            }
320
        } else {
321
            $i = -1;
322
            while (isset($where[++$i])) {
323
                $item = $where[$i];
324
                if (isset($where[$i + 1]) && !isset($where[$i - 1]) && is_array($where[$i])) {
325
                    if ($this->havingString != null && substr($this->havingString, -1, 1) != '(' && $this->havingString != 'HAVING ') {
326
                        if (!isset($item[3])) {
327
                            $concatenation = 'AND';
328
                        } else {
329
                            $concatenation = $item[3];
330
                        }
331
332
                        $this->havingString .= "{$concatenation} ";
333
                    }
334
335
                    if ($this->havingString != '') {
336
                        $this->havingString .= '(';
337
                    } else {
338
                        $this->havingString = 'HAVING (';
339
                    }
340
                }
341
342
                if (!is_array($item)) {
343
                    call_user_func_array(array($this, 'buildHaving'), $where);
344
                    break;
345
                } else {
346
                    $this->buildHaving($item);
347
                }
348
                if (!isset($where[$i + 1]) && isset($where[$i - 1])) {
349
                    $this->havingString .= ') ';
350
                }
351
            }
352
        }
353
    }
354
355
    public function buildQuery() {
356
        $query = $this->operation;