From 51150d8c76efc09b702080cfc27069689980c57e Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Wed, 6 May 2026 17:55:06 +0700 Subject: [PATCH 1/3] feat(ANWB-5192): Updated logics to support multiple filter values. --- src/Api/Data/FilterInterface.php | 4 +- src/Model/Filter.php | 21 ++---- src/Model/LandingPage.php | 114 ++++++++++++++++++++++++++----- 3 files changed, 104 insertions(+), 35 deletions(-) diff --git a/src/Api/Data/FilterInterface.php b/src/Api/Data/FilterInterface.php index fa35d24..c9f6457 100644 --- a/src/Api/Data/FilterInterface.php +++ b/src/Api/Data/FilterInterface.php @@ -15,7 +15,7 @@ interface FilterInterface public function getFacet(): string; /** - * @return string + * @return array */ - public function getValue(): string; + public function getValue(): array; } diff --git a/src/Model/Filter.php b/src/Model/Filter.php index 8cede0b..a487919 100644 --- a/src/Model/Filter.php +++ b/src/Model/Filter.php @@ -11,25 +11,14 @@ class Filter implements FilterInterface { - /** - * @var string - */ - private $facet; - - /** - * @var string - */ - private $value; - /** * Filter constructor. + * * @param string $facet - * @param string $value + * @param array $value */ - public function __construct(string $facet, string $value) + public function __construct(private readonly string $facet, private readonly array $value) { - $this->facet = $facet; - $this->value = $value; } /** @@ -41,9 +30,9 @@ public function getFacet(): string } /** - * @return string + * @return array */ - public function getValue(): string + public function getValue(): array { return $this->value; } diff --git a/src/Model/LandingPage.php b/src/Model/LandingPage.php index dbd264a..05241ef 100644 --- a/src/Model/LandingPage.php +++ b/src/Model/LandingPage.php @@ -2,17 +2,18 @@ namespace Emico\AttributeLanding\Model; -use Emico\AttributeLanding\Api\Data\LandingPageInterface; use Emico\AttributeLanding\Api\Data\LandingPageExtensionInterface; +use Emico\AttributeLanding\Api\Data\LandingPageInterface; use Emico\AttributeLanding\Api\UrlRewriteGeneratorInterface; use Emico\AttributeLanding\Model\ResourceModel\Page as PageResourceModel; use Magento\Framework\Api\AttributeValueFactory; use Magento\Framework\Api\ExtensionAttributesFactory; use Magento\Framework\Data\Collection\AbstractDb; use Magento\Framework\Model\AbstractExtensibleModel; -use Magento\Framework\Registry; use Magento\Framework\Model\Context; use Magento\Framework\Model\ResourceModel\AbstractResource; +use Magento\Framework\Registry; +use TypeError; /** * @SuppressWarnings("PHPMD.ExcessivePublicCount") @@ -21,7 +22,6 @@ class LandingPage extends AbstractExtensibleModel implements LandingPageInterface, UrlRewriteGeneratorInterface { protected $_eventPrefix = 'emico_attributelanding_page'; - /** * @var Config */ @@ -29,14 +29,15 @@ class LandingPage extends AbstractExtensibleModel implements LandingPageInterfac /** * LandingPage constructor. - * @param Context $context - * @param Registry $registry + * + * @param Context $context + * @param Registry $registry * @param ExtensionAttributesFactory $extensionFactory - * @param AttributeValueFactory $customAttributeFactory - * @param Config $config - * @param AbstractResource|null $resource - * @param AbstractDb|null $resourceCollection - * @param array $data + * @param AttributeValueFactory $customAttributeFactory + * @param Config $config + * @param AbstractResource|null $resource + * @param AbstractDb|null $resourceCollection + * @param array $data */ public function __construct( Context $context, @@ -46,7 +47,7 @@ public function __construct( Config $config, ?AbstractResource $resource = null, ?AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], ) { parent::__construct( $context, @@ -55,7 +56,7 @@ public function __construct( $customAttributeFactory, $resource, $resourceCollection, - $data + $data, ); $this->config = $config; @@ -74,16 +75,19 @@ protected function _construct() /** * Get page_id + * * @return int|null */ public function getPageId() { - return (int)$this->getData(self::PAGE_ID); + return (int) $this->getData(self::PAGE_ID); } /** * Set page_id + * * @param string $pageId + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setPageId($pageId): LandingPageInterface @@ -93,6 +97,7 @@ public function setPageId($pageId): LandingPageInterface /** * Get active + * * @return bool */ public function isActive(): bool @@ -102,7 +107,9 @@ public function isActive(): bool /** * Set active + * * @param string $active + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setActive($active): LandingPageInterface @@ -112,6 +119,7 @@ public function setActive($active): LandingPageInterface /** * Retrieve existing extension attributes object or create a new one. + * * @return \Emico\AttributeLanding\Api\Data\LandingPageExtensionInterface|null */ public function getExtensionAttributes() @@ -122,7 +130,9 @@ public function getExtensionAttributes() /** * Set an extension attributes object. + * * @param \Emico\AttributeLanding\Api\Data\LandingPageExtensionInterface $extensionAttributes + * * @return $this */ public function setExtensionAttributes(LandingPageExtensionInterface $extensionAttributes): LandingPageInterface @@ -132,6 +142,7 @@ public function setExtensionAttributes(LandingPageExtensionInterface $extensionA /** * Get name + * * @return string */ public function getName(): string @@ -141,7 +152,9 @@ public function getName(): string /** * Set name + * * @param string $name + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setName(?string $name): LandingPageInterface @@ -151,6 +164,7 @@ public function setName(?string $name): LandingPageInterface /** * Get url_path + * * @return string|null */ public function getUrlPath() @@ -160,7 +174,9 @@ public function getUrlPath() /** * Set url_path + * * @param string $urlPath + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setUrlPath(?string $urlPath): LandingPageInterface @@ -170,6 +186,7 @@ public function setUrlPath(?string $urlPath): LandingPageInterface /** * Get category_id + * * @return int|null */ public function getCategoryId() @@ -179,7 +196,9 @@ public function getCategoryId() /** * Set category_id + * * @param int $categoryId + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setCategoryId(?int $categoryId): LandingPageInterface @@ -189,6 +208,7 @@ public function setCategoryId(?int $categoryId): LandingPageInterface /** * Get heading + * * @return string|null */ public function getHeading() @@ -198,7 +218,9 @@ public function getHeading() /** * Set heading + * * @param string $heading + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setHeading(?string $heading): LandingPageInterface @@ -208,6 +230,7 @@ public function setHeading(?string $heading): LandingPageInterface /** * Get header_image + * * @return string|null */ public function getHeaderImage() @@ -217,7 +240,9 @@ public function getHeaderImage() /** * Set header_image + * * @param string $headerImage + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setHeaderImage(?string $headerImage): LandingPageInterface @@ -227,6 +252,7 @@ public function setHeaderImage(?string $headerImage): LandingPageInterface /** * Get meta_title + * * @return string|null */ public function getMetaTitle() @@ -236,7 +262,9 @@ public function getMetaTitle() /** * Set meta_title + * * @param string $metaTitle + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setMetaTitle(?string $metaTitle): LandingPageInterface @@ -246,6 +274,7 @@ public function setMetaTitle(?string $metaTitle): LandingPageInterface /** * Get meta_keywords + * * @return string|null */ public function getMetaKeywords() @@ -255,7 +284,9 @@ public function getMetaKeywords() /** * Set meta_keywords + * * @param string $metaKeywords + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setMetaKeywords(?string $metaKeywords): LandingPageInterface @@ -265,6 +296,7 @@ public function setMetaKeywords(?string $metaKeywords): LandingPageInterface /** * Get meta_description + * * @return string|null */ public function getMetaDescription() @@ -274,7 +306,9 @@ public function getMetaDescription() /** * Set meta_description + * * @param string $metaDescription + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setMetaDescription(?string $metaDescription): LandingPageInterface @@ -284,6 +318,7 @@ public function setMetaDescription(?string $metaDescription): LandingPageInterfa /** * Get content_first + * * @return string|null */ public function getContentFirst() @@ -293,7 +328,9 @@ public function getContentFirst() /** * Set content_first + * * @param string $contentFirst + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setContentFirst(?string $contentFirst): LandingPageInterface @@ -303,6 +340,7 @@ public function setContentFirst(?string $contentFirst): LandingPageInterface /** * Get content_last + * * @return string|null */ public function getContentLast() @@ -312,7 +350,9 @@ public function getContentLast() /** * Set content_last + * * @param string $contentLast + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setContentLast(?string $contentLast): LandingPageInterface @@ -322,6 +362,7 @@ public function setContentLast(?string $contentLast): LandingPageInterface /** * Get filter_attributes + * * @return string|null */ public function getFilterAttributes() @@ -331,7 +372,9 @@ public function getFilterAttributes() /** * Set filter_attributes + * * @param string $filterAttributes + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setFilterAttributes(?string $filterAttributes): LandingPageInterface @@ -374,7 +417,10 @@ public function getFilters(): array $filters = []; foreach ($unserializedFilters as $unserializedFilter) { - $filters[] = new Filter($unserializedFilter['attribute'], $unserializedFilter['value']); + $filters[] = new Filter( + $unserializedFilter['attribute'], + $this->normalizeFilterValues($unserializedFilter['value']), + ); } return $filters; @@ -382,6 +428,7 @@ public function getFilters(): array /** * Get tweakwise_filter_template + * * @return string|null */ public function getTweakwiseFilterTemplate() @@ -391,7 +438,9 @@ public function getTweakwiseFilterTemplate() /** * Set tweakwise_filter_template + * * @param string $tweakwiseFilterTemplate + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setTweakwiseFilterTemplate(?string $tweakwiseFilterTemplate): LandingPageInterface @@ -401,6 +450,7 @@ public function setTweakwiseFilterTemplate(?string $tweakwiseFilterTemplate): La /** * Get tweakwise_filter_template + * * @return string|null */ public function getTweakwiseSortTemplate() @@ -410,7 +460,9 @@ public function getTweakwiseSortTemplate() /** * Set tweakwise_filter_template + * * @param string $tweakwiseSortTemplate + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setTweakwiseSortTemplate(?string $tweakwiseSortTemplate): LandingPageInterface @@ -420,6 +472,7 @@ public function setTweakwiseSortTemplate(?string $tweakwiseSortTemplate): Landin /** * Get tweakwise_builder_template + * * @return string|null */ public function getTweakwiseBuilderTemplate(): ?string @@ -429,7 +482,9 @@ public function getTweakwiseBuilderTemplate(): ?string /** * Set tweakwise_builder_template + * * @param string $tweakwiseBuilderTemplate + * * @return \Emico\AttributeLanding\Api\Data\LandingPageInterface */ public function setTweakwiseBuilderTemplate(?string $tweakwiseBuilderTemplate): LandingPageInterface @@ -439,15 +494,17 @@ public function setTweakwiseBuilderTemplate(?string $tweakwiseBuilderTemplate): /** * Get active store ID + * * @return int */ public function getStoreId(): int { - return (int)$this->getData(self::STORE_ID); + return (int) $this->getData(self::STORE_ID); } /** * @param int $storeId + * * @return LandingPageInterface */ public function setStoreId(int $storeId): LandingPageInterface @@ -502,6 +559,7 @@ public function getOverviewPageId() /** * @param string|null $overviewPageId + * * @return LandingPageInterface */ public function setOverviewPageId(?string $overviewPageId): LandingPageInterface @@ -523,6 +581,7 @@ public function getOverviewPageImage() /** * @param string|null $overviewPageImage + * * @return LandingPageInterface */ public function setOverviewPageImage(?string $overviewPageImage): LandingPageInterface @@ -541,6 +600,7 @@ public function getIsFilterLinkAllowed(): bool /** * @param bool $isFilterLinkAllowed + * * @return LandingPageInterface */ public function setIsFilterLinkAllowed(bool $isFilterLinkAllowed = true): LandingPageInterface @@ -559,6 +619,7 @@ public function getHideSelectedFilters(): bool /** * @param bool $hideSelectedFilters + * * @return LandingPageInterface */ public function setHideSelectedFilters(bool $hideSelectedFilters = true): LandingPageInterface @@ -576,6 +637,7 @@ public function getCanonicalUrl() /** * @param string $canonicalUrl + * * @return LandingPageInterface */ public function setCanonicalUrl(?string $canonicalUrl): LandingPageInterface @@ -620,7 +682,7 @@ public function getLandingPageDataWithoutStore(): array return array_combine( $fields, - array_map(fn($field) => $this->getData($field), $fields) + array_map(fn($field) => $this->getData($field), $fields), ); } @@ -653,7 +715,25 @@ public function getLandingPageDataForStore(): array return array_combine( $fields, - array_map(fn($field) => $this->getData($field), $fields) + array_map(fn($field) => $this->getData($field), $fields), ); } + + private function normalizeFilterValues(mixed $value): array + { + try { + $filterValue = json_decode($value, true); + } catch (TypeError $e) { + $filterValue = $value; + } + if (is_array($filterValue)) { + return $filterValue; + } + if ($filterValue && is_string($filterValue) && $filterValue !== '') { + return [$filterValue]; + } + if (is_string($value) && $value !== '') { + return [$value]; + } + } } From eac4da96f3538f2f3a176d54ece7a498dae188db Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Mon, 11 May 2026 14:58:31 +0700 Subject: [PATCH 2/3] feat(ANWB-5192): Processed feedback return type. --- src/Api/Data/FilterInterface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Data/FilterInterface.php b/src/Api/Data/FilterInterface.php index c9f6457..5f98e7c 100644 --- a/src/Api/Data/FilterInterface.php +++ b/src/Api/Data/FilterInterface.php @@ -15,7 +15,7 @@ interface FilterInterface public function getFacet(): string; /** - * @return array + * @return string[] */ public function getValue(): array; } From b7f2f4bc992012558beb64035f3cad57a935f8de Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Tue, 19 May 2026 14:54:02 +0700 Subject: [PATCH 3/3] feat(ANWB-5192): Updated rework MR --- src/Model/LandingPage.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Model/LandingPage.php b/src/Model/LandingPage.php index 05241ef..c003473 100644 --- a/src/Model/LandingPage.php +++ b/src/Model/LandingPage.php @@ -735,5 +735,6 @@ private function normalizeFilterValues(mixed $value): array if (is_string($value) && $value !== '') { return [$value]; } + return []; } }