File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-customer/Model/Address.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Customer\Model;
use Magento\Customer\Api\AddressMetadataInterface;
use Magento\Customer\Api\Data\AddressInterface;
use Magento\Customer\Api\Data\AddressInterfaceFactory;
use Magento\Customer\Api\Data\RegionInterfaceFactory;
use Magento\Framework\Indexer\StateInterface;
/**
* Customer address model
*
* @api
* @method int getParentId()
* @method \Magento\Customer\Model\Address setParentId(int $parentId)
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @since 100.0.2
*/
class Address extends \Magento\Customer\Model\Address\AbstractAddress
{
/**
* Customer entity
*
* @var Customer
*/
protected $_customer;
/**
* @var CustomerFactory
*/
protected $_customerFactory;
/**
* @var \Magento\Framework\Reflection\DataObjectProcessor
*/
protected $dataProcessor;
/**
* @var \Magento\Framework\Api\DataObjectHelper
*/
protected $dataObjectHelper;
/**
* @var \Magento\Framework\Indexer\IndexerRegistry
*/
protected $indexerRegistry;
/**
* @var \Magento\Customer\Model\Address\CustomAttributeListInterface
*/
private $attributeList;
/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
* @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
* @param \Magento\Directory\Helper\Data $directoryData
* @param \Magento\Eav\Model\Config $eavConfig
* @param Address\Config $addressConfig
* @param \Magento\Directory\Model\RegionFactory $regionFactory
* @param \Magento\Directory\Model\CountryFactory $countryFactory
* @param AddressMetadataInterface $metadataService
* @param AddressInterfaceFactory $addressDataFactory
* @param RegionInterfaceFactory $regionDataFactory
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
* @param CustomerFactory $customerFactory
* @param \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor
* @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
* @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
* @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
* @param array $data
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
\Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
\Magento\Directory\Helper\Data $directoryData,
\Magento\Eav\Model\Config $eavConfig,
\Magento\Customer\Model\Address\Config $addressConfig,
\Magento\Directory\Model\RegionFactory $regionFactory,
\Magento\Directory\Model\CountryFactory $countryFactory,
AddressMetadataInterface $metadataService,
AddressInterfaceFactory $addressDataFactory,
RegionInterfaceFactory $regionDataFactory,
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
CustomerFactory $customerFactory,
\Magento\Framework\Reflection\DataObjectProcessor $dataProcessor,
\Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
$this->dataProcessor = $dataProcessor;
$this->_customerFactory = $customerFactory;
$this->indexerRegistry = $indexerRegistry;
parent::__construct(
$context,
$registry,
$extensionFactory,
$customAttributeFactory,
$directoryData,
$eavConfig,
$addressConfig,
$regionFactory,
$countryFactory,
$metadataService,
$addressDataFactory,
$regionDataFactory,
$dataObjectHelper,
$resource,
$resourceCollection,
$data
);
}
/**
* Initialize address model
*
* @return void
*/
protected function _construct()
{
$this->_init(\Magento\Customer\Model\ResourceModel\Address::class);
}
/**
* Update Model with the data from Data Interface
*
* @param AddressInterface $address
* @return $this
* Use Api/RepositoryInterface for the operations in the Data Interfaces. Don't rely on Address Model
*/
public function updateData(AddressInterface $address)
{
// Set all attributes
$attributes = $this->dataProcessor
->buildOutputDataArray($address, \Magento\Customer\Api\Data\AddressInterface::class);
foreach ($attributes as $attributeCode => $attributeData) {
if (AddressInterface::REGION === $attributeCode) {
$this->setRegion($address->getRegion()->getRegion());
$this->setRegionCode($address->getRegion()->getRegionCode());
$this->setRegionId($address->getRegion()->getRegionId());
} else {
$this->setDataUsingMethod($attributeCode, $attributeData);
}
}
// Need to explicitly set this due to discrepancy in the keys between model and data object
$this->setIsDefaultBilling($address->isDefaultBilling());
$this->setIsDefaultShipping($address->isDefaultShipping());
$customAttributes = $address->getCustomAttributes();
if ($customAttributes !== null) {
foreach ($customAttributes as $attribute) {
$this->setData($attribute->getAttributeCode(), $attribute->getValue());
}
}
return $this;
}
/**
* Create address data object based on current address model.
*
* @param int|null $defaultBillingAddressId
* @param int|null $defaultShippingAddressId
* @return AddressInterface
* Use Api/Data/AddressInterface as a result of service operations. Don't rely on the model to provide
* the instance of Api/Data/AddressInterface
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function getDataModel($defaultBillingAddressId = null, $defaultShippingAddressId = null)
{
if ($this->getCustomerId() || $this->getParentId()) {
$customer = $this->getCustomer();
$defaultBillingAddressId = $customer->getDefaultBilling() ?: $defaultBillingAddressId;
$defaultShippingAddressId = $customer->getDefaultShipping() ?: $defaultShippingAddressId;
}
return parent::getDataModel($defaultBillingAddressId, $defaultShippingAddressId);
}
/**
* Retrieve address customer identifier
*
* @return int
*/
public function getCustomerId()
{
return $this->_getData('customer_id') ? $this->_getData('customer_id') : $this->getParentId();
}
/**
* Declare address customer identifier
*
* @param int $id
* @return $this
*/
public function setCustomerId($id)
{
$this->setParentId($id);
$this->setData('customer_id', $id);
return $this;
}
/**
* Retrieve address customer
*
* @return Customer|false
*/
public function getCustomer()
{
if (!$this->getCustomerId()) {
return false;
}
if (empty($this->_customer)) {
$this->_customer = $this->_createCustomer()->load($this->getCustomerId());
}
return $this->_customer;
}
/**
* Specify address customer
*
* @param Customer $customer
* @return $this
*/
public function setCustomer(Customer $customer)
{
$this->_customer = $customer;
$this->setCustomerId($customer->getId());
return $this;
}
/**
* Retrieve address entity attributes
*
* @return Attribute[]
*/
public function getAttributes()
{
$attributes = $this->getData('attributes');
if ($attributes === null) {
$attributes = $this->_getResource()->loadAllAttributes($this)->getSortedAttributes();
$this->setData('attributes', $attributes);
}
return $attributes;
}
/**
* Get attributes created by default
*
* @return string[]
*/
public function getDefaultAttributeCodes()
{
return $this->_getResource()->getDefaultAttributes();
}
/**
* Clone address
*
* @return void
*/
public function __clone()
{
$this->setId(null);
}
/**
* Return Entity Type instance
*
* @return \Magento\Eav\Model\Entity\Type
*/
public function getEntityType()
{
return $this->_getResource()->getEntityType();
}
/**
* Return Region ID
*
* @return int
*/
public function getRegionId()
{
return (int)$this->getData('region_id');
}
/**
* Set Region ID. $regionId is automatically converted to integer
*
* @param int $regionId
* @return $this
*/
public function setRegionId($regionId)
{
$this->setData('region_id', (int)$regionId);
return $this;
}
/**
* Create customer model
*
* @return Customer
*/
protected function _createCustomer()
{
return $this->_customerFactory->create();
}
/**
* Return Entity Type ID
*
* @return int
*/
public function getEntityTypeId()
{
return $this->getEntityType()->getId();
}
/**
* Processing object after save data
*
* @return $this
*/
public function afterSave()
{
$indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
if ($indexer->getState()->getStatus() == StateInterface::STATUS_VALID) {
$this->_getResource()->addCommitCallback([$this, 'reindex']);
}
return parent::afterSave();
}
/**
* Init indexing process after customer delete
*
* @return \Magento\Framework\Model\AbstractModel
*/
public function afterDeleteCommit()
{
$this->reindex();
return parent::afterDeleteCommit();
}
/**
* Init indexing process after customer save
*
* @return void
*/
public function reindex()
{
/** @var \Magento\Framework\Indexer\IndexerInterface $indexer */
$indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
$indexer->reindexRow($this->getCustomerId());
}
/**
* Get a list of custom attribute codes.
*
* By default, entity can be extended only using extension attributes functionality.
*
* @return string[]
* @since 100.0.6
*/
protected function getCustomAttributesCodes()
{
return array_keys($this->getAttributeList()->getAttributes());
}
/**
* Get new AttributeList dependency for application code.
*
* @return \Magento\Customer\Model\Address\CustomAttributeListInterface
* @deprecated 100.0.6
*/
private function getAttributeList()
{
if (!$this->attributeList) {
$this->attributeList = \Magento\Framework\App\ObjectManager::getInstance()->get(
\Magento\Customer\Model\Address\CustomAttributeListInterface::class
);
}
return $this->attributeList;
}
/**
* Retrieve attribute set id for customer address.
*
* @return int
* @since 101.0.0
*/
public function getAttributeSetId()
{
return parent::getAttributeSetId() ?: AddressMetadataInterface::ATTRIBUTE_SET_ID_ADDRESS;
}
}