SmcAddressLatin/src/Core/Checkout/Cart/SmcCartValidator.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'));
}
}
}