From 44a3d0c2449ea0000bcb3d39c98084f279841e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mantas=20Jonu=C5=A1as?= <mantas.jonusas@nfq.lt> Date: Tue, 24 Feb 2015 11:06:20 +0200 Subject: [PATCH] has_child and has_parent improvements --- Filter/HasChildFilter.php | 45 ++++++++++++++++++++++++++------- Filter/HasParentFilter.php | 51 ++++++++++++++++++++++++++++++-------- 2 files changed, 77 insertions(+), 19 deletions(-) diff --git a/Filter/HasChildFilter.php b/Filter/HasChildFilter.php index 6af77f1..747a828 100644 --- a/Filter/HasChildFilter.php +++ b/Filter/HasChildFilter.php @@ -21,6 +21,9 @@ class HasChildFilter implements BuilderInterface { use ParametersTrait; + const INNER_QUERY = 'query'; + const INNER_FILTER = 'filter'; + /** * @var string */ @@ -31,15 +34,34 @@ class HasChildFilter implements BuilderInterface */ private $filter; + /** + * @var BuilderInterface + */ + private $query; + /** * @param string $type - * @param BuilderInterface $filter + * @param BuilderInterface $block * @param array $parameters + * @param string $inner + * + * @throws \InvalidArgumentException */ - public function __construct($type, BuilderInterface $filter, array $parameters = []) + public function __construct($type, BuilderInterface $block, array $parameters = [], $inner = self::INNER_FILTER) { $this->type = $type; - $this->filter = $filter; + + switch ($inner) { + case 'filter': + $this->filter = $block; + break; + case 'query': + $this->query = $block; + break; + default: + throw new \InvalidArgumentException('Not supported argument type'); + } + $this->setParameters($parameters); } @@ -56,12 +78,17 @@ class HasChildFilter implements BuilderInterface */ public function toArray() { - $query = [ - 'type' => $this->type, - 'filter' => [ - $this->filter->getType() => $this->filter->toArray(), - ], - ]; + $query = [ 'type' => $this->type ]; + + $queries = ['filter', 'query']; + + foreach ($queries as $type) { + if ($this->{$type}) { + $query[$type] = [ + $this->{$type}->getType() => $this->{$type}->toArray(), + ]; + } + } $output = $this->processArray($query); diff --git a/Filter/HasParentFilter.php b/Filter/HasParentFilter.php index 50ee8e5..d81dce2 100644 --- a/Filter/HasParentFilter.php +++ b/Filter/HasParentFilter.php @@ -21,6 +21,9 @@ class HasParentFilter implements BuilderInterface { use ParametersTrait; + const INNER_QUERY = 'query'; + const INNER_FILTER = 'filter'; + /** * @var string */ @@ -31,15 +34,38 @@ class HasParentFilter implements BuilderInterface */ private $filter; + /** + * @var BuilderInterface + */ + private $query; + /** * @param string $parentType - * @param BuilderInterface $filter + * @param BuilderInterface $block * @param array $parameters + * @param string $inner + * + * @throws \InvalidArgumentException */ - public function __construct($parentType, BuilderInterface $filter, array $parameters = []) - { + public function __construct( + $parentType, + BuilderInterface $block, + array $parameters = [], + $inner = self::INNER_FILTER + ) { $this->parentType = $parentType; - $this->filter = $filter; + + switch ($inner) { + case 'filter': + $this->filter = $block; + break; + case 'query': + $this->query = $block; + break; + default: + throw new \InvalidArgumentException('Not supported argument type'); + } + $this->setParameters($parameters); } @@ -56,12 +82,17 @@ class HasParentFilter implements BuilderInterface */ public function toArray() { - $query = [ - 'parent_type' => $this->parentType, - 'filter' => [ - $this->filter->getType() => $this->filter->toArray(), - ], - ]; + $query = [ 'parent_type' => $this->parentType ]; + + $queries = ['filter', 'query']; + + foreach ($queries as $type) { + if ($this->{$type}) { + $query[$type] = [ + $this->{$type}->getType() => $this->{$type}->toArray(), + ]; + } + } $output = $this->processArray($query); -- GitLab