<?php declare(strict_types=1);
namespace SmartDato\DatoElectronicInvoicing\Validation;
use Shopware\Core\Framework\Validation\BuildValidationEvent;
use SmartDato\DatoElectronicInvoicing\Validation\Constraint\MainValidator;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class BuildValidationEventListener
*
* @package SmartDato\DatoElectronicInvoicing\Validation
*/
class BuildValidationEventListener implements EventSubscriberInterface
{
/**
* @inheritDoc
*/
public static function getSubscribedEvents(): array
{
return [
'framework.validation.address.create' => ['onAddressCreate'],
'framework.validation.address.update' => ['onAddressUpdate'],
'framework.validation.order.create' => ['onOrderCreate']
];
}
/**
* Event is dispatched when validating create address params, from register and address pages
*
* @param BuildValidationEvent $event
*
* Called from
*
* @see \Shopware\Core\Checkout\Customer\SalesChannel\AddressService::getValidationDefinition
* @see \Shopware\Core\Checkout\Customer\SalesChannel\RegisterRoute::getCreateAddressValidationDefinition
*/
public function onAddressCreate(BuildValidationEvent $event): void
{
if (MainValidator::checkAndRemoveShippingAddressValidation($event->getContext())) {
return;
}
$this->addValidationDefinitions($event);
MainValidator::addSkipNextShippingAddressValidationFlag($event->getContext());
}
/**
* Event is dispatched when validating update address params
*
* @param BuildValidationEvent $event
*
* Called from
*
* @see \Shopware\Core\Checkout\Customer\SalesChannel\AddressService::getValidationDefinition
*/
public function onAddressUpdate(BuildValidationEvent $event): void
{
$this->addValidationDefinitions($event);
}
/**
* Event is dispatched when validating create order params
*
* @param BuildValidationEvent $event
*
* Called from
*
* @see \Shopware\Core\Checkout\Order\SalesChannel\OrderService::getOrderCreateValidationDefinition
*/
public function onOrderCreate(BuildValidationEvent $event): void
{
$this->addValidationDefinitions($event);
}
/**
* Add validation definitions from context
*
* @param BuildValidationEvent $event
*/
private function addValidationDefinitions(BuildValidationEvent $event): void
{
MainValidator::checkAndAddValidationDefinitions($event->getContext(), $event->getDefinition());
}
}