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) { |
|
|
|
|
68
|
|
|
$this->queryParts[] = $sign; |
69
|
|
|
} |
70
|
|
|
|
71
|
|
|
$this->queryParts[] = $operator; |
72
|
|
|
|
73
|
|
|
return $this; |
74
|
|
|
} |
75
|
|
|
} |
76
|
|
|
|
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.