Skip to content

Commit

Permalink
Introduce ProductConfigurationInterface to allow extension
Browse files Browse the repository at this point in the history
  • Loading branch information
adrienlucas committed Aug 23, 2021
1 parent b9106cb commit 5b33afc
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 33 deletions.
10 changes: 5 additions & 5 deletions src/Provider/ExcludedAttributesProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 [];
Expand Down
10 changes: 10 additions & 0 deletions src/Provider/ProductConfigurationProviderInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Synolia\SyliusAkeneoPlugin\Provider;

use Synolia\SyliusAkeneoPlugin\Entity\ProductConfiguration;

interface ProductConfigurationProviderInterface
{
public function getProductConfiguration(): ?ProductConfiguration;
}
8 changes: 7 additions & 1 deletion src/Repository/ProductConfigurationRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@
namespace Synolia\SyliusAkeneoPlugin\Repository;

use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository;
use Synolia\SyliusAkeneoPlugin\Entity\ProductConfiguration;
use Synolia\SyliusAkeneoPlugin\Provider\ProductConfigurationProviderInterface;

final class ProductConfigurationRepository extends EntityRepository
final class ProductConfigurationRepository extends EntityRepository implements ProductConfigurationProviderInterface
{
public function getProductConfiguration(): ?ProductConfiguration
{
return $this->findOneBy([]);
}
}
11 changes: 6 additions & 5 deletions src/Service/ProductChannelEnabler.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;
}
Expand Down Expand Up @@ -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.');
Expand Down
5 changes: 3 additions & 2 deletions src/Task/Association/CreateProductAssociationTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -41,7 +42,7 @@ public function __construct(
ChannelRepository $channelRepository,
RepositoryInterface $channelPricingRepository,
RepositoryInterface $localeRepository,
RepositoryInterface $productConfigurationRepository,
ProductConfigurationProviderInterface $productConfigurationProvider,
ProductVariantFactoryInterface $productVariantFactory,
FactoryInterface $channelPricingFactory,
LoggerInterface $akeneoLogger
Expand All @@ -53,7 +54,7 @@ public function __construct(
$channelRepository,
$channelPricingRepository,
$localeRepository,
$productConfigurationRepository,
$productConfigurationProvider,
$productVariantFactory,
$channelPricingFactory,
$akeneoLogger
Expand Down
11 changes: 6 additions & 5 deletions src/Task/Product/AbstractCreateProductEntities.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand All @@ -62,7 +63,7 @@ public function __construct(
ChannelRepository $channelRepository,
RepositoryInterface $channelPricingRepository,
RepositoryInterface $localeRepository,
RepositoryInterface $productConfigurationRepository,
ProductConfigurationProviderInterface $productConfigurationProvider,
ProductVariantFactoryInterface $productVariantFactory,
FactoryInterface $channelPricingFactory,
LoggerInterface $akeneoLogger
Expand All @@ -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;
Expand Down Expand Up @@ -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.');
Expand Down
9 changes: 5 additions & 4 deletions src/Task/Product/AbstractInsertProductImageTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions src/Task/Product/CreateConfigurableProductEntitiesTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -96,7 +97,7 @@ public function __construct(
ChannelRepository $channelRepository,
RepositoryInterface $channelPricingRepository,
RepositoryInterface $localeRepository,
RepositoryInterface $productConfigurationRepository,
ProductConfigurationProviderInterface $productConfigurationProvider,
ProductGroupRepository $productGroupRepository,
ProductVariantFactoryInterface $productVariantFactory,
FactoryInterface $channelPricingFactory,
Expand All @@ -116,7 +117,7 @@ public function __construct(
$channelRepository,
$channelPricingRepository,
$localeRepository,
$productConfigurationRepository,
$productConfigurationProvider,
$productVariantFactory,
$channelPricingFactory,
$akeneoLogger
Expand Down
7 changes: 4 additions & 3 deletions src/Task/Product/CreateSimpleProductEntitiesTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -91,7 +92,7 @@ public function __construct(
RepositoryInterface $productVariantRepository,
RepositoryInterface $channelPricingRepository,
RepositoryInterface $localeRepository,
RepositoryInterface $productConfigurationRepository,
ProductConfigurationProviderInterface $productConfigurationProvider,
FactoryInterface $productFactory,
ProductVariantFactoryInterface $productVariantFactory,
FactoryInterface $channelPricingFactory,
Expand All @@ -113,7 +114,7 @@ public function __construct(
$channelRepository,
$channelPricingRepository,
$localeRepository,
$productConfigurationRepository,
$productConfigurationProvider,
$productVariantFactory,
$channelPricingFactory,
$akeneoLogger
Expand All @@ -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([]);
Expand Down
13 changes: 7 additions & 6 deletions src/Task/ProductModel/AddOrUpdateProductModelTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -149,7 +150,7 @@ public function __construct(
AkeneoAttributeDataProviderInterface $akeneoAttributeDataProvider,
ProductFiltersRulesRepository $productFiltersRulesRepository,
RepositoryInterface $productTranslationRepository,
EntityRepository $productConfigurationRepository,
ProductConfigurationProviderInterface $productConfigurationProvider,
FactoryInterface $productTranslationFactory,
SlugGeneratorInterface $productSlugGenerator,
AkeneoFamilyPropertiesProvider $akeneoFamilyPropertiesProvider,
Expand All @@ -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;
Expand All @@ -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);

Expand Down Expand Up @@ -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() &&
Expand Down

0 comments on commit 5b33afc

Please sign in to comment.