From 8b19e5480f2ac45a6c276e76baddf48d3b86b038 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 2 Dec 2023 17:29:27 +0100 Subject: [PATCH] initial checking of first attempt --- composer.json | 31 +++++++++ .../ShippingCardInvalidCharactersError.php | 41 ++++++++++++ src/Core/Checkout/Cart/SmcCartValidator.php | 64 +++++++++++++++++++ src/Resources/config/services.xml | 12 ++++ src/Resources/snippet/en_GB/error.en-GB.json | 8 +++ 5 files changed, 156 insertions(+) create mode 100644 composer.json create mode 100644 src/Core/Checkout/Cart/Error/ShippingCardInvalidCharactersError.php create mode 100644 src/Core/Checkout/Cart/SmcCartValidator.php create mode 100644 src/Resources/config/services.xml create mode 100644 src/Resources/snippet/en_GB/error.en-GB.json diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..6e7e81d --- /dev/null +++ b/composer.json @@ -0,0 +1,31 @@ +{ + "name": "sysmocom/shopware6-address-latin", + "description": "latin character address enforcement", + "version": "0.0.1", + "type": "shopware-platform-plugin", + "license": "AGPL-3.0-or-later", + "authors": [ + { + "name": "Harald Welte", + "email": "hwelte@sysmocom.de", + "role": "main developer" + } + ], + "minimum-stability": "dev", + "repositories": [ + ], + "require": { + }, + "autoload": { + "psr-4": { + "SmcAddressLatin\\": "src/" + } + }, + "extra": { + "shopware-plugin-class": "SmcAddressLatin\\SmcAddressLatin", + "label": { + "de-DE": "shipcloud latin character address validation", + "en-GB": "shipcloud latin character address validation" + } + } +} diff --git a/src/Core/Checkout/Cart/Error/ShippingCardInvalidCharactersError.php b/src/Core/Checkout/Cart/Error/ShippingCardInvalidCharactersError.php new file mode 100644 index 0000000..c90eb2e --- /dev/null +++ b/src/Core/Checkout/Cart/Error/ShippingCardInvalidCharactersError.php @@ -0,0 +1,41 @@ +namespace SmcAddressLatin\Core\Checkout\Cart\Error; + +use Shopware\Core\Checkout\Cart\Error\Error; + +class ShippingCardInvalidCharactersError extends Error +{ + private const KEY = 'address-invalid-characters'; + + private string $erroneousFieldName; + + public function __construct(string $erroneousFieldName) + { + $this->erroneousFieldName = $erroneousFieldName; + parent::__construct(); + } + + public function getId(): string + { + return $this->erroneousFieldName; + } + + public function getMessageKey(): string + { + return self::KEY; + } + + public function getLevel(): int + { + return self::LEVEL_ERROR; + } + + public function blockOrder(): bool + { + return true; + } + + public function getParameters(): array + { + return [ 'erroneousFieldName' => $this->erroneousFieldName ]; + } +} diff --git a/src/Core/Checkout/Cart/SmcCartValidator.php b/src/Core/Checkout/Cart/SmcCartValidator.php new file mode 100644 index 0000000..4989858 --- /dev/null +++ b/src/Core/Checkout/Cart/SmcCartValidator.php @@ -0,0 +1,64 @@ +// /src/Core/Checkout/Cart/SmcCartValidator.php +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')); + } + } +} diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml new file mode 100644 index 0000000..7fe7497 --- /dev/null +++ b/src/Resources/config/services.xml @@ -0,0 +1,12 @@ +// /src/Resources/config/services.xml + + + + + + + + + diff --git a/src/Resources/snippet/en_GB/error.en-GB.json b/src/Resources/snippet/en_GB/error.en-GB.json new file mode 100644 index 0000000..a43196e --- /dev/null +++ b/src/Resources/snippet/en_GB/error.en-GB.json @@ -0,0 +1,8 @@ +{ + "checkout": { + "address-invalid-characters": "Shipping Address contains invalid characters." + }, + "error": { + "address-invalid-characters": "Shipping Address contains invalid characters." + } +}