File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-customer/Block/Address/Edit.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Customer\Block\Address;
use Magento\Customer\Api\AddressMetadataInterface;
use Magento\Customer\Helper\Address;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Exception\NoSuchEntityException;
/**
* Customer address edit block
*
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @since 100.0.2
*/
class Edit extends \Magento\Directory\Block\Data
{
/**
* @var \Magento\Customer\Api\Data\AddressInterface|null
*/
protected $_address = null;
/**
* @var \Magento\Customer\Model\Session
*/
protected $_customerSession;
/**
* @var \Magento\Customer\Api\AddressRepositoryInterface
*/
protected $_addressRepository;
/**
* @var \Magento\Customer\Api\Data\AddressInterfaceFactory
*/
protected $addressDataFactory;
/**
* @var \Magento\Customer\Helper\Session\CurrentCustomer
*/
protected $currentCustomer;
/**
* @var \Magento\Framework\Api\DataObjectHelper
*/
protected $dataObjectHelper;
/**
* @var AddressMetadataInterface
*/
private $addressMetadata;
/**
* Constructor
*
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Directory\Helper\Data $directoryHelper
* @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
* @param \Magento\Framework\App\Cache\Type\Config $configCacheType
* @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
* @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
* @param \Magento\Customer\Model\Session $customerSession
* @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
* @param \Magento\Customer\Api\Data\AddressInterfaceFactory $addressDataFactory
* @param \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
* @param array $data
* @param AddressMetadataInterface|null $addressMetadata
* @param Address|null $addressHelper
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Directory\Helper\Data $directoryHelper,
\Magento\Framework\Json\EncoderInterface $jsonEncoder,
\Magento\Framework\App\Cache\Type\Config $configCacheType,
\Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
\Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
\Magento\Customer\Model\Session $customerSession,
\Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
\Magento\Customer\Api\Data\AddressInterfaceFactory $addressDataFactory,
\Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer,
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
array $data = [],
AddressMetadataInterface $addressMetadata = null,
Address $addressHelper = null
) {
$this->_customerSession = $customerSession;
$this->_addressRepository = $addressRepository;
$this->addressDataFactory = $addressDataFactory;
$this->currentCustomer = $currentCustomer;
$this->dataObjectHelper = $dataObjectHelper;
$this->addressMetadata = $addressMetadata ?: ObjectManager::getInstance()->get(AddressMetadataInterface::class);
$data['addressHelper'] = $addressHelper ?: ObjectManager::getInstance()->get(Address::class);
$data['directoryHelper'] = $directoryHelper;
parent::__construct(
$context,
$directoryHelper,
$jsonEncoder,
$configCacheType,
$regionCollectionFactory,
$countryCollectionFactory,
$data
);
}
/**
* Prepare the layout of the address edit block.
*
* @return $this
*/
protected function _prepareLayout()
{
parent::_prepareLayout();
$this->initAddressObject();
$this->pageConfig->getTitle()->set($this->getTitle());
if ($postedData = $this->_customerSession->getAddressFormData(true)) {
$postedData['region'] = [
'region_id' => isset($postedData['region_id']) ? $postedData['region_id'] : null,
'region' => $postedData['region'],
];
$this->dataObjectHelper->populateWithArray(
$this->_address,
$postedData,
\Magento\Customer\Api\Data\AddressInterface::class
);
}
$this->precheckRequiredAttributes();
return $this;
}
/**
* Initialize address object.
*
* @return void
*/
private function initAddressObject()
{
// Init address object
if ($addressId = $this->getRequest()->getParam('id')) {
try {
$this->_address = $this->_addressRepository->getById($addressId);
if ($this->_address->getCustomerId() != $this->_customerSession->getCustomerId()) {
$this->_address = null;
}
} catch (NoSuchEntityException $e) {
$this->_address = null;
}
}
if ($this->_address === null || !$this->_address->getId()) {
$this->_address = $this->addressDataFactory->create();
$customer = $this->getCustomer();
$this->_address->setPrefix($customer->getPrefix());
$this->_address->setFirstname($customer->getFirstname());
$this->_address->setMiddlename($customer->getMiddlename());
$this->_address->setLastname($customer->getLastname());
$this->_address->setSuffix($customer->getSuffix());
}
}
/**
* Precheck attributes that may be required in attribute configuration.
*
* @return void
*/
private function precheckRequiredAttributes()
{
$precheckAttributes = $this->getData('check_attributes_on_render');
$requiredAttributesPrechecked = [];
if (!empty($precheckAttributes) && is_array($precheckAttributes)) {
foreach ($precheckAttributes as $attributeCode) {
$attributeMetadata = $this->addressMetadata->getAttributeMetadata($attributeCode);
if ($attributeMetadata && $attributeMetadata->isRequired()) {
$requiredAttributesPrechecked[$attributeCode] = $attributeCode;
}
}
}
$this->setData('required_attributes_prechecked', $requiredAttributesPrechecked);
}
/**
* Generate name block html.
*
* @return string
*/
public function getNameBlockHtml()
{
$nameBlock = $this->getLayout()
->createBlock(\Magento\Customer\Block\Widget\Name::class)
->setObject($this->getAddress());
return $nameBlock->toHtml();
}
/**
* Return the title, either editing an existing address, or adding a new one.
*
* @return string
*/
public function getTitle()
{
if ($title = $this->getData('title')) {
return $title;
}
if ($this->getAddress()->getId()) {
$title = __('Edit Address');
} else {
$title = __('Add New Address');
}
return $title;
}
/**
* Return the Url to go back.
*
* @return string
*/
public function getBackUrl()
{
if ($this->getData('back_url')) {
return $this->getData('back_url');
}
if ($this->getCustomerAddressCount()) {
return $this->getUrl('customer/address');
} else {
return $this->getUrl('customer/account/');
}
}
/**
* Return the Url for saving.
*
* @return string
*/
public function getSaveUrl()
{
return $this->_urlBuilder->getUrl(
'customer/address/formPost',
['_secure' => true, 'id' => $this->getAddress()->getId()]
);
}
/**
* Return the associated address.
*
* @return \Magento\Customer\Api\Data\AddressInterface
*/
public function getAddress()
{
return $this->_address;
}
/**
* Return the specified numbered street line.
*
* @param int $lineNumber
* @return string
*/
public function getStreetLine($lineNumber)
{
$street = $this->_address->getStreet();
return isset($street[$lineNumber - 1]) ? $street[$lineNumber - 1] : '';
}
/**
* Return the country Id.
*
* @return int|null|string
*/
public function getCountryId()
{
if ($countryId = $this->getAddress()->getCountryId()) {
return $countryId;
}
return parent::getCountryId();
}
/**
* Return the name of the region for the address being edited.
*
* @return string region name
*/
public function getRegion()
{
$region = $this->getAddress()->getRegion();
return $region === null ? '' : $region->getRegion();
}
/**
* Return the id of the region being edited.
*
* @return int region id
*/
public function getRegionId()
{
$region = $this->getAddress()->getRegion();
return $region === null ? 0 : $region->getRegionId();
}
/**
* Retrieve the number of addresses associated with the customer given a customer Id.
*
* @return int
*/
public function getCustomerAddressCount()
{
return count($this->getCustomer()->getAddresses());
}
/**
* Determine if the address can be set as the default billing address.
*
* @return bool|int
*/
public function canSetAsDefaultBilling()
{
if (!$this->getAddress()->getId()) {
return $this->getCustomerAddressCount();
}
return !$this->isDefaultBilling();
}
/**
* Determine if the address can be set as the default shipping address.
*
* @return bool|int
*/
public function canSetAsDefaultShipping()
{
if (!$this->getAddress()->getId()) {
return $this->getCustomerAddressCount();
}
return !$this->isDefaultShipping();
}
/**
* Is the address the default billing address?
*
* @return bool
*/
public function isDefaultBilling()
{
return (bool)$this->getAddress()->isDefaultBilling();
}
/**
* Is the address the default shipping address?
*
* @return bool
*/
public function isDefaultShipping()
{
return (bool)$this->getAddress()->isDefaultShipping();
}
/**
* Retrieve the Customer Data using the customer Id from the customer session.
*
* @return \Magento\Customer\Api\Data\CustomerInterface
*/
public function getCustomer()
{
return $this->currentCustomer->getCustomer();
}
/**
* Return back button Url, either to customer address or account.
*
* @return string
*/
public function getBackButtonUrl()
{
if ($this->getCustomerAddressCount()) {
return $this->getUrl('customer/address');
} else {
return $this->getUrl('customer/account/');
}
}
/**
* Get config value.
*
* @param string $path
* @return string|null
*/
public function getConfig($path)
{
return $this->_scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
}
}