vendor/shopware/core/Content/Flow/Dispatching/Action/AddOrderAffiliateAndCampaignCodeAction.php line 42

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Flow\Dispatching\Action;
  3. use Doctrine\DBAL\Connection;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  5. use Shopware\Core\Framework\Event\FlowEvent;
  6. use Shopware\Core\Framework\Event\OrderAware;
  7. use Shopware\Core\Framework\Uuid\Uuid;
  8. class AddOrderAffiliateAndCampaignCodeAction extends FlowAction
  9. {
  10.     private Connection $connection;
  11.     private EntityRepositoryInterface $orderRepository;
  12.     public function __construct(
  13.         Connection $connection,
  14.         EntityRepositoryInterface $orderRepository
  15.     ) {
  16.         $this->connection $connection;
  17.         $this->orderRepository $orderRepository;
  18.     }
  19.     public static function getName(): string
  20.     {
  21.         return 'action.add.order.affiliate.and.campaign.code';
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             self::getName() => 'handle',
  27.         ];
  28.     }
  29.     public function requirements(): array
  30.     {
  31.         return [OrderAware::class];
  32.     }
  33.     public function handle(FlowEvent $event): void
  34.     {
  35.         $config $event->getConfig();
  36.         if (!\array_key_exists('affiliateCode'$config) || !\array_key_exists('campaignCode'$config)) {
  37.             return;
  38.         }
  39.         $baseEvent $event->getEvent();
  40.         if (!$baseEvent instanceof OrderAware) {
  41.             return;
  42.         }
  43.         $orderId $baseEvent->getOrderId();
  44.         $orderData $this->getAffiliateAndCampaignCodeFromOrderId($orderId);
  45.         if (empty($orderData)) {
  46.             return;
  47.         }
  48.         $affiliateCode $orderData['affiliate_code'];
  49.         if ($affiliateCode === null || $config['affiliateCode']['upsert']) {
  50.             $affiliateCode $config['affiliateCode']['value'];
  51.         }
  52.         $campaignCode $orderData['campaign_code'];
  53.         if ($campaignCode === null || $config['campaignCode']['upsert']) {
  54.             $campaignCode $config['campaignCode']['value'];
  55.         }
  56.         $data = [];
  57.         if ($affiliateCode !== $orderData['affiliate_code']) {
  58.             $data['affiliateCode'] = $affiliateCode;
  59.         }
  60.         if ($campaignCode !== $orderData['campaign_code']) {
  61.             $data['campaignCode'] = $campaignCode;
  62.         }
  63.         if (empty($data)) {
  64.             return;
  65.         }
  66.         $data['id'] = $orderId;
  67.         $this->orderRepository->update([$data], $baseEvent->getContext());
  68.     }
  69.     private function getAffiliateAndCampaignCodeFromOrderId(string $orderId): array
  70.     {
  71.         $query $this->connection->createQueryBuilder();
  72.         $query->select(['affiliate_code''campaign_code']);
  73.         $query->from('`order`');
  74.         $query->where('id = :id');
  75.         $query->setParameter('id'Uuid::fromHexToBytes($orderId));
  76.         if (!$data $query->execute()->fetchAssociative()) {
  77.             return [];
  78.         }
  79.         return $data;
  80.     }
  81. }