Skip to content

Commit 3d72ee2

Browse files
committed
ACP2E-4354: Customer create form error messages are not translated
1 parent 70daaf1 commit 3d72ee2

File tree

19 files changed

+1282
-184
lines changed

19 files changed

+1282
-184
lines changed

app/code/Magento/Customer/Controller/Account/CreatePost.php

Lines changed: 19 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
use Magento\Framework\Exception\InputException;
4242
use Magento\Framework\Data\Form\FormKey\Validator;
4343
use Magento\Customer\Controller\AbstractAccount;
44-
use Magento\Framework\Validator\Exception as ValidatorException;
44+
use Magento\Customer\Model\ValidatorExceptionProcessor;
4545

4646
/**
4747
* Post create customer action
@@ -146,6 +146,11 @@ class CreatePost extends AbstractAccount implements CsrfAwareActionInterface, Ht
146146
*/
147147
private $formKeyValidator;
148148

149+
/**
150+
* @var ValidatorExceptionProcessor
151+
*/
152+
private $validatorExceptionProcessor;
153+
149154
/**
150155
* @var CustomerRepository
151156
*/
@@ -177,6 +182,7 @@ class CreatePost extends AbstractAccount implements CsrfAwareActionInterface, Ht
177182
* @param AccountRedirect $accountRedirect
178183
* @param CustomerRepository $customerRepository
179184
* @param Validator $formKeyValidator
185+
* @param ValidatorExceptionProcessor|null $validatorExceptionProcessor
180186
*
181187
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
182188
*/
@@ -200,7 +206,8 @@ public function __construct(
200206
DataObjectHelper $dataObjectHelper,
201207
AccountRedirect $accountRedirect,
202208
CustomerRepository $customerRepository,
203-
?Validator $formKeyValidator = null
209+
?Validator $formKeyValidator = null,
210+
?ValidatorExceptionProcessor $validatorExceptionProcessor = null
204211
) {
205212
$this->session = $customerSession;
206213
$this->scopeConfig = $scopeConfig;
@@ -222,6 +229,11 @@ public function __construct(
222229
$this->formKeyValidator = $formKeyValidator ?: ObjectManager::getInstance()->get(Validator::class);
223230
$this->customerRepository = $customerRepository;
224231
parent::__construct($context);
232+
$this->validatorExceptionProcessor = $validatorExceptionProcessor
233+
?? ObjectManager::getInstance()->get(ValidatorExceptionProcessor::class);
234+
if ($this->validatorExceptionProcessor !== null) {
235+
$this->validatorExceptionProcessor->setMessageManager($context->getMessageManager());
236+
}
225237
}
226238

227239
/**
@@ -425,7 +437,11 @@ public function execute()
425437
]
426438
);
427439
} catch (InputException $e) {
428-
$this->processInputException($e);
440+
if ($this->validatorExceptionProcessor !== null) {
441+
$this->validatorExceptionProcessor->processInputException($e);
442+
} else {
443+
$this->messageManager->addErrorMessage($e->getMessage());
444+
}
429445
} catch (LocalizedException $e) {
430446
$this->messageManager->addErrorMessage($e->getMessage());
431447
} catch (\Exception $e) {
@@ -516,65 +532,6 @@ private function getMessageManagerSuccessMessage(): MessageInterface
516532
return $message;
517533
}
518534

519-
/**
520-
* Process InputException and add error messages to message manager
521-
*
522-
* @param InputException $exception
523-
* @return void
524-
*/
525-
private function processInputException(InputException $exception): void
526-
{
527-
if ($exception instanceof ValidatorException) {
528-
$this->processValidatorException($exception);
529-
} else {
530-
$this->processStandardInputException($exception);
531-
}
532-
}
533-
534-
/**
535-
* Process ValidatorException by extracting, translating and merging again individual messages
536-
*
537-
* @param ValidatorException $exception
538-
* @return void
539-
*/
540-
private function processValidatorException(ValidatorException $exception): void
541-
{
542-
$validatorMessages = $exception->getMessages();
543-
if (empty($validatorMessages)) {
544-
$this->messageManager->addErrorMessage($exception->getMessage());
545-
return;
546-
}
547-
548-
$translatedMessages = [];
549-
foreach ($validatorMessages as $message) {
550-
$messageText = $message instanceof AbstractMessage
551-
? $message->getText()
552-
: (string)$message;
553-
$translatedMessages[] = (string)__($messageText);
554-
}
555-
556-
$combinedTranslatedMessage = implode(' ', $translatedMessages);
557-
$this->messageManager->addErrorMessage($combinedTranslatedMessage);
558-
}
559-
560-
/**
561-
* Process standard InputException by extracting individual errors
562-
*
563-
* @param InputException $exception
564-
* @return void
565-
*/
566-
private function processStandardInputException(InputException $exception): void
567-
{
568-
$errors = $exception->getErrors();
569-
if (!empty($errors)) {
570-
foreach ($errors as $error) {
571-
$this->messageManager->addErrorMessage($error->getMessage());
572-
}
573-
} else {
574-
$this->messageManager->addErrorMessage($exception->getMessage());
575-
}
576-
}
577-
578535
/**
579536
* Convert punycode email back to Unicode
580537
*

app/code/Magento/Customer/Controller/Account/EditPost.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@
3737
use Magento\Framework\Exception\SessionException;
3838
use Magento\Framework\Exception\State\UserLockedException;
3939
use Magento\Customer\Controller\AbstractAccount;
40+
use Magento\Customer\Model\ValidatorExceptionProcessor;
4041
use Magento\Framework\Phrase;
42+
use Magento\Framework\Message\AbstractMessage;
43+
use Magento\Framework\Validator\Exception as ValidatorException;
4144
use Magento\Framework\Filesystem;
4245
use Magento\Framework\App\Filesystem\DirectoryList;
4346

@@ -124,6 +127,11 @@ class EditPost extends AbstractAccount implements CsrfAwareActionInterface, Http
124127
*/
125128
private Url $customerUrl;
126129

130+
/**
131+
* @var ValidatorExceptionProcessor
132+
*/
133+
private $validatorExceptionProcessor;
134+
127135
/**
128136
* @param Context $context
129137
* @param Session $customerSession
@@ -138,6 +146,8 @@ class EditPost extends AbstractAccount implements CsrfAwareActionInterface, Http
138146
* @param AccountConfirmation|null $accountConfirmation
139147
* @param Url|null $customerUrl
140148
* @param Mapper|null $customerMapper
149+
* @param ValidatorExceptionProcessor|null $validatorExceptionProcessor
150+
* @SuppressWarnings(PHPMD.NPathComplexity)
141151
*/
142152
public function __construct(
143153
Context $context,
@@ -152,7 +162,8 @@ public function __construct(
152162
?SessionCleanerInterface $sessionCleaner = null,
153163
?AccountConfirmation $accountConfirmation = null,
154164
?Url $customerUrl = null,
155-
?Mapper $customerMapper = null
165+
?Mapper $customerMapper = null,
166+
?ValidatorExceptionProcessor $validatorExceptionProcessor = null
156167
) {
157168
parent::__construct($context);
158169
$this->session = $customerSession;
@@ -168,6 +179,11 @@ public function __construct(
168179
->get(AccountConfirmation::class);
169180
$this->customerUrl = $customerUrl ?: ObjectManager::getInstance()->get(Url::class);
170181
$this->customerMapper = $customerMapper ?: ObjectManager::getInstance()->get(Mapper::class);
182+
$this->validatorExceptionProcessor = $validatorExceptionProcessor
183+
?? ObjectManager::getInstance()->get(ValidatorExceptionProcessor::class);
184+
if ($this->validatorExceptionProcessor !== null) {
185+
$this->validatorExceptionProcessor->setMessageManager($context->getMessageManager());
186+
}
171187
}
172188

173189
/**
@@ -280,9 +296,13 @@ public function execute()
280296

281297
return $resultRedirect->setPath('customer/account/login');
282298
} catch (InputException $e) {
283-
$this->messageManager->addErrorMessage($this->escaper->escapeHtml($e->getMessage()));
284-
foreach ($e->getErrors() as $error) {
285-
$this->messageManager->addErrorMessage($this->escaper->escapeHtml($error->getMessage()));
299+
if ($this->validatorExceptionProcessor !== null) {
300+
$this->validatorExceptionProcessor->processInputException(
301+
$e,
302+
fn($message) => $this->escaper->escapeHtml($message)
303+
);
304+
} else {
305+
$this->messageManager->addErrorMessage($this->escaper->escapeHtml($e->getMessage()));
286306
}
287307
} catch (LocalizedException $e) {
288308
$this->messageManager->addErrorMessage($e->getMessage());

app/code/Magento/Customer/Controller/Address/FormPost.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
use Magento\Framework\App\ObjectManager;
2525
use Magento\Framework\Controller\Result\ForwardFactory;
2626
use Magento\Framework\Data\Form\FormKey\Validator as FormKeyValidator;
27+
use Magento\Customer\Model\ValidatorExceptionProcessor;
2728
use Magento\Framework\Exception\InputException;
2829
use Magento\Framework\Exception\NotFoundException;
2930
use Magento\Framework\Filesystem;
31+
use Magento\Framework\Message\AbstractMessage;
32+
use Magento\Framework\Validator\Exception as ValidatorException;
3033
use Magento\Framework\Reflection\DataObjectProcessor;
3134
use Magento\Framework\View\Result\PageFactory;
3235

@@ -67,6 +70,11 @@ class FormPost extends \Magento\Customer\Controller\Address implements HttpPostA
6770
*/
6871
private $fileNameValidator;
6972

73+
/**
74+
* @var ValidatorExceptionProcessor
75+
*/
76+
private $validatorExceptionProcessor;
77+
7078
/**
7179
* @param Context $context
7280
* @param Session $customerSession
@@ -84,6 +92,7 @@ class FormPost extends \Magento\Customer\Controller\Address implements HttpPostA
8492
* @param Filesystem|null $filesystem
8593
* @param AddressMetadataInterface|null $addressMetadata
8694
* @param FileNameValidator|null $fileNameValidator
95+
* @param ValidatorExceptionProcessor|null $validatorExceptionProcessor
8796
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
8897
*/
8998
public function __construct(
@@ -102,7 +111,8 @@ public function __construct(
102111
HelperData $helperData,
103112
?Filesystem $filesystem = null,
104113
?AddressMetadataInterface $addressMetadata = null,
105-
?FileNameValidator $fileNameValidator = null
114+
?FileNameValidator $fileNameValidator = null,
115+
?ValidatorExceptionProcessor $validatorExceptionProcessor = null
106116
) {
107117
$this->regionFactory = $regionFactory;
108118
$this->helperData = $helperData;
@@ -124,6 +134,11 @@ public function __construct(
124134
$resultForwardFactory,
125135
$resultPageFactory
126136
);
137+
$this->validatorExceptionProcessor = $validatorExceptionProcessor
138+
?? ObjectManager::getInstance()->get(ValidatorExceptionProcessor::class);
139+
if ($this->validatorExceptionProcessor !== null) {
140+
$this->validatorExceptionProcessor->setMessageManager($context->getMessageManager());
141+
}
127142
}
128143

129144
/**
@@ -249,9 +264,10 @@ public function execute()
249264
$url = $this->_buildUrl('*/*/index', ['_secure' => true]);
250265
return $this->resultRedirectFactory->create()->setUrl($this->_redirect->success($url));
251266
} catch (InputException $e) {
252-
$this->messageManager->addErrorMessage($e->getMessage());
253-
foreach ($e->getErrors() as $error) {
254-
$this->messageManager->addErrorMessage($error->getMessage());
267+
if ($this->validatorExceptionProcessor !== null) {
268+
$this->validatorExceptionProcessor->processInputException($e);
269+
} else {
270+
$this->messageManager->addErrorMessage($e->getMessage());
255271
}
256272
} catch (\Exception $e) {
257273
$redirectUrl = $this->_buildUrl('*/*/index');

app/code/Magento/Customer/Controller/Adminhtml/Address/Save.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
use Magento\Framework\App\ObjectManager;
1313
use Magento\Framework\Controller\Result\Json;
1414
use Magento\Framework\Controller\Result\JsonFactory;
15+
use Magento\Customer\Model\ValidatorExceptionProcessor;
16+
use Magento\Framework\Exception\InputException;
1517
use Magento\Framework\Exception\LocalizedException;
1618
use Magento\Framework\Exception\NoSuchEntityException;
19+
use Magento\Framework\Message\AbstractMessage;
20+
use Magento\Framework\Validator\Exception as ValidatorException;
1721
use Magento\Store\Model\StoreManagerInterface;
1822
use Psr\Log\LoggerInterface;
1923

@@ -75,6 +79,11 @@ class Save extends Action implements HttpPostActionInterface
7579
*/
7680
private $customerRegistry;
7781

82+
/**
83+
* @var ValidatorExceptionProcessor
84+
*/
85+
private $validatorExceptionProcessor;
86+
7887
/**
7988
* @param Action\Context $context
8089
* @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
@@ -86,6 +95,7 @@ class Save extends Action implements HttpPostActionInterface
8695
* @param JsonFactory $resultJsonFactory
8796
* @param StoreManagerInterface|null $storeManager
8897
* @param CustomerRegistry|null $customerRegistry
98+
* @param ValidatorExceptionProcessor|null $validatorExceptionProcessor
8999
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
90100
*/
91101
public function __construct(
@@ -98,7 +108,8 @@ public function __construct(
98108
LoggerInterface $logger,
99109
JsonFactory $resultJsonFactory,
100110
?StoreManagerInterface $storeManager = null,
101-
?CustomerRegistry $customerRegistry = null
111+
?CustomerRegistry $customerRegistry = null,
112+
?ValidatorExceptionProcessor $validatorExceptionProcessor = null
102113
) {
103114
parent::__construct($context);
104115
$this->addressRepository = $addressRepository;
@@ -112,6 +123,11 @@ public function __construct(
112123
?? ObjectManager::getInstance()->get(StoreManagerInterface::class);
113124
$this->customerRegistry = $customerRegistry
114125
?? ObjectManager::getInstance()->get(CustomerRegistry::class);
126+
$this->validatorExceptionProcessor = $validatorExceptionProcessor
127+
?? ObjectManager::getInstance()->get(ValidatorExceptionProcessor::class);
128+
if ($this->validatorExceptionProcessor !== null) {
129+
$this->validatorExceptionProcessor->setMessageManager($context->getMessageManager());
130+
}
115131
}
116132

117133
/**
@@ -175,7 +191,11 @@ public function execute(): Json
175191
$message = __('There is no customer with such id.');
176192
} catch (LocalizedException $e) {
177193
$error = true;
178-
$message = __($e->getMessage());
194+
if ($e instanceof InputException && $this->validatorExceptionProcessor !== null) {
195+
$message = $this->validatorExceptionProcessor->processInputExceptionForJson($e);
196+
} else {
197+
$message = __($e->getMessage());
198+
}
179199
$this->logger->critical($e);
180200
} catch (\Exception $e) {
181201
$error = true;

0 commit comments

Comments
 (0)