![]() 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-import-export/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\ImportExport\Model; /** * Export model * * @api * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @since 100.0.2 * @deprecated 100.3.2 */ class Export extends \Magento\ImportExport\Model\AbstractModel { const FILTER_ELEMENT_GROUP = 'export_filter'; const FILTER_ELEMENT_SKIP = 'skip_attr'; /** * Allow multiple values wrapping in double quotes for additional attributes. */ const FIELDS_ENCLOSURE = 'fields_enclosure'; /** * Filter fields types. */ const FILTER_TYPE_SELECT = 'select'; const FILTER_TYPE_MULTISELECT = 'multiselect'; const FILTER_TYPE_INPUT = 'input'; const FILTER_TYPE_DATE = 'date'; const FILTER_TYPE_NUMBER = 'number'; /** * Entity adapter. * * @var \Magento\ImportExport\Model\Export\Entity\AbstractEntity */ protected $_entityAdapter; /** * Writer object instance. * * @var \Magento\ImportExport\Model\Export\Adapter\AbstractAdapter */ protected $_writer; /** * @var \Magento\ImportExport\Model\Export\ConfigInterface */ protected $_exportConfig; /** * @var \Magento\ImportExport\Model\Export\Entity\Factory */ protected $_entityFactory; /** * @var \Magento\ImportExport\Model\Export\Adapter\Factory */ protected $_exportAdapterFac; /** * @var array */ private static $backendTypeToFilterMapper = [ 'datetime' => self::FILTER_TYPE_DATE, 'decimal' => self::FILTER_TYPE_NUMBER, 'int' => self::FILTER_TYPE_NUMBER, 'varchar' => self::FILTER_TYPE_INPUT, 'text' => self::FILTER_TYPE_INPUT ]; /** * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig * @param \Magento\ImportExport\Model\Export\Entity\Factory $entityFactory * @param \Magento\ImportExport\Model\Export\Adapter\Factory $exportAdapterFac * @param array $data */ public function __construct( \Psr\Log\LoggerInterface $logger, \Magento\Framework\Filesystem $filesystem, \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig, \Magento\ImportExport\Model\Export\Entity\Factory $entityFactory, \Magento\ImportExport\Model\Export\Adapter\Factory $exportAdapterFac, array $data = [] ) { $this->_exportConfig = $exportConfig; $this->_entityFactory = $entityFactory; $this->_exportAdapterFac = $exportAdapterFac; parent::__construct($logger, $filesystem, $data); } /** * Create instance of entity adapter and return it * * @return \Magento\ImportExport\Model\Export\Entity\AbstractEntity * |\Magento\ImportExport\Model\Export\AbstractEntity * @throws \Magento\Framework\Exception\LocalizedException */ protected function _getEntityAdapter() { if (!$this->_entityAdapter) { $entities = $this->_exportConfig->getEntities(); if (isset($entities[$this->getEntity()])) { try { $this->_entityAdapter = $this->_entityFactory->create($entities[$this->getEntity()]['model']); } catch (\Exception $e) { $this->_logger->critical($e); throw new \Magento\Framework\Exception\LocalizedException( __('Please enter a correct entity model.') ); } if (!$this->_entityAdapter instanceof \Magento\ImportExport\Model\Export\Entity\AbstractEntity && !$this->_entityAdapter instanceof \Magento\ImportExport\Model\Export\AbstractEntity ) { throw new \Magento\Framework\Exception\LocalizedException( __( 'The entity adapter object must be an instance of %1 or %2.', \Magento\ImportExport\Model\Export\Entity\AbstractEntity::class, \Magento\ImportExport\Model\Export\AbstractEntity::class ) ); } // check for entity codes integrity if ($this->getEntity() != $this->_entityAdapter->getEntityTypeCode()) { throw new \Magento\Framework\Exception\LocalizedException( __('The input entity code is not equal to entity adapter code.') ); } } else { throw new \Magento\Framework\Exception\LocalizedException(__('Please enter a correct entity.')); } $this->_entityAdapter->setParameters($this->getData()); } return $this->_entityAdapter; } /** * Get writer object. * * @return \Magento\ImportExport\Model\Export\Adapter\AbstractAdapter * @throws \Magento\Framework\Exception\LocalizedException */ protected function _getWriter() { if (!$this->_writer) { $fileFormats = $this->_exportConfig->getFileFormats(); if (isset($fileFormats[$this->getFileFormat()])) { try { $this->_writer = $this->_exportAdapterFac->create($fileFormats[$this->getFileFormat()]['model']); } catch (\Exception $e) { $this->_logger->critical($e); throw new \Magento\Framework\Exception\LocalizedException( __('Please enter a correct entity model.') ); } if (!$this->_writer instanceof \Magento\ImportExport\Model\Export\Adapter\AbstractAdapter) { throw new \Magento\Framework\Exception\LocalizedException( __( 'The adapter object must be an instance of %1.', \Magento\ImportExport\Model\Export\Adapter\AbstractAdapter::class ) ); } } else { throw new \Magento\Framework\Exception\LocalizedException(__('Please correct the file format.')); } } return $this->_writer; } /** * Export data. * * @return string * @throws \Magento\Framework\Exception\LocalizedException */ public function export() { if (isset($this->_data[self::FILTER_ELEMENT_GROUP])) { $this->addLogComment(__('Begin export of %1', $this->getEntity())); $result = $this->_getEntityAdapter()->setWriter($this->_getWriter())->export(); $countRows = substr_count($result, "\n"); if (!$countRows) { throw new \Magento\Framework\Exception\LocalizedException(__('There is no data for the export.')); } if ($result) { $this->addLogComment([__('Exported %1 rows.', $countRows), __('The export is finished.')]); } return $result; } else { throw new \Magento\Framework\Exception\LocalizedException(__('Please provide filter data.')); } } /** * 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) { return $this->_getEntityAdapter()->filterAttributeCollection($collection); } /** * Determine filter type for specified attribute. * * @static * @param \Magento\Eav\Model\Entity\Attribute $attribute * @return string * @throws \Magento\Framework\Exception\LocalizedException */ public static function getAttributeFilterType(\Magento\Eav\Model\Entity\Attribute $attribute) { if ($attribute->usesSource() || $attribute->getFilterOptions()) { return 'multiselect' == $attribute->getFrontendInput() ? self::FILTER_TYPE_MULTISELECT : self::FILTER_TYPE_SELECT; } if (isset(self::$backendTypeToFilterMapper[$attribute->getBackendType()])) { return self::$backendTypeToFilterMapper[$attribute->getBackendType()]; } if ($attribute->isStatic()) { return self::getStaticAttributeFilterType($attribute); } throw new \Magento\Framework\Exception\LocalizedException( __('We can\'t determine the attribute filter type.') ); } /** * Determine filter type for static attribute. * * @static * @param \Magento\Eav\Model\Entity\Attribute $attribute * @return string */ public static function getStaticAttributeFilterType(\Magento\Eav\Model\Entity\Attribute $attribute) { if (in_array($attribute->getAttributeCode(), ['category_ids', 'media_gallery'])) { return self::FILTER_TYPE_INPUT; } $columns = $attribute->getFlatColumns(); if (empty($columns)) { return self::FILTER_TYPE_INPUT; } switch ($columns[$attribute->getAttributeCode()]['type']) { case \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER: case \Magento\Framework\DB\Ddl\Table::TYPE_BIGINT: $type = self::FILTER_TYPE_NUMBER; break; case \Magento\Framework\DB\Ddl\Table::TYPE_DATE: case \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME: case \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP: $type = self::FILTER_TYPE_DATE; break; default: $type = self::FILTER_TYPE_INPUT; } return $type; } /** * MIME-type for 'Content-Type' header. * * @return string */ public function getContentType() { return $this->_getWriter()->getContentType(); } /** * Override standard entity getter. * * @return string * @throws \Magento\Framework\Exception\LocalizedException */ public function getEntity() { if (empty($this->_data['entity'])) { throw new \Magento\Framework\Exception\LocalizedException(__('Entity is unknown')); } return $this->_data['entity']; } /** * Entity attributes collection getter. * * @return \Magento\Framework\Data\Collection */ public function getEntityAttributeCollection() { return $this->_getEntityAdapter()->getAttributeCollection(); } /** * Override standard entity getter. * * @return string * @throws \Magento\Framework\Exception\LocalizedException */ public function getFileFormat() { if (empty($this->_data['file_format'])) { throw new \Magento\Framework\Exception\LocalizedException(__('We can\'t identify this file format.')); } return $this->_data['file_format']; } /** * Return file name for downloading. * * @return string */ public function getFileName() { $fileName = null; $entityAdapter = $this->_getEntityAdapter(); if ($entityAdapter instanceof \Magento\ImportExport\Model\Export\AbstractEntity) { $fileName = $entityAdapter->getFileName(); } if (!$fileName) { $fileName = $this->getEntity(); } return $fileName . '_' . date('Ymd_His') . '.' . $this->_getWriter()->getFileExtension(); } }