123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Ui\Model\Export;
- use Magento\Framework\App\Filesystem\DirectoryList;
- use Magento\Framework\Exception\FileSystemException;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Filesystem;
- use Magento\Ui\Component\MassAction\Filter;
- /**
- * Class ConvertToCsv
- */
- class ConvertToCsv
- {
- /**
- * @var DirectoryList
- */
- protected $directory;
- /**
- * @var MetadataProvider
- */
- protected $metadataProvider;
- /**
- * @var int|null
- */
- protected $pageSize = null;
- /**
- * @var Filter
- */
- protected $filter;
- /**
- * @param Filesystem $filesystem
- * @param Filter $filter
- * @param MetadataProvider $metadataProvider
- * @param int $pageSize
- * @throws FileSystemException
- */
- public function __construct(
- Filesystem $filesystem,
- Filter $filter,
- MetadataProvider $metadataProvider,
- $pageSize = 200
- ) {
- $this->filter = $filter;
- $this->directory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
- $this->metadataProvider = $metadataProvider;
- $this->pageSize = $pageSize;
- }
- /**
- * Returns CSV file
- *
- * @return array
- * @throws LocalizedException
- */
- public function getCsvFile()
- {
- $component = $this->filter->getComponent();
- $name = md5(microtime());
- $file = 'export/'. $component->getName() . $name . '.csv';
- $this->filter->prepareComponent($component);
- $this->filter->applySelectionOnTargetProvider();
- $dataProvider = $component->getContext()->getDataProvider();
- $fields = $this->metadataProvider->getFields($component);
- $options = $this->metadataProvider->getOptions();
- $this->directory->create('export');
- $stream = $this->directory->openFile($file, 'w+');
- $stream->lock();
- $stream->writeCsv($this->metadataProvider->getHeaders($component));
- $i = 1;
- $searchCriteria = $dataProvider->getSearchCriteria()
- ->setCurrentPage($i)
- ->setPageSize($this->pageSize);
- $totalCount = (int) $dataProvider->getSearchResult()->getTotalCount();
- while ($totalCount > 0) {
- $items = $dataProvider->getSearchResult()->getItems();
- foreach ($items as $item) {
- $this->metadataProvider->convertDate($item, $component->getName());
- $stream->writeCsv($this->metadataProvider->getRowData($item, $fields, $options));
- }
- $searchCriteria->setCurrentPage(++$i);
- $totalCount = $totalCount - $this->pageSize;
- }
- $stream->unlock();
- $stream->close();
- return [
- 'type' => 'filename',
- 'value' => $file,
- 'rm' => true // can delete file after use
- ];
- }
- }
|