mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
225 lines
7.5 KiB
PHP
225 lines
7.5 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Customer\Model;
|
|
|
|
use Magento\Catalog\Api\Data\EavAttributeInterface;
|
|
use Magento\Framework\Api\AttributeValueFactory;
|
|
use Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface;
|
|
|
|
/**
|
|
* Customer attribute model
|
|
*
|
|
* @method int getSortOrder()
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class Attribute extends \Magento\Eav\Model\Attribute
|
|
{
|
|
/**
|
|
* Name of the module
|
|
*/
|
|
const MODULE_NAME = 'Magento_Customer';
|
|
|
|
/**
|
|
* Prefix of model events names
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_eventPrefix = 'customer_entity_attribute';
|
|
|
|
/**
|
|
* Prefix of model events object
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_eventObject = 'attribute';
|
|
|
|
/**
|
|
* @var \Magento\Framework\Indexer\IndexerRegistry
|
|
*/
|
|
protected $indexerRegistry;
|
|
|
|
/**
|
|
* @var \Magento\Customer\Model\Metadata\AttributeMetadataCache
|
|
*/
|
|
private $attributeMetadataCache;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param \Magento\Framework\Model\Context $context
|
|
* @param \Magento\Framework\Registry $registry
|
|
* @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
|
|
* @param AttributeValueFactory $customAttributeFactory
|
|
* @param \Magento\Eav\Model\Config $eavConfig
|
|
* @param \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory
|
|
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
|
|
* @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
|
|
* @param \Magento\Framework\Validator\UniversalFactory $universalFactory
|
|
* @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
|
|
* @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
|
|
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
|
|
* @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
|
|
* @param \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList
|
|
* @param \Magento\Framework\Locale\ResolverInterface $localeResolver
|
|
* @param DateTimeFormatterInterface $dateTimeFormatter
|
|
* @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
|
|
* @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
|
|
* @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
|
|
* @param array|null $data
|
|
* @param \Magento\Customer\Model\Metadata\AttributeMetadataCache|null $attributeMetadataCache
|
|
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\Model\Context $context,
|
|
\Magento\Framework\Registry $registry,
|
|
\Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
|
|
AttributeValueFactory $customAttributeFactory,
|
|
\Magento\Eav\Model\Config $eavConfig,
|
|
\Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
|
|
\Magento\Store\Model\StoreManagerInterface $storeManager,
|
|
\Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
|
|
\Magento\Framework\Validator\UniversalFactory $universalFactory,
|
|
\Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
|
|
\Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
|
|
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
|
|
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
|
|
\Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList,
|
|
\Magento\Framework\Locale\ResolverInterface $localeResolver,
|
|
DateTimeFormatterInterface $dateTimeFormatter,
|
|
\Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
|
|
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
|
|
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
|
|
array $data = [],
|
|
\Magento\Customer\Model\Metadata\AttributeMetadataCache $attributeMetadataCache = null
|
|
) {
|
|
$this->indexerRegistry = $indexerRegistry;
|
|
$this->attributeMetadataCache = $attributeMetadataCache ?: \Magento\Framework\App\ObjectManager::getInstance()
|
|
->get(\Magento\Customer\Model\Metadata\AttributeMetadataCache::class);
|
|
parent::__construct(
|
|
$context,
|
|
$registry,
|
|
$extensionFactory,
|
|
$customAttributeFactory,
|
|
$eavConfig,
|
|
$eavTypeFactory,
|
|
$storeManager,
|
|
$resourceHelper,
|
|
$universalFactory,
|
|
$optionDataFactory,
|
|
$dataObjectProcessor,
|
|
$dataObjectHelper,
|
|
$localeDate,
|
|
$reservedAttributeList,
|
|
$localeResolver,
|
|
$dateTimeFormatter,
|
|
$resource,
|
|
$resourceCollection,
|
|
$data
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Init resource model
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _construct()
|
|
{
|
|
$this->_init(\Magento\Customer\Model\ResourceModel\Attribute::class);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function afterSave()
|
|
{
|
|
if ($this->isObjectNew() && (bool)$this->getData(EavAttributeInterface::IS_USED_IN_GRID)) {
|
|
$this->_getResource()->addCommitCallback([$this, 'invalidate']);
|
|
} elseif (!$this->isObjectNew() && $this->dataHasChangedFor(EavAttributeInterface::IS_USED_IN_GRID)) {
|
|
$this->_getResource()->addCommitCallback([$this, 'invalidate']);
|
|
}
|
|
$this->attributeMetadataCache->clean();
|
|
return parent::afterSave();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function afterDelete()
|
|
{
|
|
$this->attributeMetadataCache->clean();
|
|
return parent::afterDelete();
|
|
}
|
|
|
|
/**
|
|
* Init indexing process after customer delete
|
|
*
|
|
* @return \Magento\Framework\Model\AbstractModel
|
|
*/
|
|
public function afterDeleteCommit()
|
|
{
|
|
if ($this->getData(EavAttributeInterface::IS_USED_IN_GRID) == true) {
|
|
$this->invalidate();
|
|
}
|
|
return parent::afterDeleteCommit();
|
|
}
|
|
|
|
/**
|
|
* Init indexing process after customer save
|
|
*
|
|
* @return void
|
|
*/
|
|
public function invalidate()
|
|
{
|
|
/** @var \Magento\Framework\Indexer\IndexerInterface $indexer */
|
|
$indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
|
|
$indexer->invalidate();
|
|
}
|
|
|
|
/**
|
|
* Check whether attribute is searchable in admin grid and it is allowed
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function canBeSearchableInGrid()
|
|
{
|
|
return $this->getData('is_searchable_in_grid') && in_array($this->getFrontendInput(), ['text', 'textarea']);
|
|
}
|
|
|
|
/**
|
|
* Check whether attribute is filterable in admin grid and it is allowed
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function canBeFilterableInGrid()
|
|
{
|
|
return $this->getData('is_filterable_in_grid')
|
|
&& in_array($this->getFrontendInput(), ['text', 'date', 'select', 'boolean']);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function __sleep()
|
|
{
|
|
$this->unsetData('entity_type');
|
|
return array_diff(
|
|
parent::__sleep(),
|
|
['indexerRegistry', '_website']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function __wakeup()
|
|
{
|
|
parent::__wakeup();
|
|
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
|
|
$this->indexerRegistry = $objectManager->get(\Magento\Framework\Indexer\IndexerRegistry::class);
|
|
}
|
|
}
|