64 lines
2.7 KiB
PHP
64 lines
2.7 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace SmcAddressLatin\Core\Checkout\Cart;
|
|
|
|
use Shopware\Core\Checkout\Cart\Cart;
|
|
use Shopware\Core\Checkout\Cart\CartValidatorInterface;
|
|
use Shopware\Core\Checkout\Cart\Error\ErrorCollection;
|
|
use Shopware\Core\System\SalesChannel\SalesChannelContext;
|
|
use SmcAddressLatin\Core\Checkout\Cart\Error\ShippingAddressInvalidCharactersError;
|
|
|
|
class SmcCartValidator implements CartValidatorInterface
|
|
{
|
|
private static function contains_only_latin(string $input): bool {
|
|
if ($input === null) {
|
|
return true;
|
|
}
|
|
if (preg_match('/[^\p{Common}\p{Latin}]/u', $input)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function validate(Cart $cart, ErrorCollection $errorCollection, SalesChannelContext $context): void
|
|
{
|
|
$validateShipping = $cart->getLineItems()->count() === 0
|
|
|| $cart->getLineItems()->hasLineItemWithState(State::IS_PHYSICAL);
|
|
if (!$validateShipping) {
|
|
return;
|
|
}
|
|
|
|
$ship_addr = $context->getShippingLocation()->getAddress();
|
|
if (!$this->contains_only_latin($ship_addr->getFirstName())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('First Name'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getLastName())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Last Name'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getCity())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('City'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getCompany())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Company'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getDepartment())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Department'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getTitle())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Title'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getStreet())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Street'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getAdditionalAddressLine1())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Additional Address Line 1'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getAdditionalAddressLine2())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Additional Address Line 2'));
|
|
}
|
|
if (!$this->contains_only_latin($ship_addr->getSalutation())) {
|
|
$errors->add(new ShippingAddressInvalidCharactersError('Salutation'));
|
|
}
|
|
}
|
|
}
|