65 lines
2.8 KiB
PHP
65 lines
2.8 KiB
PHP
// <plugin root>/src/Core/Checkout/Cart/SmcCartValidator.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
|
|
{
|
|
public function validate(Cart $cart, ErrorCollection $errorCollection, SalesChannelContext $salesChannelContext): void
|
|
{
|
|
$validateShipping = $cart->getLineItems()->count() === 0
|
|
|| $cart->getLineItems()->hasLineItemWithState(State::IS_PHYSICAL);
|
|
if (!$validateShipping) {
|
|
return;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
$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'));
|
|
}
|
|
}
|
|
}
|