Skip to content

Commit 9071164

Browse files
committed
Merge remote-tracking branch 'origin/ACP2E-4354' into PR_2025_12_11_muntianu
2 parents e5dc99a + 0d31dd3 commit 9071164

File tree

19 files changed

+1446
-65
lines changed

19 files changed

+1446
-65
lines changed

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Magento\Framework\App\RequestInterface;
2222
use Magento\Framework\Controller\Result\Redirect;
2323
use Magento\Framework\Exception\LocalizedException;
24+
use Magento\Framework\Message\AbstractMessage;
2425
use Magento\Framework\Message\MessageInterface;
2526
use Magento\Framework\Phrase;
2627
use Magento\Store\Model\StoreManagerInterface;
@@ -40,6 +41,7 @@
4041
use Magento\Framework\Exception\InputException;
4142
use Magento\Framework\Data\Form\FormKey\Validator;
4243
use Magento\Customer\Controller\AbstractAccount;
44+
use Magento\Customer\Model\ValidatorExceptionProcessor;
4345

4446
/**
4547
* Post create customer action
@@ -144,6 +146,11 @@ class CreatePost extends AbstractAccount implements CsrfAwareActionInterface, Ht
144146
*/
145147
private $formKeyValidator;
146148

149+
/**
150+
* @var ValidatorExceptionProcessor
151+
*/
152+
private $validatorExceptionProcessor;
153+
147154
/**
148155
* @var CustomerRepository
149156
*/
@@ -175,6 +182,7 @@ class CreatePost extends AbstractAccount implements CsrfAwareActionInterface, Ht
175182
* @param AccountRedirect $accountRedirect
176183
* @param CustomerRepository $customerRepository
177184
* @param Validator $formKeyValidator
185+
* @param ValidatorExceptionProcessor|null $validatorExceptionProcessor
178186
*
179187
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
180188
*/
@@ -198,7 +206,8 @@ public function __construct(
198206
DataObjectHelper $dataObjectHelper,
199207
AccountRedirect $accountRedirect,
200208
CustomerRepository $customerRepository,
201-
?Validator $formKeyValidator = null
209+
?Validator $formKeyValidator = null,
210+
?ValidatorExceptionProcessor $validatorExceptionProcessor = null
202211
) {
203212
$this->session = $customerSession;
204213
$this->scopeConfig = $scopeConfig;
@@ -220,6 +229,11 @@ public function __construct(
220229
$this->formKeyValidator = $formKeyValidator ?: ObjectManager::getInstance()->get(Validator::class);
221230
$this->customerRepository = $customerRepository;
222231
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+
}
223237
}
224238

225239
/**
@@ -423,9 +437,10 @@ public function execute()
423437
]
424438
);
425439
} catch (InputException $e) {
426-
$this->messageManager->addErrorMessage($e->getMessage());
427-
foreach ($e->getErrors() as $error) {
428-
$this->messageManager->addErrorMessage($error->getMessage());
440+
if ($this->validatorExceptionProcessor !== null) {
441+
$this->validatorExceptionProcessor->processInputException($e);
442+
} else {
443+
$this->messageManager->addErrorMessage($e->getMessage());
429444
}
430445
} catch (LocalizedException $e) {
431446
$this->messageManager->addErrorMessage($e->getMessage());

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;

app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
use Magento\Framework\Exception\NoSuchEntityException;
1616
use Magento\Framework\Message\MessageInterface;
1717
use Magento\Framework\App\ObjectManager;
18+
use Magento\Customer\Model\ValidatorExceptionProcessor;
19+
use Magento\Framework\Exception\InputException;
20+
use Magento\Framework\Message\AbstractMessage;
21+
use Magento\Framework\Validator\Exception as ValidatorException;
1822

1923
/**
2024
* Customer inline edit action
@@ -75,6 +79,11 @@ class InlineEdit extends \Magento\Backend\App\Action implements HttpPostActionIn
7579
*/
7680
private $escaper;
7781

82+
/**
83+
* @var ValidatorExceptionProcessor
84+
*/
85+
private $validatorExceptionProcessor;
86+
7887
/**
7988
* @param Action\Context $context
8089
* @param CustomerRepositoryInterface $customerRepository
@@ -83,7 +92,8 @@ class InlineEdit extends \Magento\Backend\App\Action implements HttpPostActionIn
8392
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
8493
* @param \Psr\Log\LoggerInterface $logger
8594
* @param AddressRegistry|null $addressRegistry
86-
* @param \Magento\Framework\Escaper $escaper
95+
* @param \Magento\Framework\Escaper|null $escaper
96+
* @param ValidatorExceptionProcessor|null $validatorExceptionProcessor
8797
*/
8898
public function __construct(
8999
Action\Context $context,
@@ -93,7 +103,8 @@ public function __construct(
93103
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
94104
\Psr\Log\LoggerInterface $logger,
95105
?AddressRegistry $addressRegistry = null,
96-
?\Magento\Framework\Escaper $escaper = null
106+
?\Magento\Framework\Escaper $escaper = null,
107+
?ValidatorExceptionProcessor $validatorExceptionProcessor = null
97108
) {
98109
$this->customerRepository = $customerRepository;
99110
$this->resultJsonFactory = $resultJsonFactory;
@@ -103,13 +114,19 @@ public function __construct(
103114
$this->addressRegistry = $addressRegistry ?: ObjectManager::getInstance()->get(AddressRegistry::class);
104115
$this->escaper = $escaper ?: ObjectManager::getInstance()->get(\Magento\Framework\Escaper::class);
105116
parent::__construct($context);
117+
$this->validatorExceptionProcessor = $validatorExceptionProcessor
118+
?? ObjectManager::getInstance()->get(ValidatorExceptionProcessor::class);
119+
if ($this->validatorExceptionProcessor !== null) {
120+
$this->validatorExceptionProcessor->setMessageManager($context->getMessageManager());
121+
}
106122
}
107123

108124
/**
109125
* Get email notification
110126
*
111127
* @return EmailNotificationInterface
112128
* @deprecated 100.1.0
129+
* @see no alternative
113130
*/
114131
private function getEmailNotification()
115132
{
@@ -247,9 +264,17 @@ protected function saveCustomer(CustomerInterface $customer)
247264
// No need to validate customer address during inline edit action
248265
$this->disableAddressValidation($customer);
249266
$this->customerRepository->save($customer);
250-
} catch (\Magento\Framework\Exception\InputException $e) {
251-
$this->getMessageManager()
252-
->addError($this->getErrorWithCustomerId($this->escaper->escapeHtml($e->getMessage())));
267+
} catch (InputException $e) {
268+
if ($this->validatorExceptionProcessor !== null) {
269+
$this->validatorExceptionProcessor->processInputException(
270+
$e,
271+
fn($message) => $this->getErrorWithCustomerId($this->escaper->escapeHtml($message)),
272+
'addError'
273+
);
274+
} else {
275+
$escapedMessage = $this->escaper->escapeHtml($e->getMessage());
276+
$this->messageManager->addError($this->getErrorWithCustomerId($escapedMessage));
277+
}
253278
$this->logger->critical($e);
254279
} catch (\Magento\Framework\Exception\LocalizedException $e) {
255280
$this->getMessageManager()

0 commit comments

Comments
 (0)