![]() 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/Controller/Adminhtml/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\ImportExport\Controller\Adminhtml; use Magento\Backend\App\Action; use Magento\ImportExport\Model\Import\Entity\AbstractEntity; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; use Magento\ImportExport\Model\History as ModelHistory; use Magento\Framework\Escaper; use Magento\Framework\App\ObjectManager; /** * Import controller */ abstract class ImportResult extends Import { const IMPORT_HISTORY_FILE_DOWNLOAD_ROUTE = '*/history/download'; /** * Limit view errors */ const LIMIT_ERRORS_MESSAGE = 100; /** * @var \Magento\ImportExport\Model\Report\ReportProcessorInterface */ protected $reportProcessor; /** * @var \Magento\ImportExport\Model\History */ protected $historyModel; /** * @var \Magento\ImportExport\Helper\Report */ protected $reportHelper; /** * @var Escaper|null */ protected $escaper; /** * @param \Magento\Backend\App\Action\Context $context * @param \Magento\ImportExport\Model\Report\ReportProcessorInterface $reportProcessor * @param \Magento\ImportExport\Model\History $historyModel * @param \Magento\ImportExport\Helper\Report $reportHelper * @param Escaper|null $escaper */ public function __construct( \Magento\Backend\App\Action\Context $context, \Magento\ImportExport\Model\Report\ReportProcessorInterface $reportProcessor, \Magento\ImportExport\Model\History $historyModel, \Magento\ImportExport\Helper\Report $reportHelper, Escaper $escaper = null ) { parent::__construct($context); $this->reportProcessor = $reportProcessor; $this->historyModel = $historyModel; $this->reportHelper = $reportHelper; $this->escaper = $escaper ?? ObjectManager::getInstance()->get(Escaper::class); } /** * Add Error Messages for Import * * @param \Magento\Framework\View\Element\AbstractBlock $resultBlock * @param ProcessingErrorAggregatorInterface $errorAggregator * @return $this */ protected function addErrorMessages( \Magento\Framework\View\Element\AbstractBlock $resultBlock, ProcessingErrorAggregatorInterface $errorAggregator ) { if ($errorAggregator->getErrorsCount()) { $message = ''; $counter = 0; $escapedMessages = []; foreach ($this->getErrorMessages($errorAggregator) as $error) { $escapedMessages[] = (++$counter) . '. ' . $this->escaper->escapeHtml($error); if ($counter >= self::LIMIT_ERRORS_MESSAGE) { break; } } if ($errorAggregator->hasFatalExceptions()) { foreach ($this->getSystemExceptions($errorAggregator) as $error) { $escapedMessages[] = $this->escaper->escapeHtml($error->getErrorMessage()) . ' <a href="#" onclick="$(this).next().show();$(this).hide();return false;">' . __('Show more') . '</a><div style="display:none;">' . __('Additional data') . ': ' . $this->escaper->escapeHtml($error->getErrorDescription()) . '</div>'; } } try { $message .= implode('<br>', $escapedMessages); $resultBlock->addNotice( '<strong>' . __('Following Error(s) has been occurred during importing process:') . '</strong><br>' . '<div class="import-error-wrapper">' . __('Only the first 100 errors are shown. ') . '<a href="' . $this->createDownloadUrlImportHistoryFile($this->createErrorReport($errorAggregator)) . '">' . __('Download full report') . '</a><br>' . '<div class="import-error-list">' . $message . '</div></div>' ); } catch (\Exception $e) { foreach ($this->getErrorMessages($errorAggregator) as $errorMessage) { $resultBlock->addError($errorMessage); } } } return $this; } /** * Get all Error Messages from Import Results * * @param \Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface $errorAggregator * @return array */ protected function getErrorMessages(ProcessingErrorAggregatorInterface $errorAggregator) { $messages = []; $rowMessages = $errorAggregator->getRowsGroupedByErrorCode([], [AbstractEntity::ERROR_CODE_SYSTEM_EXCEPTION]); foreach ($rowMessages as $errorCode => $rows) { $messages[] = $errorCode . ' ' . __('in row(s):') . ' ' . implode(', ', $rows); } return $messages; } /** * Get System Generated Exception * * @param ProcessingErrorAggregatorInterface $errorAggregator * @return \Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError[] */ protected function getSystemExceptions(ProcessingErrorAggregatorInterface $errorAggregator) { return $errorAggregator->getErrorsByCode([AbstractEntity::ERROR_CODE_SYSTEM_EXCEPTION]); } /** * Generate Error Report File * * @param ProcessingErrorAggregatorInterface $errorAggregator * @return string */ protected function createErrorReport(ProcessingErrorAggregatorInterface $errorAggregator) { $this->historyModel->loadLastInsertItem(); $sourceFile = $this->reportHelper->getReportAbsolutePath($this->historyModel->getImportedFile()); $writeOnlyErrorItems = true; if ($this->historyModel->getData('execution_time') == ModelHistory::IMPORT_VALIDATION) { $writeOnlyErrorItems = false; } $fileName = $this->reportProcessor->createReport($sourceFile, $errorAggregator, $writeOnlyErrorItems); $this->historyModel->addErrorReportFile($fileName); return $fileName; } /** * Get Import History Url * * @param string $fileName * @return string */ protected function createDownloadUrlImportHistoryFile($fileName) { return $this->getUrl(self::IMPORT_HISTORY_FILE_DOWNLOAD_ROUTE, ['filename' => $fileName]); } }