classes/XLite/API/Endpoint/AttributeOption/EventSubscriber/PostWriteEventSubscriber.php line 55

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright (c) 2011-present Qualiteam software Ltd. All rights reserved.
  4.  * See https://www.x-cart.com/license-agreement.html for license details.
  5.  */
  6. namespace XLite\API\Endpoint\AttributeOption\EventSubscriber;
  7. use ApiPlatform\Core\EventListener\EventPriorities;
  8. use ApiPlatform\Core\Serializer\SerializerContextBuilderInterface;
  9. use ApiPlatform\Core\Util\RequestAttributesExtractor;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpKernel\Event\ViewEvent;
  13. use Symfony\Component\HttpKernel\KernelEvents;
  14. use XLite\Model\AttributeOption;
  15. use XLite\Model\AttributeValue\AttributeValueSelect;
  16. class PostWriteEventSubscriber implements EventSubscriberInterface
  17. {
  18.     protected SerializerContextBuilderInterface $serializerContextBuilder;
  19.     protected EntityManagerInterface $entityManager;
  20.     /**
  21.      * @var string[]
  22.      */
  23.     protected array $optionNames = [
  24.         'product_based_post_select',
  25.     ];
  26.     /**
  27.      * @var string[]
  28.      */
  29.     protected array $entityTypes = [
  30.         AttributeOption::class,
  31.     ];
  32.     public function __construct(
  33.         SerializerContextBuilderInterface $serializerContextBuilder,
  34.         EntityManagerInterface $entityManager
  35.     ) {
  36.         $this->serializerContextBuilder $serializerContextBuilder;
  37.         $this->entityManager $entityManager;
  38.     }
  39.     public static function getSubscribedEvents()
  40.     {
  41.         return [
  42.             KernelEvents::VIEW => ['setOptionValue'EventPriorities::POST_WRITE],
  43.         ];
  44.     }
  45.     public function setOptionValue(ViewEvent $event): void
  46.     {
  47.         $request $event->getRequest();
  48.         $attributes RequestAttributesExtractor::extractAttributes($request);
  49.         $context $this->serializerContextBuilder->createFromRequest($requestfalse$attributes);
  50.         if (
  51.             empty($context['collection_operation_name'])
  52.             || !in_array($context['collection_operation_name'], $this->optionNamestrue)
  53.             || !in_array(get_class($event->getControllerResult()), $this->entityTypes)
  54.         ) {
  55.             return;
  56.         }
  57.         /** @var \XLite\Model\AttributeOption $attributeOption */
  58.         $attributeOption $event->getControllerResult();
  59.         $product $attributeOption->getAttribute()->getProduct();
  60.         $attributeValue = new AttributeValueSelect();
  61.         $attributeValue->setProduct($product);
  62.         $attributeValue->setAttribute($attributeOption->getAttribute());
  63.         $attributeValue->setAttributeOption($attributeOption);
  64.         $this->entityManager->persist($attributeValue);
  65.         $this->entityManager->flush();
  66.     }
  67. }