diff --git a/Filter/HasChildFilter.php b/Filter/HasChildFilter.php index 6af77f1f7b08f5ba7c4675c94a1d1f22892ad250..747a82863b9f898ab01cb039f0d766005f0bf3cb 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 50ee8e54aeee6d6798da9fcf597f410601626f3c..d81dce27febf8f834bf4e4ffd7d138dab9824abe 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);