Segment::where()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
3
namespace Devhelp\Piwik\Api\Param\Segment;
4
5
use Devhelp\Piwik\Api\Param\Segment\Operator\Operator;
6
7
/**
8
 * Represents piwik segment value. Can be used to build
9
 * valid segment query by adding segment assertions
10
 */
11
class Segment
12
{
13
    private $queryParts = array();
14
15
    /**
16
     * builds the query and returns it as a string
17
     *
18
     * @return string
19
     */
20
    public function getQuery()
21
    {
22
        $queryParts = array_map(function ($value) {
23
            return ($value instanceof Operator) ? $value->expression() : $value;
24
        }, $this->queryParts);
25
26
        return implode('', $queryParts);
27
    }
28
29
    /**
30
     * starts segment query with operator
31
     *
32
     * @param Operator $operator
33
     * @return self
34
     */
35
    public function where(Operator $operator)
36
    {
37
        $this->queryParts = array();
38
        $this->queryParts[] = $operator;
39
40
        return $this;
41
    }
42
43
    /**
44
     * adds new operator using with AND. Starts new segment query if was not started yet
45
     *
46
     * @param Operator $operator
47
     * @return self
48
     */
49
    public function andWhere(Operator $operator)
50
    {
51
        return $this->append($operator, ';');
52
    }
53
54
    /**
55
     * adds new operator using with OR. Starts new segment query if was not started yet
56
     *
57
     * @param Operator $operator
58
     * @return self
59
     */
60
    public function orWhere(Operator $operator)
61
    {
62
        return $this->append($operator, ',');
63
    }
64
65
    private function append(Operator $operator, $sign)
66
    {
67
        if ($this->queryParts) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $this->queryParts of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
68
            $this->queryParts[] = $sign;
69
        }
70
71
        $this->queryParts[] = $operator;
72
73
        return $this;
74
    }
75
}
76