* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ declare(strict_types=1); namespace PrestaShop\PrestaShop\Adapter\Product\Combination\Update; use PrestaShop\PrestaShop\Adapter\Product\Combination\Repository\CombinationRepository; use PrestaShop\PrestaShop\Adapter\Product\Repository\ProductRepository; use PrestaShop\PrestaShop\Core\Domain\Product\Combination\ValueObject\CombinationId; use PrestaShop\PrestaShop\Core\Domain\Product\ValueObject\ProductId; use PrestaShop\PrestaShop\Core\Domain\Shop\ValueObject\ShopConstraint; /** * Responsible for updating product default combination */ class DefaultCombinationUpdater { /** * @var CombinationRepository */ private $combinationRepository; /** * @var ProductRepository */ private $productRepository; /** * @param CombinationRepository $combinationRepository * @param ProductRepository $productRepository */ public function __construct( CombinationRepository $combinationRepository, ProductRepository $productRepository ) { $this->combinationRepository = $combinationRepository; $this->productRepository = $productRepository; } /** * Marks the provided combination as default (combination->default_on) * and removes the mark from previous default combination * * Notice: Product->cache_default_attribute is updated in Product add(), update(), delete() methods. * * @see Product::updateDefaultAttribute() * * @param CombinationId $defaultCombinationId * @param ShopConstraint $shopConstraint */ public function setDefaultCombination(CombinationId $defaultCombinationId, ShopConstraint $shopConstraint): void { $newDefaultCombination = $this->combinationRepository->getByShopConstraint($defaultCombinationId, $shopConstraint); $productId = new ProductId((int) $newDefaultCombination->id_product); $this->combinationRepository->setDefaultCombination( $productId, $defaultCombinationId, $shopConstraint ); $this->productRepository->updateCachedDefaultCombination($productId, $shopConstraint); } }