eavConfig = $eavConfig; $this->directoryData = $directoryData; } /** * @inheritdoc */ public function validate(AbstractAddress $address) { $errors = array_merge( $this->checkRequredFields($address), $this->checkOptionalFields($address) ); return $errors; } /** * Check fields that are generally required. * * @param AbstractAddress $address * @return array * @throws \Zend_Validate_Exception */ private function checkRequredFields(AbstractAddress $address) { $errors = []; if (!\Zend_Validate::is($address->getFirstname(), 'NotEmpty')) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'firstname']); } if (!\Zend_Validate::is($address->getLastname(), 'NotEmpty')) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'lastname']); } if (!\Zend_Validate::is($address->getStreetLine(1), 'NotEmpty')) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'street']); } if (!\Zend_Validate::is($address->getCity(), 'NotEmpty')) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'city']); } return $errors; } /** * Check fields that are conditionally required. * * @param AbstractAddress $address * @return array * @throws \Magento\Framework\Exception\LocalizedException * @throws \Zend_Validate_Exception */ private function checkOptionalFields(AbstractAddress $address) { $errors = []; if ($this->isTelephoneRequired() && !\Zend_Validate::is($address->getTelephone(), 'NotEmpty') ) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'telephone']); } if ($this->isFaxRequired() && !\Zend_Validate::is($address->getFax(), 'NotEmpty') ) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'fax']); } if ($this->isCompanyRequired() && !\Zend_Validate::is($address->getCompany(), 'NotEmpty') ) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'company']); } $havingOptionalZip = $this->directoryData->getCountriesWithOptionalZip(); if (!in_array($address->getCountryId(), $havingOptionalZip) && !\Zend_Validate::is($address->getPostcode(), 'NotEmpty') ) { $errors[] = __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'postcode']); } return $errors; } /** * Check if company field required in configuration. * * @return bool * @throws \Magento\Framework\Exception\LocalizedException */ private function isCompanyRequired() { return $this->eavConfig->getAttribute('customer_address', 'company')->getIsRequired(); } /** * Check if telephone field required in configuration. * * @return bool * @throws \Magento\Framework\Exception\LocalizedException */ private function isTelephoneRequired() { return $this->eavConfig->getAttribute('customer_address', 'telephone')->getIsRequired(); } /** * Check if fax field required in configuration. * * @return bool * @throws \Magento\Framework\Exception\LocalizedException */ private function isFaxRequired() { return $this->eavConfig->getAttribute('customer_address', 'fax')->getIsRequired(); } }