custom/plugins/PayonePayment/src/EventListener/OrderValidationEventListener.php line 36

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace PayonePayment\EventListener;
  4. use PayonePayment\PaymentHandler\AbstractPayonePaymentHandler;
  5. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\PaymentHandlerRegistry;
  6. use Shopware\Core\Framework\Validation\BuildValidationEvent;
  7. use Shopware\Core\Framework\Validation\DataValidationDefinition;
  8. use Shopware\Core\PlatformRequest;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. class OrderValidationEventListener implements EventSubscriberInterface
  14. {
  15.     private RequestStack $requestStack;
  16.     private PaymentHandlerRegistry $paymentHandlerRegistry;
  17.     public function __construct(RequestStack $requestStackPaymentHandlerRegistry $paymentHandlerRegistry)
  18.     {
  19.         $this->requestStack $requestStack;
  20.         $this->paymentHandlerRegistry $paymentHandlerRegistry;
  21.     }
  22.     public static function getSubscribedEvents(): array
  23.     {
  24.         return [
  25.             'framework.validation.order.create' => 'validateOrderData',
  26.         ];
  27.     }
  28.     public function validateOrderData(BuildValidationEvent $event): void
  29.     {
  30.         $request $this->requestStack->getCurrentRequest();
  31.         if ($request === null) {
  32.             return;
  33.         }
  34.         $salesChannelContext $this->getSalesChannelContextFromRequest($request);
  35.         $paymentHandlerIdentifier $salesChannelContext->getPaymentMethod()->getHandlerIdentifier();
  36.         $paymentHandler $this->paymentHandlerRegistry->getHandler($paymentHandlerIdentifier);
  37.         if ($paymentHandler instanceof AbstractPayonePaymentHandler) {
  38.             $validationDefinitions $paymentHandler->getValidationDefinitions($salesChannelContext);
  39.             if ($validationDefinitions !== []) {
  40.                 $this->addSubConstraints($event->getDefinition(), $validationDefinitions);
  41.             }
  42.         }
  43.     }
  44.     private function getSalesChannelContextFromRequest(Request $request): SalesChannelContext
  45.     {
  46.         return $request->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT);
  47.     }
  48.     private function addSubConstraints(DataValidationDefinition $parent, array $children): void
  49.     {
  50.         foreach ($children as $key => $constraints) {
  51.             if ($constraints instanceof DataValidationDefinition) {
  52.                 $parent->addSub($key$constraints);
  53.             } else {
  54.                 \call_user_func_array([$parent'add'], array_merge([$key], $constraints));
  55.             }
  56.         }
  57.     }
  58. }