From 5b33afc7b11d57cd100af9f3b4cd91858d91c875 Mon Sep 17 00:00:00 2001 From: Adrien LUCAS Date: Mon, 23 Aug 2021 14:22:08 +0200 Subject: [PATCH] Introduce ProductConfigurationInterface to allow extension --- src/Provider/ExcludedAttributesProvider.php | 10 +++++----- .../ProductConfigurationProviderInterface.php | 10 ++++++++++ src/Repository/ProductConfigurationRepository.php | 8 +++++++- src/Service/ProductChannelEnabler.php | 11 ++++++----- .../Association/CreateProductAssociationTask.php | 5 +++-- src/Task/Product/AbstractCreateProductEntities.php | 11 ++++++----- src/Task/Product/AbstractInsertProductImageTask.php | 9 +++++---- .../CreateConfigurableProductEntitiesTask.php | 5 +++-- .../Product/CreateSimpleProductEntitiesTask.php | 7 ++++--- .../ProductModel/AddOrUpdateProductModelTask.php | 13 +++++++------ 10 files changed, 56 insertions(+), 33 deletions(-) create mode 100644 src/Provider/ProductConfigurationProviderInterface.php diff --git a/src/Provider/ExcludedAttributesProvider.php b/src/Provider/ExcludedAttributesProvider.php index 31bed66f..760a0fd8 100644 --- a/src/Provider/ExcludedAttributesProvider.php +++ b/src/Provider/ExcludedAttributesProvider.php @@ -10,19 +10,19 @@ class ExcludedAttributesProvider implements ExcludedAttributesProviderInterface { - /** @var \Sylius\Component\Resource\Repository\RepositoryInterface */ - private $productConfigurationRepository; + /** @var \Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface */ + private $productConfigurationProvider; - public function __construct(RepositoryInterface $productConfigurationRepository) + public function __construct(ProductConfigurationProviderInterface $productConfigurationProvider) { - $this->productConfigurationRepository = $productConfigurationRepository; + $this->productConfigurationProvider = $productConfigurationProvider; } public function getExcludedAttributes(): array { $excludedAttributeCodes = []; /** @var \Synolia\SyliusAkeneoPlugin\Entity\ProductConfiguration|null $productConfiguration */ - $productConfiguration = $this->productConfigurationRepository->findOneBy([]); + $productConfiguration = $this->productConfigurationProvider->getProductConfiguration(); if (!$productConfiguration instanceof ProductConfiguration) { return []; diff --git a/src/Provider/ProductConfigurationProviderInterface.php b/src/Provider/ProductConfigurationProviderInterface.php new file mode 100644 index 00000000..7d19f186 --- /dev/null +++ b/src/Provider/ProductConfigurationProviderInterface.php @@ -0,0 +1,10 @@ +findOneBy([]); + } } diff --git a/src/Service/ProductChannelEnabler.php b/src/Service/ProductChannelEnabler.php index 46513150..ebfbbef3 100644 --- a/src/Service/ProductChannelEnabler.php +++ b/src/Service/ProductChannelEnabler.php @@ -11,6 +11,7 @@ use Synolia\SyliusAkeneoPlugin\Entity\ProductConfiguration; use Synolia\SyliusAkeneoPlugin\Exceptions\NoAttributeResourcesException; use Synolia\SyliusAkeneoPlugin\Exceptions\NoProductConfigurationException; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; use Synolia\SyliusAkeneoPlugin\Repository\ChannelRepository; use Synolia\SyliusAkeneoPlugin\Repository\ProductConfigurationRepository; @@ -22,20 +23,20 @@ final class ProductChannelEnabler /** @var \Psr\Log\LoggerInterface */ private $logger; - /** @var \Synolia\SyliusAkeneoPlugin\Repository\ProductConfigurationRepository */ - private $productConfigurationRepository; + /** @var \Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface */ + private $productConfigurationProvider; /** @var \Doctrine\ORM\EntityManagerInterface */ private $entityManager; public function __construct( ChannelRepository $channelRepository, - ProductConfigurationRepository $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, LoggerInterface $akeneoLogger, EntityManagerInterface $entityManager ) { $this->channelRepository = $channelRepository; - $this->productConfigurationRepository = $productConfigurationRepository; + $this->productConfigurationProvider = $productConfigurationProvider; $this->logger = $akeneoLogger; $this->entityManager = $entityManager; } @@ -83,7 +84,7 @@ public function enableChannelForProduct(ProductInterface $product, array $resour public function getEnabledChannelsAttributeData(ProductInterface $product, array $resource): array { /** @var \Synolia\SyliusAkeneoPlugin\Entity\ProductConfiguration|null $productConfiguration */ - $productConfiguration = $this->productConfigurationRepository->findOneBy([]); + $productConfiguration = $this->productConfigurationProvider->getProductConfiguration(); if (!$productConfiguration instanceof ProductConfiguration) { throw new NoProductConfigurationException('Product Configuration is not configured in BO.'); diff --git a/src/Task/Association/CreateProductAssociationTask.php b/src/Task/Association/CreateProductAssociationTask.php index f339840f..ad0a7357 100644 --- a/src/Task/Association/CreateProductAssociationTask.php +++ b/src/Task/Association/CreateProductAssociationTask.php @@ -16,6 +16,7 @@ use Sylius\Component\Resource\Repository\RepositoryInterface; use Synolia\SyliusAkeneoPlugin\Payload\PipelinePayloadInterface; use Synolia\SyliusAkeneoPlugin\Payload\Product\ProductPayload; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; use Synolia\SyliusAkeneoPlugin\Repository\ChannelRepository; use Synolia\SyliusAkeneoPlugin\Task\AkeneoTaskInterface; use Synolia\SyliusAkeneoPlugin\Task\Product\AbstractCreateProductEntities; @@ -41,7 +42,7 @@ public function __construct( ChannelRepository $channelRepository, RepositoryInterface $channelPricingRepository, RepositoryInterface $localeRepository, - RepositoryInterface $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, ProductVariantFactoryInterface $productVariantFactory, FactoryInterface $channelPricingFactory, LoggerInterface $akeneoLogger @@ -53,7 +54,7 @@ public function __construct( $channelRepository, $channelPricingRepository, $localeRepository, - $productConfigurationRepository, + $productConfigurationProvider, $productVariantFactory, $channelPricingFactory, $akeneoLogger diff --git a/src/Task/Product/AbstractCreateProductEntities.php b/src/Task/Product/AbstractCreateProductEntities.php index 22f68b2f..d2026d99 100644 --- a/src/Task/Product/AbstractCreateProductEntities.php +++ b/src/Task/Product/AbstractCreateProductEntities.php @@ -19,6 +19,7 @@ use Synolia\SyliusAkeneoPlugin\Exceptions\NoAttributeResourcesException; use Synolia\SyliusAkeneoPlugin\Exceptions\NoProductConfigurationException; use Synolia\SyliusAkeneoPlugin\Payload\Product\ProductPayload; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; use Synolia\SyliusAkeneoPlugin\Repository\ChannelRepository; class AbstractCreateProductEntities @@ -52,8 +53,8 @@ class AbstractCreateProductEntities /** @var \Psr\Log\LoggerInterface */ protected $logger; - /** @var \Sylius\Component\Resource\Repository\RepositoryInterface */ - protected $productConfigurationRepository; + /** @var \Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface */ + protected $productConfigurationProvider; public function __construct( EntityManagerInterface $entityManager, @@ -62,7 +63,7 @@ public function __construct( ChannelRepository $channelRepository, RepositoryInterface $channelPricingRepository, RepositoryInterface $localeRepository, - RepositoryInterface $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, ProductVariantFactoryInterface $productVariantFactory, FactoryInterface $channelPricingFactory, LoggerInterface $akeneoLogger @@ -73,7 +74,7 @@ public function __construct( $this->productRepository = $productRepository; $this->channelRepository = $channelRepository; $this->channelPricingRepository = $channelPricingRepository; - $this->productConfigurationRepository = $productConfigurationRepository; + $this->productConfigurationProvider = $productConfigurationProvider; $this->channelPricingFactory = $channelPricingFactory; $this->localeRepository = $localeRepository; $this->logger = $akeneoLogger; @@ -173,7 +174,7 @@ private function addPriceToChannel( private function getPriceAttributeData(array $attributes): array { /** @var \Synolia\SyliusAkeneoPlugin\Entity\ProductConfiguration|null $productConfiguration */ - $productConfiguration = $this->productConfigurationRepository->findOneBy([]); + $productConfiguration = $this->productConfigurationProvider->getProductConfiguration(); if (!$productConfiguration instanceof ProductConfiguration) { throw new NoProductConfigurationException('Product Configuration is not configured in BO.'); diff --git a/src/Task/Product/AbstractInsertProductImageTask.php b/src/Task/Product/AbstractInsertProductImageTask.php index e07c8afc..ad9962a4 100644 --- a/src/Task/Product/AbstractInsertProductImageTask.php +++ b/src/Task/Product/AbstractInsertProductImageTask.php @@ -16,14 +16,15 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; use Synolia\SyliusAkeneoPlugin\Entity\ProductConfigurationImageMapping; use Synolia\SyliusAkeneoPlugin\Payload\Product\ProductMediaPayloadInterface; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; class AbstractInsertProductImageTask { /** @var \Sylius\Component\Core\Uploader\ImageUploaderInterface */ protected $imageUploader; - /** @var \Sylius\Component\Resource\Repository\RepositoryInterface */ - protected $productConfigurationRepository; + /** @var \Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface */ + protected $productConfigurationProvider; /** @var \Doctrine\ORM\EntityManagerInterface */ protected $entityManager; @@ -39,13 +40,13 @@ class AbstractInsertProductImageTask public function __construct( ImageUploaderInterface $imageUploader, - RepositoryInterface $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, EntityManagerInterface $entityManager, FactoryInterface $productImageFactory, LoggerInterface $akeneoLogger ) { $this->imageUploader = $imageUploader; - $this->productConfigurationRepository = $productConfigurationRepository; + $this->productConfigurationProvider = $productConfigurationProvider; $this->entityManager = $entityManager; $this->productImageFactory = $productImageFactory; $this->logger = $akeneoLogger; diff --git a/src/Task/Product/CreateConfigurableProductEntitiesTask.php b/src/Task/Product/CreateConfigurableProductEntitiesTask.php index e374de41..9c44252e 100644 --- a/src/Task/Product/CreateConfigurableProductEntitiesTask.php +++ b/src/Task/Product/CreateConfigurableProductEntitiesTask.php @@ -30,6 +30,7 @@ use Synolia\SyliusAkeneoPlugin\Payload\Product\ProductVariantMediaPayload; use Synolia\SyliusAkeneoPlugin\Provider\AkeneoAttributeProcessorProviderInterface; use Synolia\SyliusAkeneoPlugin\Provider\AkeneoTaskProvider; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; use Synolia\SyliusAkeneoPlugin\Repository\ChannelRepository; use Synolia\SyliusAkeneoPlugin\Repository\ProductFiltersRulesRepository; use Synolia\SyliusAkeneoPlugin\Repository\ProductGroupRepository; @@ -96,7 +97,7 @@ public function __construct( ChannelRepository $channelRepository, RepositoryInterface $channelPricingRepository, RepositoryInterface $localeRepository, - RepositoryInterface $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, ProductGroupRepository $productGroupRepository, ProductVariantFactoryInterface $productVariantFactory, FactoryInterface $channelPricingFactory, @@ -116,7 +117,7 @@ public function __construct( $channelRepository, $channelPricingRepository, $localeRepository, - $productConfigurationRepository, + $productConfigurationProvider, $productVariantFactory, $channelPricingFactory, $akeneoLogger diff --git a/src/Task/Product/CreateSimpleProductEntitiesTask.php b/src/Task/Product/CreateSimpleProductEntitiesTask.php index 30e33f15..2caa86ba 100644 --- a/src/Task/Product/CreateSimpleProductEntitiesTask.php +++ b/src/Task/Product/CreateSimpleProductEntitiesTask.php @@ -30,6 +30,7 @@ use Synolia\SyliusAkeneoPlugin\Payload\Product\ProductResourcePayload; use Synolia\SyliusAkeneoPlugin\Provider\AkeneoAttributeDataProviderInterface; use Synolia\SyliusAkeneoPlugin\Provider\AkeneoTaskProvider; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; use Synolia\SyliusAkeneoPlugin\Repository\ChannelRepository; use Synolia\SyliusAkeneoPlugin\Repository\ProductFiltersRulesRepository; use Synolia\SyliusAkeneoPlugin\Service\SyliusAkeneoLocaleCodeProvider; @@ -91,7 +92,7 @@ public function __construct( RepositoryInterface $productVariantRepository, RepositoryInterface $channelPricingRepository, RepositoryInterface $localeRepository, - RepositoryInterface $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, FactoryInterface $productFactory, ProductVariantFactoryInterface $productVariantFactory, FactoryInterface $channelPricingFactory, @@ -113,7 +114,7 @@ public function __construct( $channelRepository, $channelPricingRepository, $localeRepository, - $productConfigurationRepository, + $productConfigurationProvider, $productVariantFactory, $channelPricingFactory, $akeneoLogger @@ -140,7 +141,7 @@ public function __invoke(PipelinePayloadInterface $payload): PipelinePayloadInte $this->logger->debug(self::class); $this->type = 'SimpleProduct'; $this->logger->notice(Messages::createOrUpdate($this->type)); - $this->productConfiguration = $this->productConfigurationRepository->findOneBy([]); + $this->productConfiguration = $this->productConfigurationProvider->getProductConfiguration(); /** @var \Synolia\SyliusAkeneoPlugin\Entity\ProductFiltersRules $filters */ $filters = $this->productFiltersRulesRepository->findOneBy([]); diff --git a/src/Task/ProductModel/AddOrUpdateProductModelTask.php b/src/Task/ProductModel/AddOrUpdateProductModelTask.php index f8579f1c..30f1dc4c 100644 --- a/src/Task/ProductModel/AddOrUpdateProductModelTask.php +++ b/src/Task/ProductModel/AddOrUpdateProductModelTask.php @@ -35,6 +35,7 @@ use Synolia\SyliusAkeneoPlugin\Provider\AkeneoAttributeDataProviderInterface; use Synolia\SyliusAkeneoPlugin\Provider\AkeneoFamilyPropertiesProvider; use Synolia\SyliusAkeneoPlugin\Provider\AkeneoTaskProvider; +use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface; use Synolia\SyliusAkeneoPlugin\Repository\ProductFiltersRulesRepository; use Synolia\SyliusAkeneoPlugin\Repository\ProductTaxonRepository; use Synolia\SyliusAkeneoPlugin\Service\SyliusAkeneoLocaleCodeProvider; @@ -107,8 +108,8 @@ final class AddOrUpdateProductModelTask implements AkeneoTaskInterface /** @var \Sylius\Component\Resource\Repository\RepositoryInterface */ private $productTranslationRepository; - /** @var \Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository */ - private $productConfigurationRepository; + /** @var \Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface */ + private $productConfigurationProvider; /** @var \Sylius\Component\Resource\Factory\FactoryInterface */ private $productTranslationFactory; @@ -149,7 +150,7 @@ public function __construct( AkeneoAttributeDataProviderInterface $akeneoAttributeDataProvider, ProductFiltersRulesRepository $productFiltersRulesRepository, RepositoryInterface $productTranslationRepository, - EntityRepository $productConfigurationRepository, + ProductConfigurationProviderInterface $productConfigurationProvider, FactoryInterface $productTranslationFactory, SlugGeneratorInterface $productSlugGenerator, AkeneoFamilyPropertiesProvider $akeneoFamilyPropertiesProvider, @@ -168,7 +169,7 @@ public function __construct( $this->akeneoAttributeDataProvider = $akeneoAttributeDataProvider; $this->productFiltersRulesRepository = $productFiltersRulesRepository; $this->productTranslationRepository = $productTranslationRepository; - $this->productConfigurationRepository = $productConfigurationRepository; + $this->productConfigurationProvider = $productConfigurationProvider; $this->productTranslationFactory = $productTranslationFactory; $this->productSlugGenerator = $productSlugGenerator; $this->akeneoFamilyPropertiesProvider = $akeneoFamilyPropertiesProvider; @@ -184,7 +185,7 @@ public function __invoke(PipelinePayloadInterface $payload): PipelinePayloadInte $this->type = $payload->getType(); $this->logger->notice(Messages::createOrUpdate($this->type)); $this->payload = $payload; - $this->productConfiguration = $this->productConfigurationRepository->findOneBy([]); + $this->productConfiguration = $this->productConfigurationProvider->getProductConfiguration(); $this->addAttributesToProductTask = $this->taskProvider->get(AddAttributesToProductTask::class); $this->addProductCategoriesTask = $this->taskProvider->get(AddProductToCategoriesTask::class); @@ -359,7 +360,7 @@ private function updateProductRequirementsForActiveLocales( $productTranslation = $this->setProductTranslation($product, $usedLocalesOnBothPlatform, $productName); /** @var ProductConfiguration $configuration */ - $configuration = $this->productConfigurationRepository->findOneBy([]); + $configuration = $this->productConfigurationProvider->getProductConfiguration(); if (null !== $product->getId() && null !== $configuration && null !== $productTranslation->getSlug() &&