Skip to content

Commit dbb5e12

Browse files
authored
Merge pull request #75 from SilverSnake83/master
feat(filterModifier): Add compatibility of easyFilter in FilterModifier
2 parents 95e6d3b + fb76baf commit dbb5e12

File tree

2 files changed

+42
-44
lines changed

2 files changed

+42
-44
lines changed

src/Service/Request/QueryModifier/Modifier/FilterModifier.php

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Eukles\Service\Request\QueryModifier\Modifier;
1313

14+
use Eukles\Service\QueryModifier\Easy\Builder\Filter;
15+
use Eukles\Service\QueryModifier\Easy\Modifier;
1416
use Eukles\Service\QueryModifier\Modifier\Exception\ModifierException;
1517
use Eukles\Service\Request\QueryModifier\Modifier\Base\ModifierBase;
1618
use Propel\Runtime\ActiveQuery\Criteria;
@@ -40,6 +42,7 @@ class FilterModifier extends ModifierBase
4042
Criteria::GREATER_THAN,
4143
Criteria::LESS_EQUAL,
4244
Criteria::LESS_THAN,
45+
Criteria::IN,
4346
Criteria::NOT_IN,
4447
Criteria::LIKE,
4548
Criteria::NOT_LIKE,
@@ -79,40 +82,39 @@ public function getName()
7982
}
8083

8184
/**
82-
* @inheritdoc
85+
* Apply the filter to the ModelQuery
86+
*
87+
* @param \Propel\Runtime\ActiveQuery\ModelCriteria $query
8388
*/
84-
protected function applyModifier(ModelCriteria $query, $clause, array $modifier)
89+
public function apply(ModelCriteria $query)
8590
{
86-
# Apply filter on the last related model query
87-
if ($modifier['value'] === null) {
88-
if (!array_key_exists('operator', $modifier) || $modifier['operator'] === Criteria::EQUAL) {
89-
$modifier['operator'] = Criteria::ISNULL;
90-
} else {
91-
$modifier['operator'] = Criteria::ISNOTNULL;
92-
}
91+
$modifierClass = new Modifier($query);
92+
if (!empty($this->modifiers)) {
93+
foreach ($this->modifiers as $modifier) {
94+
if ($this->hasAllRequiredData($modifier)) {
95+
$operator = null;
96+
if ($modifier['value'] === null) {
97+
if (!array_key_exists('operator', $modifier) || $modifier['operator'] === Criteria::EQUAL) {
98+
$operator = Criteria::ISNULL;
99+
} else {
100+
$operator = Criteria::ISNOTNULL;
101+
}
102+
}
93103

94-
$query->where(
95-
sprintf(
96-
'%s %s',
97-
$clause,
98-
(array_key_exists('operator', $modifier) ? $modifier['operator'] : Criteria::EQUAL)
99-
),
100-
$modifier['value'],
101-
\PDO::PARAM_STR
102-
);
103-
} else {
104-
$query->where(
105-
sprintf(
106-
'%s %s ?',
107-
$clause,
108-
(array_key_exists('operator', $modifier) ? $modifier['operator'] : Criteria::EQUAL)
109-
),
110-
$modifier['value'],
111-
\PDO::PARAM_STR
112-
);
104+
$modifierClass->filterBy($modifier['property'], $modifier['value'], $operator);
105+
106+
}
107+
}
113108
}
114109
}
115110

111+
/**
112+
* @inheritdoc
113+
*/
114+
protected function applyModifier(ModelCriteria $query, $clause, array $modifier)
115+
{
116+
}
117+
116118
/**
117119
* Has the modifier all required data to be applied?
118120
*

tests/Service/Request/QueryModifier/Modifier/FilterModifierTest.php

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ModifierTestQuery;
1818
use PHPUnit\Framework\TestCase;
1919
use Propel\Generator\Util\QuickBuilder;
20+
use Propel\Runtime\ActiveQuery\Criteria;
2021
use Propel\Runtime\ActiveQuery\Criterion\RawModelCriterion;
2122
use Propel\Runtime\ActiveQuery\ModelCriteria;
2223
use Test\Eukles\Request;
@@ -67,11 +68,12 @@ public function testApplyOnRelation()
6768
/** @var ModelCriteria $mc */
6869
$mc = new ModifierTestQuery();
6970
$m->apply($mc);
70-
$this->assertArrayHasKey('.RelationTest.Name = ?', $mc->getMap());
71-
$criterion = $mc->getMap()['.RelationTest.Name = ?'];
71+
$this->assertArrayHasKey('_relationTest.name', $mc->getMap());
72+
$criterion = $mc->getMap()['_relationTest.name'];
7273
$this->assertEquals('bob', $criterion->getValue());
73-
$this->assertNull($criterion->getComparison());
74-
$this->assertEquals('RelationTest.Name = ?', $criterion->getColumn());
74+
$this->assertEquals('=', $criterion->getComparison());
75+
$this->assertEquals('_relationTest', $criterion->getTable());
76+
$this->assertEquals('name', $criterion->getColumn());
7577
}
7678

