![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-customer/Model/ |
<?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; } }