123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CustomerImportExport\Model\Export;
- /**
- * Export entity customer model
- *
- * @api
- *
- * @method \Magento\Customer\Model\ResourceModel\Attribute\Collection getAttributeCollection() getAttributeCollection()
- * @since 100.0.2
- */
- class Customer extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
- {
- /**
- * Permanent column names.
- *
- * Names that begins with underscore is not an attribute. This name convention is for
- * to avoid interference with same attribute name.
- */
- const COLUMN_EMAIL = 'email';
- const COLUMN_WEBSITE = '_website';
- const COLUMN_STORE = '_store';
- /**
- * Attribute collection name
- */
- const ATTRIBUTE_COLLECTION_NAME = \Magento\Customer\Model\ResourceModel\Attribute\Collection::class;
- /**
- * XML path to page size parameter
- */
- const XML_PATH_PAGE_SIZE = 'export/customer_page_size/customer';
- /**
- * @var array
- */
- protected $_attributeOverrides = [
- 'created_at' => ['backend_type' => 'datetime'],
- 'reward_update_notification' => ['source_model' => \Magento\Eav\Model\Entity\Attribute\Source\Boolean::class],
- 'reward_warning_notification' => ['source_model' => \Magento\Eav\Model\Entity\Attribute\Source\Boolean::class],
- ];
- /**
- * Array of attributes codes which are disabled for export
- *
- * @var string[]
- */
- protected $_disabledAttributes = ['default_billing', 'default_shipping'];
- /**
- * Attributes with index (not label) value.
- *
- * @var string[]
- */
- protected $_indexValueAttributes = ['group_id', 'website_id', 'store_id'];
- /**
- * Permanent entity columns.
- *
- * @var string[]
- */
- protected $_permanentAttributes = [self::COLUMN_EMAIL, self::COLUMN_WEBSITE, self::COLUMN_STORE];
- /**
- * Customers whose data is exported
- *
- * @var \Magento\Customer\Model\ResourceModel\Customer\Collection
- */
- protected $_customerCollection;
- /**
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
- * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory
- * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
- * @param \Magento\Eav\Model\Config $eavConfig
- * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerColFactory
- * @param array $data
- */
- public function __construct(
- \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\ImportExport\Model\Export\Factory $collectionFactory,
- \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
- \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
- \Magento\Eav\Model\Config $eavConfig,
- \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerColFactory,
- array $data = []
- ) {
- parent::__construct(
- $scopeConfig,
- $storeManager,
- $collectionFactory,
- $resourceColFactory,
- $localeDate,
- $eavConfig,
- $data
- );
- $this->_customerCollection = isset(
- $data['customer_collection']
- ) ? $data['customer_collection'] : $customerColFactory->create();
- $this->_initAttributeValues()->_initAttributeTypes()->_initStores()->_initWebsites(true);
- }
- /**
- * Export process.
- *
- * @return string
- */
- public function export()
- {
- $this->_prepareEntityCollection($this->_getEntityCollection());
- $writer = $this->getWriter();
- // create export file
- $writer->setHeaderCols($this->_getHeaderColumns());
- $this->_exportCollectionByPages($this->_getEntityCollection());
- return $writer->getContents();
- }
- /**
- * Get customers collection
- *
- * @return \Magento\Customer\Model\ResourceModel\Customer\Collection
- */
- protected function _getEntityCollection()
- {
- return $this->_customerCollection;
- }
- /**
- * {@inheritdoc}
- */
- protected function _getHeaderColumns()
- {
- $validAttributeCodes = $this->_getExportAttributeCodes();
- return array_merge($this->_permanentAttributes, $validAttributeCodes, ['password']);
- }
- /**
- * Export given customer data
- *
- * @param \Magento\Customer\Model\Customer $item
- * @return void
- */
- public function exportItem($item)
- {
- $row = $this->_addAttributeValuesToRow($item);
- $row[self::COLUMN_WEBSITE] = $this->_websiteIdToCode[$item->getWebsiteId()];
- $row[self::COLUMN_STORE] = $this->_storeIdToCode[$item->getStoreId()];
- $this->getWriter()->writeRow($row);
- }
- /**
- * Clean up already loaded attribute collection.
- *
- * @param \Magento\Framework\Data\Collection $collection
- * @return \Magento\Framework\Data\Collection
- */
- public function filterAttributeCollection(\Magento\Framework\Data\Collection $collection)
- {
- /** @var $attribute \Magento\Customer\Model\Attribute */
- foreach (parent::filterAttributeCollection($collection) as $attribute) {
- if (!empty($this->_attributeOverrides[$attribute->getAttributeCode()])) {
- $data = $this->_attributeOverrides[$attribute->getAttributeCode()];
- if (isset($data['options_method']) && method_exists($this, $data['options_method'])) {
- $data['filter_options'] = $this->{$data['options_method']}();
- }
- $attribute->addData($data);
- }
- }
- return $collection;
- }
- /**
- * EAV entity type code getter.
- *
- * @return string
- */
- public function getEntityTypeCode()
- {
- return $this->getAttributeCollection()->getEntityTypeCode();
- }
- /**
- * Retrieve list of overridden attributes
- *
- * @return array
- */
- public function getOverriddenAttributes()
- {
- return $this->_attributeOverrides;
- }
- }
|