<?php declare(strict_types=1); 
 
namespace Shopware\Core\Content\Flow\Dispatching\Action; 
 
use Doctrine\DBAL\Connection; 
use Shopware\Core\Checkout\Customer\Aggregate\CustomerGroup\CustomerGroupEntity; 
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface; 
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; 
use Shopware\Core\Framework\Event\CustomerGroupAware; 
use Shopware\Core\Framework\Event\DelayAware; 
use Shopware\Core\Framework\Event\FlowEvent; 
 
class SetCustomerGroupCustomFieldAction extends FlowAction 
{ 
    use CustomFieldActionTrait; 
 
    private Connection $connection; 
 
    private EntityRepositoryInterface $customerGroupRepository; 
 
    /** 
     * @internal 
     */ 
    public function __construct( 
        Connection $connection, 
        EntityRepositoryInterface $customerGroupRepository 
    ) { 
        $this->connection = $connection; 
        $this->customerGroupRepository = $customerGroupRepository; 
    } 
 
    public static function getName(): string 
    { 
        return 'action.set.customer.group.custom.field'; 
    } 
 
    public static function getSubscribedEvents(): array 
    { 
        return [ 
            self::getName() => 'handle', 
        ]; 
    } 
 
    public function requirements(): array 
    { 
        return [CustomerGroupAware::class, DelayAware::class]; 
    } 
 
    public function handle(FlowEvent $event): void 
    { 
        $baseEvent = $event->getEvent(); 
        if (!$baseEvent instanceof CustomerGroupAware) { 
            return; 
        } 
 
        $config = $event->getConfig(); 
        $customerGroupId = $baseEvent->getCustomerGroupId(); 
 
        /** @var CustomerGroupEntity $customerGroup */ 
        $customerGroup = $this->customerGroupRepository->search(new Criteria([$customerGroupId]), $baseEvent->getContext())->first(); 
 
        $customFields = $this->getCustomFieldForUpdating($customerGroup->getCustomfields(), $config); 
 
        if ($customFields === null) { 
            return; 
        } 
 
        $customFields = empty($customFields) ? null : $customFields; 
 
        $this->customerGroupRepository->update([ 
            [ 
                'id' => $customerGroupId, 
                'customFields' => $customFields, 
            ], 
        ], $baseEvent->getContext()); 
    } 
}