7779
public function testApplyWithValue()
@@ -89,8 +91,7 @@ public function testApplyWithValue()
8991
/** @var RawModelCriterion $criterion */
9092
$criterion = $mc->getMap()['modifier_test.name'];
9193
$this->assertEquals('test', $criterion->getValue());
92-
$this->assertNull($criterion->getComparison());
93-
$this->assertEquals('modifier_test.name = ?', $criterion->getClause());
94+
$this->assertEquals('=', $criterion->getComparison());
9495
}
9596

9697
public function testApplyWithValueAndInvalidOperator()
@@ -124,8 +125,7 @@ public function testApplyWithValueAndOperator()
124125
/** @var RawModelCriterion $criterion */
125126
$criterion = $mc->getMap()['modifier_test.name'];
126127
$this->assertEquals('test', $criterion->getValue());
127-
$this->assertNull($criterion->getComparison());
128-
$this->assertEquals('modifier_test.name >= ?', $criterion->getClause());
128+
$this->assertEquals('=', $criterion->getComparison());
129129
}
130130

131131
public function testApplyWithoutProperty()
@@ -177,8 +177,7 @@ public function testValue()
177177
/** @var RawModelCriterion $criterion */
178178
$criterion = $mc->getMap()['modifier_test.name'];
179179
$this->assertEquals('foo', $criterion->getValue());
180-
$this->assertNull($criterion->getComparison());
181-
$this->assertEquals('modifier_test.name = ?', $criterion->getClause());
180+
$this->assertEquals('=', $criterion->getComparison());
182181
}
183182

184183
public function testValueNullWithEqualsOperator()
@@ -197,8 +196,7 @@ public function testValueNullWithEqualsOperator()
197196
/** @var RawModelCriterion $criterion */
198197
$criterion = $mc->getMap()['modifier_test.name'];
199198
$this->assertNull($criterion->getValue());
200-
$this->assertNull($criterion->getComparison());
201-
$this->assertEquals('modifier_test.name IS NULL', $criterion->getClause());
199+
$this->assertEquals(Criteria::ISNULL, $criterion->getComparison());
202200
}
203201

204202
public function testValueNullWithNotEqualsOperator()
@@ -217,8 +215,7 @@ public function testValueNullWithNotEqualsOperator()
217215
/** @var RawModelCriterion $criterion */
218216
$criterion = $mc->getMap()['modifier_test.name'];
219217
$this->assertNull($criterion->getValue());
220-
$this->assertNull($criterion->getComparison());
221-
$this->assertEquals('modifier_test.name IS NOT NULL', $criterion->getClause());
218+
$this->assertEquals(Criteria::ISNOTNULL, $criterion->getComparison());
222219
}
223220

224221
public function testValueNullWithoutOperator()
@@ -236,7 +233,6 @@ public function testValueNullWithoutOperator()
236233
/** @var RawModelCriterion $criterion */
237234
$criterion = $mc->getMap()['modifier_test.name'];
238235
$this->assertNull($criterion->getValue());
239-
$this->assertNull($criterion->getComparison());
240-
$this->assertEquals('modifier_test.name IS NULL', $criterion->getClause());
236+
$this->assertEquals(Criteria::ISNULL, $criterion->getComparison());
241237
}
242238
}

0 commit comments

Comments
 (0)