quick-baker-99786
06/27/2023, 8:34 AMancient-apartment-59274
06/27/2023, 8:38 AMwooden-king-30682
06/27/2023, 8:50 AMwooden-king-30682
06/27/2023, 8:51 AM<?php
/**
* This file is part of the Spryker Commerce OS.
* For full license information, please view the LICENSE file that was distributed with this source code.
*/
namespace Pyz\Zed\ProductCategorySearch\Business\Expander;
use Generated\Shared\Transfer\LocaleTransfer;
use Generated\Shared\Transfer\ProductPageSearchTransfer;
use Generated\Shared\Transfer\StoreTransfer;
use Pyz\Zed\ProductCategorySearch\Persistence\ProductCategorySearchRepositoryInterface;
use Spryker\Zed\ProductCategorySearch\Business\Builder\ProductCategoryTreeBuilderInterface;
use Spryker\Zed\ProductCategorySearch\Business\Expander\ProductPageDataExpander as SprykerProductPageDataExpander;
class ProductPageDataExpander extends SprykerProductPageDataExpander
{
protected ProductCategorySearchRepositoryInterface $productCategorySearchRepository;
/**
* @param \Spryker\Zed\ProductCategorySearch\Business\Builder\ProductCategoryTreeBuilderInterface $productCategoryTreeBuilder
* @param \Pyz\Zed\ProductCategorySearch\Persistence\ProductCategorySearchRepositoryInterface $productCategorySearchRepository
*/
public function __construct(
ProductCategoryTreeBuilderInterface $productCategoryTreeBuilder,
ProductCategorySearchRepositoryInterface $productCategorySearchRepository
) {
parent::__construct($productCategoryTreeBuilder);
$this->productCategorySearchRepository = $productCategorySearchRepository;
}
/**
* @param \Generated\Shared\Transfer\ProductPageSearchTransfer $productAbstractPageSearchTransfer
* @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
* @param \Generated\Shared\Transfer\StoreTransfer $storeTransfer
*
* @return array<int>
*/
protected function getAllParentCategoryNodeIds(
ProductPageSearchTransfer $productAbstractPageSearchTransfer,
LocaleTransfer $localeTransfer,
StoreTransfer $storeTransfer
): array {
return $this->productCategorySearchRepository->getParentCategoryNodeIds($storeTransfer, $productAbstractPageSearchTransfer->getCategoryNodeIds());
}
/**
* @param int $idCategoryNode
* @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
* @param \Generated\Shared\Transfer\StoreTransfer $storeTransfer
*
* @return array<int>
*/
protected function getCategoryNodeParentIds(int $idCategoryNode, LocaleTransfer $localeTransfer, StoreTransfer $storeTransfer): array
{
return $this->productCategorySearchRepository->getParentCategoryNodeIds($storeTransfer, [$idCategoryNode]);
}
}wooden-king-30682
06/27/2023, 8:51 AM<?php
/**
* This file is part of the Spryker Commerce OS.
* For full license information, please view the LICENSE file that was distributed with this source code.
*/
namespace Pyz\Zed\ProductCategorySearch\Persistence;
use Generated\Shared\Transfer\StoreTransfer;
use Orm\Zed\Category\Persistence\Map\SpyCategoryClosureTableTableMap;
use Orm\Zed\Category\Persistence\Map\SpyCategoryNodeTableMap;
use Orm\Zed\Category\Persistence\SpyCategoryClosureTableQuery;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\Formatter\SimpleArrayFormatter;
use Spryker\Zed\ProductCategorySearch\Persistence\ProductCategorySearchRepository as SprykerProductCategorySearchRepository;
/**
* @method \Spryker\Zed\ProductCategorySearch\Persistence\ProductCategorySearchPersistenceFactory getFactory()
*/
class ProductCategorySearchRepository extends SprykerProductCategorySearchRepository implements ProductCategorySearchRepositoryInterface
{
/**
* @param array<int> $productAbstractIds
* @param \Generated\Shared\Transfer\StoreTransfer $storeTransfer
*
* @return array<array<\Orm\Zed\ProductCategory\Persistence\SpyProductCategory>>
*/
public function getMappedProductCategoriesByIdProductAbstractAndStoreFilteredByStore(
array $productAbstractIds,
StoreTransfer $storeTransfer
): array {
/** @var \Orm\Zed\ProductCategory\Persistence\SpyProductCategoryQuery $productCategoryQuery */
$productCategoryQuery = $this->getFactory()
->getProductCategoryPropelQuery()
->filterByFkProductAbstract_In($productAbstractIds)
->useSpyCategoryQuery()
->useNodeQuery()
->withColumn(SpyCategoryNodeTableMap::COL_ID_CATEGORY_NODE, static::COLUMN_ID_CATEGORY_NODE)
->endUse()
->endUse();
$productCategoryQuery
->useSpyCategoryQuery(null, Criteria::LEFT_JOIN)
->useSpyCategoryStoreQuery(null, Criteria::LEFT_JOIN)
->leftJoinSpyStore()
->useSpyStoreQuery()
->filterByName($storeTransfer->getNameOrFail())
->endUse()
->endUse()
->endUse();
return $this->getFactory()
->createProductCategoryMapper()
->mapProductCategoryEntitiesByIdProductAbstractAndStore($productCategoryQuery->find(), []);
}
/**
* @param \Generated\Shared\Transfer\StoreTransfer $storeTransfer
* @param array<int> $categoryNodeIds
*
* @return array<int>
*/
public function getParentCategoryNodeIds(StoreTransfer $storeTransfer, array $categoryNodeIds): array
{
$query = SpyCategoryClosureTableQuery::create();
$query->distinct();
$query->select([
SpyCategoryClosureTableTableMap::COL_FK_CATEGORY_NODE,
]);
$query->useNodeQuery()
->useCategoryQuery()
->useSpyCategoryStoreQuery()
->useSpyStoreQuery()
->filterByName($storeTransfer->getNameOrFail())
->endUse()
->endUse()
->endUse()
->endUse();
$query->filterByFkCategoryNodeDescendant_In($categoryNodeIds);
$query->setFormatter(SimpleArrayFormatter::class);
$parentCategoryNodeIds = $query->find()->getData();
return array_unique(array_values($parentCategoryNodeIds));
}
}