Skip to content

Commit dc457a8

Browse files
authored
Merge pull request #14 from JayBizzle/patch-1
Allow `and_group` and `or_group` dimension filters
2 parents 2796223 + 3e61fe1 commit dc457a8

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

src/Traits/FilterByDimensionTrait.php

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Google\Analytics\Data\V1beta\Filter\InListFilter;
77
use Google\Analytics\Data\V1beta\Filter\StringFilter;
88
use Google\Analytics\Data\V1beta\FilterExpression;
9+
use Google\Analytics\Data\V1beta\FilterExpressionList;
910

1011
trait FilterByDimensionTrait
1112
{
@@ -56,4 +57,63 @@ public function whereDimensionIn(string $name, array $values, bool $caseSensitiv
5657

5758
return $this;
5859
}
60+
61+
/**
62+
* Apply where dimension filter using 'and_group'.
63+
*
64+
* @param array $dimensions
65+
* @return $this
66+
*/
67+
public function whereAndGroupDimensions($dimensions): self
68+
{
69+
$this->dimensionFilter = (new FilterExpression())->setAndGroup(
70+
(new FilterExpressionList)
71+
->setExpressions(
72+
$this->createDimensionGroup($dimensions)
73+
)
74+
);
75+
76+
return $this;
77+
}
78+
79+
/**
80+
* Apply where dimension filter using 'or_group'.
81+
*
82+
* @param array $dimensions
83+
* @return $this
84+
*/
85+
public function whereOrGroupDimensions($dimensions): self
86+
{
87+
$this->dimensionFilter = (new FilterExpression())->setOrGroup(
88+
(new FilterExpressionList)
89+
->setExpressions(
90+
$this->createDimensionGroup($dimensions)
91+
)
92+
);
93+
94+
return $this;
95+
}
96+
97+
/**
98+
* Create an array of dimension filters.
99+
*
100+
* @param array $dimensions
101+
* @return void
102+
*/
103+
protected function createDimensionGroup($dimensions): array
104+
{
105+
$filterExpressionList = [];
106+
107+
foreach ($dimensions as $dimension) {
108+
$stringFilter = (new StringFilter())->setCaseSensitive($dimension[3] ?? false)
109+
->setMatchType($dimension[1])
110+
->setValue($dimension[2]);
111+
112+
$filter = (new Filter())->setStringFilter($stringFilter)->setFieldName($dimension[0]);
113+
114+
$filterExpressionList[] = (new FilterExpression())->setFilter($filter);
115+
}
116+
117+
return $filterExpressionList;
118+
}
59119
}

0 commit comments

Comments
 (0)