From cd35204f0376f8837b9346def8c30e26f3fe188b Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 1 May 2022 22:05:41 +0200 Subject: [PATCH] allow option overwrite in sort, with, limit --- .../Database/Mapper/DataMapperAbstract.php | 72 +++++++++++++++---- 1 file changed, 60 insertions(+), 12 deletions(-) diff --git a/DataStorage/Database/Mapper/DataMapperAbstract.php b/DataStorage/Database/Mapper/DataMapperAbstract.php index 55489a58e..31f7a5f77 100644 --- a/DataStorage/Database/Mapper/DataMapperAbstract.php +++ b/DataStorage/Database/Mapper/DataMapperAbstract.php @@ -178,10 +178,26 @@ abstract class DataMapperAbstract $split = \explode('/', $member); $memberSplit = \array_shift($split); - $this->sort[$memberSplit][] = [ - 'child' => \implode('/', $split), - 'order' => $order, - ]; + $child = \implode('/', $split); + $overwritten = false; + + if (isset($this->sort[$memberSplit])) { + foreach ($this->sort[$memberSplit] as $key => $element) { + if ($element['child'] === $child) { + $this->sort[$memberSplit][$key]['order'] = $order; + $overwritten = true; + + break; + } + } + } + + if (!$overwritten) { + $this->sort[$memberSplit][] = [ + 'child' => \implode('/', $split), + 'order' => $order, + ]; + } return $this; } @@ -201,10 +217,26 @@ abstract class DataMapperAbstract $split = \explode('/', $member); $memberSplit = \array_shift($split); - $this->offset[$memberSplit][] = [ - 'child' => \implode('/', $split), - 'offset' => $offset, - ]; + $child = \implode('/', $split); + $overwritten = false; + + if (isset($this->offset[$memberSplit])) { + foreach ($this->offset[$memberSplit] as $key => $element) { + if ($element['child'] === $child) { + $this->offset[$memberSplit][$key]['offset'] = $offset; + $overwritten = true; + + break; + } + } + } + + if (!$overwritten) { + $this->offset[$memberSplit][] = [ + 'child' => \implode('/', $split), + 'offset' => $offset, + ]; + } return $this; } @@ -224,10 +256,26 @@ abstract class DataMapperAbstract $split = \explode('/', $member); $memberSplit = \array_shift($split); - $this->limit[$memberSplit][] = [ - 'child' => \implode('/', $split), - 'limit' => $limit, - ]; + $child = \implode('/', $split); + $overwritten = false; + + if (isset($this->limit[$memberSplit])) { + foreach ($this->limit[$memberSplit] as $key => $element) { + if ($element['child'] === $child) { + $this->limit[$memberSplit][$key]['limit'] = $limit; + $overwritten = true; + + break; + } + } + } + + if (!$overwritten) { + $this->limit[$memberSplit][] = [ + 'child' => \implode('/', $split), + 'limit' => $limit, + ]; + } return $this; }