12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
-
- namespace Tqdev\PhpCrudApi\Record;
-
- use Tqdev\PhpCrudApi\Column\Reflection\ReflectedTable;
- use Tqdev\PhpCrudApi\Record\Condition\AndCondition;
- use Tqdev\PhpCrudApi\Record\Condition\Condition;
- use Tqdev\PhpCrudApi\Record\Condition\NoCondition;
- use Tqdev\PhpCrudApi\Record\Condition\OrCondition;
-
- class FilterInfo
- {
- private function addConditionFromFilterPath(PathTree $conditions, array $path, ReflectedTable $table, array $params)
- {
- $key = 'filter' . implode('', $path);
- if (isset($params[$key])) {
- foreach ($params[$key] as $filter) {
- $condition = Condition::fromString($table, $filter);
- if (($condition instanceof NoCondition) == false) {
- $conditions->put($path, $condition);
- }
- }
- }
- }
-
- private function getConditionsAsPathTree(ReflectedTable $table, array $params): PathTree
- {
- $conditions = new PathTree();
- $this->addConditionFromFilterPath($conditions, [], $table, $params);
- for ($n = ord('0'); $n <= ord('9'); $n++) {
- $this->addConditionFromFilterPath($conditions, [chr($n)], $table, $params);
- for ($l = ord('a'); $l <= ord('f'); $l++) {
- $this->addConditionFromFilterPath($conditions, [chr($n), chr($l)], $table, $params);
- }
- }
- return $conditions;
- }
-
- private function combinePathTreeOfConditions(PathTree $tree): Condition
- {
- $andConditions = $tree->getValues();
- $and = AndCondition::fromArray($andConditions);
- $orConditions = [];
- foreach ($tree->getKeys() as $p) {
- $orConditions[] = $this->combinePathTreeOfConditions($tree->get($p));
- }
- $or = OrCondition::fromArray($orConditions);
- return $and->_and($or);
- }
-
- public function getCombinedConditions(ReflectedTable $table, array $params): Condition
- {
- return $this->combinePathTreeOfConditions($this->getConditionsAsPathTree($table, $params));
- }
- }
|