![]() 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/Address/ |
<?php declare(strict_types=1); /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Model\Address; use Magento\Customer\Api\CustomerRepositoryInterface; use Magento\Customer\Model\AddressRegistry; use Magento\Customer\Model\ResourceModel\Address\Attribute\Collection as AddressAttributeCollection; use Magento\Customer\Model\ResourceModel\Address\CollectionFactory; use Magento\Eav\Model\Config; use Magento\Eav\Model\Entity\Type; use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; use Magento\Framework\App\ObjectManager; use Magento\Framework\View\Element\UiComponent\ContextInterface; use Magento\Customer\Model\Address; use Magento\Customer\Model\FileUploaderDataResolver; use Magento\Customer\Model\AttributeMetadataResolver; use Magento\Ui\Component\Form\Element\Multiline; /** * Dataprovider of customer addresses for customer address grid. * * @property \Magento\Customer\Model\ResourceModel\Address\Collection $collection * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider { /** * @var CustomerRepositoryInterface */ private $customerRepository; /** * @var array */ private $loadedData; /** * Allow to manage attributes, even they are hidden on storefront * * @var bool */ private $allowToShowHiddenAttributes; /** * @var ContextInterface */ private $context; /** * @var array */ private $bannedInputTypes = ['media_image']; /** * @var array */ private static $attributesToEliminate = [ 'region', 'vat_is_valid', 'vat_request_date', 'vat_request_id', 'vat_request_success' ]; /** * @var FileUploaderDataResolver */ private $fileUploaderDataResolver; /** * @var AttributeMetadataResolver */ private $attributeMetadataResolver; /** * @var AddressRegistry */ private $addressRegistry; /** * DataProvider constructor. * @param string $name * @param string $primaryFieldName * @param string $requestFieldName * @param CollectionFactory $addressCollectionFactory * @param CustomerRepositoryInterface $customerRepository * @param Config $eavConfig * @param ContextInterface $context * @param FileUploaderDataResolver $fileUploaderDataResolver * @param AttributeMetadataResolver $attributeMetadataResolver * @param array $meta * @param array $data * @param bool $allowToShowHiddenAttributes * @param AddressRegistry|null $addressRegistry * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( $name, $primaryFieldName, $requestFieldName, CollectionFactory $addressCollectionFactory, CustomerRepositoryInterface $customerRepository, Config $eavConfig, ContextInterface $context, FileUploaderDataResolver $fileUploaderDataResolver, AttributeMetadataResolver $attributeMetadataResolver, array $meta = [], array $data = [], $allowToShowHiddenAttributes = true, ?AddressRegistry $addressRegistry = null ) { parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data); $this->collection = $addressCollectionFactory->create(); $this->collection->addAttributeToSelect('*'); $this->customerRepository = $customerRepository; $this->allowToShowHiddenAttributes = $allowToShowHiddenAttributes; $this->context = $context; $this->fileUploaderDataResolver = $fileUploaderDataResolver; $this->attributeMetadataResolver = $attributeMetadataResolver; $this->addressRegistry = $addressRegistry ?? ObjectManager::getInstance()->get(AddressRegistry::class); $this->meta['general']['children'] = $this->getAttributesMeta( $eavConfig->getEntityType('customer_address') ); } /** * Get Addresses data and process customer default billing & shipping addresses * * @return array * @throws \Magento\Framework\Exception\LocalizedException * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function getData(): array { if (null !== $this->loadedData) { return $this->loadedData; } $items = $this->collection->getItems(); /** @var Address $item */ foreach ($items as $item) { $addressId = $item->getEntityId(); $item->load($addressId); $this->loadedData[$addressId] = $item->getData(); $customerId = $this->loadedData[$addressId]['parent_id']; /** @var \Magento\Customer\Model\Customer $customer */ $customer = $this->customerRepository->getById($customerId); $defaultBilling = $customer->getDefaultBilling(); $defaultShipping = $customer->getDefaultShipping(); $this->prepareAddressData($addressId, $this->loadedData, $defaultBilling, $defaultShipping); $this->fileUploaderDataResolver->overrideFileUploaderData($item, $this->loadedData[$addressId]); } if (null === $this->loadedData) { $this->loadedData[''] = $this->getDefaultData(); } return $this->loadedData; } /** * Prepare address data * * @param int $addressId * @param array $addresses * @param string|null $defaultBilling * @param string|null $defaultShipping * @return void */ private function prepareAddressData($addressId, array &$addresses, $defaultBilling, $defaultShipping): void { if (null !== $defaultBilling && $addressId === $defaultBilling) { $addresses[$addressId]['default_billing'] = '1'; } if (null !== $defaultShipping && $addressId === $defaultShipping) { $addresses[$addressId]['default_shipping'] = '1'; } foreach ($this->meta['general']['children'] as $attributeName => $attributeMeta) { if ($attributeMeta['arguments']['data']['config']['dataType'] === Multiline::NAME && isset($this->loadedData[$addressId][$attributeName]) && !\is_array($this->loadedData[$addressId][$attributeName]) ) { $this->loadedData[$addressId][$attributeName] = explode( "\n", $this->loadedData[$addressId][$attributeName] ); } } } /** * Get default customer data for adding new address * * @throws \Magento\Framework\Exception\LocalizedException * @throws \Magento\Framework\Exception\NoSuchEntityException * @return array */ private function getDefaultData(): array { $parentId = $this->context->getRequestParam('parent_id'); $customer = $this->customerRepository->getById($parentId); $data = [ 'parent_id' => $parentId, 'firstname' => $customer->getFirstname(), 'lastname' => $customer->getLastname() ]; return $data; } /** * Get attributes meta * * @param Type $entityType * @return array * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function getAttributesMeta(Type $entityType): array { $meta = []; /** @var AddressAttributeCollection $attributes */ $attributes = $entityType->getAttributeCollection(); $customerId = $this->context->getRequestParam('parent_id'); $entityId = $this->context->getRequestParam('entity_id'); if (!$customerId && $entityId) { $customerId = $this->addressRegistry->retrieve($entityId)->getParentId(); } if ($customerId) { $customer = $this->customerRepository->getById($customerId); $attributes->setWebsite($customer->getWebsiteId()); } /* @var AbstractAttribute $attribute */ foreach ($attributes as $attribute) { if (\in_array($attribute->getFrontendInput(), $this->bannedInputTypes, true)) { continue; } if (\in_array($attribute->getAttributeCode(), self::$attributesToEliminate, true)) { continue; } $meta[$attribute->getAttributeCode()] = $this->attributeMetadataResolver->getAttributesMeta( $attribute, $entityType, $this->allowToShowHiddenAttributes ); if ($attribute->getAttributeCode() === 'street' && $entityId) { $customerAddressStreet = $this->addressRegistry->retrieve($entityId)->getStreet(); $meta[$attribute->getAttributeCode()]["arguments"]["data"]["config"]["size"] = max( $meta[$attribute->getAttributeCode()]["arguments"]["data"]["config"]["size"], count($customerAddressStreet) ); } } $this->attributeMetadataResolver->processWebsiteMeta($meta); return $meta; } }