diff --git a/app/code/Magento/Checkout/Block/Registration.php b/app/code/Magento/Checkout/Block/Registration.php index a54c576873982ac8c8d40a710f53dd288d6b78e2..60ae21ce65721325b7da2aace9f359f596c475aa 100644 --- a/app/code/Magento/Checkout/Block/Registration.php +++ b/app/code/Magento/Checkout/Block/Registration.php @@ -29,12 +29,24 @@ class Registration extends \Magento\Framework\View\Element\Template */ protected $accountManagement; + /** + * @var \Magento\Sales\Api\OrderRepositoryInterface + */ + protected $orderRepository; + + /** + * @var \Magento\Sales\Model\Order\Address\Validator + */ + protected $addressValidator; + /** * @param Template\Context $context * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Customer\Model\Registration $registration * @param \Magento\Customer\Api\AccountManagementInterface $accountManagement + * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository + * @param \Magento\Sales\Model\Order\Address\Validator $addressValidator * @param array $data */ public function __construct( @@ -43,12 +55,16 @@ class Registration extends \Magento\Framework\View\Element\Template \Magento\Customer\Model\Session $customerSession, \Magento\Customer\Model\Registration $registration, \Magento\Customer\Api\AccountManagementInterface $accountManagement, + \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, + \Magento\Sales\Model\Order\Address\Validator $addressValidator, array $data = [] ) { $this->checkoutSession = $checkoutSession; $this->customerSession = $customerSession; $this->registration = $registration; $this->accountManagement = $accountManagement; + $this->orderRepository = $orderRepository; + $this->addressValidator = $addressValidator; parent::__construct($context, $data); } @@ -81,9 +97,28 @@ class Registration extends \Magento\Framework\View\Element\Template $this->customerSession->isLoggedIn() || !$this->registration->isAllowed() || !$this->accountManagement->isEmailAvailable($this->getEmailAddress()) + || !$this->validateAddresses() ) { return ''; } return parent::toHtml(); } + + /** + * Validate order addresses + * + * @return bool + */ + protected function validateAddresses() + { + $order = $this->orderRepository->get($this->checkoutSession->getLastOrderId()); + $addresses = $order->getAddresses(); + foreach ($addresses as $address) { + $result = $this->addressValidator->validateForCustomer($address); + if (is_array($result) && !empty($result)) { + return false; + } + } + return true; + } } diff --git a/app/code/Magento/Sales/Model/Order/Address/Validator.php b/app/code/Magento/Sales/Model/Order/Address/Validator.php index 4317f60f290b8f369aa763d9aff9370831448e01..22dd1afa697f32213d8910ef5280ae50fa3d271b 100644 --- a/app/code/Magento/Sales/Model/Order/Address/Validator.php +++ b/app/code/Magento/Sales/Model/Order/Address/Validator.php @@ -75,7 +75,7 @@ class Validator } /** - * Validate address attribute for payment operations + * Validate address attribute for customer creation * * @return bool|array * @SuppressWarnings(PHPMD.CyclomaticComplexity) @@ -83,7 +83,7 @@ class Validator * * @param Address $address */ - public function validateForPayment(Address $address) + public function validateForCustomer(Address $address) { if ($address->getShouldIgnoreValidation()) { return true; diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php index f98a2eff36e6325b0816b61ebae8e493a503b34b..ccb2deb9bd8e4850186a6331f980e85aabc36700 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php @@ -2352,4 +2352,9 @@ return [ ['loadPrices', 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'], ['_parseVariationPrices', '\Magento\ConfigurableImportExport\Model\Import\Product\Type\Configurable'], ['_collectSuperDataPrice', '\Magento\ConfigurableImportExport\Model\Import\Product\Type\Configurable'], + [ + 'validateForPayment', + 'Magento\Sales\Model\Order\Address\Validator', + 'Magento\Sales\Model\Order\Address\Validator::validateForCustomer' + ], ];