custom/plugins/EwCustomRegister/src/Subscriber/RegisterSubscriber.php line 40

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Ew\CustomRegister\Subscriber;
  3. use Shopware\Core\Checkout\Customer\CustomerEvents;
  4. use Shopware\Core\Checkout\Customer\Event\CustomerRegisterEvent;
  5. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
  7. use Shopware\Core\Framework\Struct\ArrayStruct;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. class RegisterSubscriber implements EventSubscriberInterface
  11. {
  12.     private RequestStack $requestStack;
  13.     private EntityRepository $customerRepository;
  14.     private EntityRepository $customerAddressRepository;
  15.     public function __construct(
  16.         RequestStack $requestStack,
  17.         EntityRepository $customerRepository,
  18.         EntityRepository $customerAddressRepository
  19.     ) {
  20.         $this->requestStack $requestStack;
  21.         $this->customerRepository $customerRepository;
  22.         $this->customerAddressRepository $customerAddressRepository;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             CustomerRegisterEvent::class => 'onCustomerRegistration',
  28.             CustomerEvents::CUSTOMER_WRITTEN_EVENT => 'onChangeProfile',
  29.             CustomerEvents::CUSTOMER_ADDRESS_WRITTEN_EVENT => 'onChangeAddress',
  30.         ];
  31.     }
  32.     public function onCustomerRegistration(CustomerRegisterEvent $event)
  33.     {
  34.         $request $this->requestStack->getCurrentRequest();
  35.         $medicalData $request->get('medicalData');
  36.         $data[] = [
  37.             'id' => $event->getCustomer()->getId(),
  38.             'customFields' => $medicalData
  39.         ];
  40.         $this->customerRepository->upsert($data$event->getContext());
  41.     }
  42.     public function onChangeProfile(EntityWrittenEvent $event)
  43.     {
  44.         $currentRequest $this->requestStack->getCurrentRequest();
  45.         $updatedOnce $event->getContext()->getExtension('updatedOnce');
  46.         if (!$updatedOnce) {
  47.             $requests $currentRequest->request;
  48.             $data = [];
  49.             foreach ($requests as $key => $request) {
  50.                 if ($request != "" && strpos($key'medical_info_') !== false) {
  51.                     $data[$key] = $request;
  52.                 }
  53.             }
  54.             if (count($data) > 0) {
  55.                 $payloads $event->getPayloads()[0];
  56.                 $customerId $payloads['id'];
  57.                 $bodyHeight $data['medical_info_bodyHeight'] ?? "";
  58.                 $bodyWeight $data['medical_info_bodyWeight'] ?? "";
  59.                 $bodyDesiredWeight $data['medical_info_bodyDesiredWeight'] ?? "";
  60.                 $event->getContext()->setExtensions(['updatedOnce' => new ArrayStruct(['isUpdated' => true])]);
  61.                 $this->customerRepository->upsert([[
  62.                     'id' => $customerId,
  63.                     'customFields' => [
  64.                         "bodyHeight" => $bodyHeight,
  65.                         "bodyWeight" => $bodyWeight,
  66.                         "bodyDesiredWeight" => $bodyDesiredWeight,
  67.                     ]
  68.                 ]], $event->getContext());
  69.             }
  70.         }
  71.     }
  72.     public function onChangeAddress(EntityWrittenEvent $event)
  73.     {
  74.         $currentRequest $this->requestStack->getCurrentRequest();
  75.         $updatedOnce $event->getContext()->getExtension('updatedOnce');
  76.         if (!$updatedOnce) {
  77.             $requests $currentRequest->request;
  78.             $data = [];
  79.             foreach ($requests as $key => $request) {
  80.                 if ($request != "" && $key == 'customFields') {
  81.                     foreach ($request as $customFieldName => $customField) {
  82.                         $data[$customFieldName] = $customField;
  83.                     }
  84.                 }
  85.             }
  86.             if (count($data) > 0) {
  87.                 $payloads $event->getPayloads()[0];
  88.                 $addressId $payloads['id'];
  89.                 $houseNumber $data['house_number'] ?? "";
  90.                 $event->getContext()->setExtensions(['updatedOnce' => new ArrayStruct(['isUpdated' => true])]);
  91.                 $this->customerAddressRepository->upsert([[
  92.                     'id' => $addressId,
  93.                     'customFields' => [
  94.                         "house_number" => $houseNumber,
  95.                     ]
  96.                 ]], $event->getContext());
  97.             }
  98.         }
  99.     }
  100. }