123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- <?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() getParentId()
- * @method \Magento\Customer\Model\Address setParentId() 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
- );
- }
- /**
- * Init 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;
- }
- /**
- * @inheritdoc
- */
- 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 object handler
- *
- * @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());
- }
- /**
- * @inheritdoc
- * @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;
- }
- }
|