![]() 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-ui/Model/Export/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Ui\Model\Export; use Magento\Framework\Api\Search\DocumentInterface; use Magento\Framework\Api\Search\SearchResultInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Convert\Excel; use Magento\Framework\Convert\ExcelFactory; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem; use Magento\Ui\Component\MassAction\Filter; /** * Class ConvertToXml */ class ConvertToXml { /** * @var DirectoryList */ protected $directory; /** * @var MetadataProvider */ protected $metadataProvider; /** * @var ExcelFactory */ protected $excelFactory; /** * @var array */ protected $options; /** * @var SearchResultIteratorFactory */ protected $iteratorFactory; /** * @var array */ protected $fields; /** * @var Filter */ protected $filter; /** * @param Filesystem $filesystem * @param Filter $filter * @param MetadataProvider $metadataProvider * @param ExcelFactory $excelFactory * @param SearchResultIteratorFactory $iteratorFactory * @throws FileSystemException */ public function __construct( Filesystem $filesystem, Filter $filter, MetadataProvider $metadataProvider, ExcelFactory $excelFactory, SearchResultIteratorFactory $iteratorFactory ) { $this->filter = $filter; $this->directory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR); $this->metadataProvider = $metadataProvider; $this->excelFactory = $excelFactory; $this->iteratorFactory = $iteratorFactory; } /** * Returns Filters with options * * @return array */ protected function getOptions() { if (!$this->options) { $this->options = $this->metadataProvider->getOptions(); } return $this->options; } /** * Returns DB fields list * * @return array * @throws LocalizedException */ protected function getFields() { if (!$this->fields) { $component = $this->filter->getComponent(); $this->fields = $this->metadataProvider->getFields($component); } return $this->fields; } /** * Returns row data * * @param DocumentInterface $document * @return array * @throws LocalizedException */ public function getRowData(DocumentInterface $document) { return $this->metadataProvider->getRowData($document, $this->getFields(), $this->getOptions()); } /** * Returns XML file * * @return array * @throws LocalizedException */ public function getXmlFile() { $component = $this->filter->getComponent(); // md5() here is not for cryptographic use. // phpcs:ignore Magento2.Security.InsecureFunction $name = md5(microtime()); $file = 'export/'. $component->getName() . $name . '.xml'; $this->filter->prepareComponent($component); $this->filter->applySelectionOnTargetProvider(); $component->getContext()->getDataProvider()->setLimit(0, 0); /** @var SearchResultInterface $searchResult */ $searchResult = $component->getContext()->getDataProvider()->getSearchResult(); /** @var DocumentInterface[] $searchResultItems */ $searchResultItems = $searchResult->getItems(); $this->prepareItems($component->getName(), $searchResultItems); /** @var SearchResultIterator $searchResultIterator */ $searchResultIterator = $this->iteratorFactory->create(['items' => $searchResultItems]); /** @var Excel $excel */ $excel = $this->excelFactory->create( [ 'iterator' => $searchResultIterator, 'rowCallback'=> [$this, 'getRowData'], ] ); $this->directory->create('export'); $stream = $this->directory->openFile($file, 'w+'); $stream->lock(); $excel->setDataHeader($this->metadataProvider->getHeaders($component)); $excel->write($stream, $component->getName() . '.xml'); $stream->unlock(); $stream->close(); return [ 'type' => 'filename', 'value' => $file, 'rm' => true // can delete file after use ]; } /** * @param string $componentName * @param array $items * @return void */ protected function prepareItems($componentName, array $items = []) { foreach ($items as $document) { $this->metadataProvider->convertDate($document, $componentName); } } }