55 */
66namespace Magento\ImportExport\Controller\Adminhtml;
77
8- use Magento\Backend\App\Action;
9- use Magento\ImportExport\Model\Import\Entity\AbstractEntity;
8+ use Magento\Backend\App\Action\Context;
9+ use Magento\Framework\View\Element\AbstractBlock;
10+ use Magento\ImportExport\Helper\Report;
11+ use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
1012use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
1113use Magento\ImportExport\Model\History as ModelHistory;
1214use Magento\Framework\Escaper;
1315use Magento\Framework\App\ObjectManager;
16+ use Magento\ImportExport\Model\Import\RenderErrorMessages;
17+ use Magento\ImportExport\Model\Report\ReportProcessorInterface;
1418
1519/**
1620 * Import controller
1721 */
1822abstract class ImportResult extends Import
1923{
20- const IMPORT_HISTORY_FILE_DOWNLOAD_ROUTE = '*/history/download';
24+ public const IMPORT_HISTORY_FILE_DOWNLOAD_ROUTE = '*/history/download';
2125
2226 /**
2327 * Limit view errors
2428 */
25- const LIMIT_ERRORS_MESSAGE = 100;
29+ public const LIMIT_ERRORS_MESSAGE = 100;
2630
2731 /**
28- * @var \Magento\ImportExport\Model\Report\ ReportProcessorInterface
32+ * @var ReportProcessorInterface
2933 */
30- protected $reportProcessor;
34+ protected ReportProcessorInterface $reportProcessor;
3135
3236 /**
33- * @var \Magento\ImportExport\Model\History
37+ * @var ModelHistory
3438 */
35- protected $historyModel;
39+ protected ModelHistory $historyModel;
3640
3741 /**
38- * @var \Magento\ImportExport\Helper\ Report
42+ * @var Report
3943 */
40- protected $reportHelper;
44+ protected Report $reportHelper;
4145
4246 /**
4347 * @var Escaper|null
4448 */
4549 protected $escaper;
4650
4751 /**
48- * @param \Magento\Backend\App\Action\Context $context
49- * @param \Magento\ImportExport\Model\Report\ReportProcessorInterface $reportProcessor
50- * @param \Magento\ImportExport\Model\History $historyModel
51- * @param \Magento\ImportExport\Helper\Report $reportHelper
52+ * @var RenderErrorMessages
53+ */
54+ private RenderErrorMessages $renderErrorMessages;
55+
56+ /**
57+ * @param Context $context
58+ * @param ReportProcessorInterface $reportProcessor
59+ * @param ModelHistory $historyModel
60+ * @param Report $reportHelper
5261 * @param Escaper|null $escaper
62+ * @param RenderErrorMessages|null $renderErrorMessages
5363 */
5464 public function __construct(
55- \Magento\Backend\App\Action\Context $context,
56- \Magento\ImportExport\Model\Report\ReportProcessorInterface $reportProcessor,
57- \Magento\ImportExport\Model\History $historyModel,
58- \Magento\ImportExport\Helper\Report $reportHelper,
59- Escaper $escaper = null
65+ Context $context,
66+ ReportProcessorInterface $reportProcessor,
67+ ModelHistory $historyModel,
68+ Report $reportHelper,
69+ Escaper $escaper = null,
70+ ?RenderErrorMessages $renderErrorMessages = null
6071 ) {
6172 parent::__construct($context);
6273 $this->reportProcessor = $reportProcessor;
6374 $this->historyModel = $historyModel;
6475 $this->reportHelper = $reportHelper;
6576 $this->escaper = $escaper
6677 ?? ObjectManager::getInstance()->get(Escaper::class);
78+ $this->renderErrorMessages = $renderErrorMessages ??
79+ ObjectManager::getInstance()->get(RenderErrorMessages::class);
6780 }
6881
6982 /**
7083 * Add Error Messages for Import
7184 *
72- * @param \Magento\Framework\View\Element\ AbstractBlock $resultBlock
85+ * @param AbstractBlock $resultBlock
7386 * @param ProcessingErrorAggregatorInterface $errorAggregator
7487 * @return $this
7588 */
7689 protected function addErrorMessages(
77- \Magento\Framework\View\Element\ AbstractBlock $resultBlock,
90+ AbstractBlock $resultBlock,
7891 ProcessingErrorAggregatorInterface $errorAggregator
7992 ) {
8093 if ($errorAggregator->getErrorsCount()) {
81- $message = '';
82- $counter = 0;
83- $escapedMessages = [];
84- foreach ($this->getErrorMessages($errorAggregator) as $error) {
85- $escapedMessages[] = (++$counter) . '. ' . $this->escaper->escapeHtml($error);
86- if ($counter >= self::LIMIT_ERRORS_MESSAGE) {
87- break;
88- }
89- }
90- if ($errorAggregator->hasFatalExceptions()) {
91- foreach ($this->getSystemExceptions($errorAggregator) as $error) {
92- $escapedMessages[] = $this->escaper->escapeHtml($error->getErrorMessage())
93- . ' <a href="#" onclick="$(this).next().show();$(this).hide();return false;">'
94- . __('Show more') . '</a><div style="display:none;">' . __('Additional data') . ': '
95- . $this->escaper->escapeHtml($error->getErrorDescription()) . '</div>';
96- }
97- }
9894 try {
99- $message .= implode('<br>', $escapedMessages);
10095 $resultBlock->addNotice(
101- '<strong>' . __('Following Error(s) has been occurred during importing process:') . '</strong><br>'
102- . '<div class="import-error-wrapper">' . __('Only the first 100 errors are shown. ')
103- . '<a href="'
104- . $this->createDownloadUrlImportHistoryFile($this->createErrorReport($errorAggregator))
105- . '">' . __('Download full report') . '</a><br>'
106- . '<div class="import-error-list">' . $message . '</div></div>'
96+ $this->renderErrorMessages->renderMessages($errorAggregator)
10797 );
10898 } catch (\Exception $e) {
10999 foreach ($this->getErrorMessages($errorAggregator) as $errorMessage) {
@@ -118,28 +108,23 @@ protected function addErrorMessages(
118108 /**
119109 * Get all Error Messages from Import Results
120110 *
121- * @param \Magento\ImportExport\Model\Import\ErrorProcessing\ ProcessingErrorAggregatorInterface $errorAggregator
111+ * @param ProcessingErrorAggregatorInterface $errorAggregator
122112 * @return array
123113 */
124114 protected function getErrorMessages(ProcessingErrorAggregatorInterface $errorAggregator)
125115 {
126- $messages = [];
127- $rowMessages = $errorAggregator->getRowsGroupedByErrorCode([], [AbstractEntity::ERROR_CODE_SYSTEM_EXCEPTION]);
128- foreach ($rowMessages as $errorCode => $rows) {
129- $messages[] = $errorCode . ' ' . __('in row(s):') . ' ' . implode(', ', $rows);
130- }
131- return $messages;
116+ return $this->renderErrorMessages->getErrorMessages($errorAggregator);
132117 }
133118
134119 /**
135120 * Get System Generated Exception
136121 *
137122 * @param ProcessingErrorAggregatorInterface $errorAggregator
138- * @return \Magento\ImportExport\Model\Import\ErrorProcessing\ ProcessingError[]
123+ * @return ProcessingError[]
139124 */
140125 protected function getSystemExceptions(ProcessingErrorAggregatorInterface $errorAggregator)
141126 {
142- return $errorAggregator->getErrorsByCode([AbstractEntity::ERROR_CODE_SYSTEM_EXCEPTION] );
127+ return $this->renderErrorMessages->getSystemExceptions($errorAggregator );
143128 }
144129
145130 /**
@@ -150,15 +135,7 @@ protected function getSystemExceptions(ProcessingErrorAggregatorInterface $error
150135 */
151136 protected function createErrorReport(ProcessingErrorAggregatorInterface $errorAggregator)
152137 {
153- $this->historyModel->loadLastInsertItem();
154- $sourceFile = $this->reportHelper->getReportAbsolutePath($this->historyModel->getImportedFile());
155- $writeOnlyErrorItems = true;
156- if ($this->historyModel->getData('execution_time') == ModelHistory::IMPORT_VALIDATION) {
157- $writeOnlyErrorItems = false;
158- }
159- $fileName = $this->reportProcessor->createReport($sourceFile, $errorAggregator, $writeOnlyErrorItems);
160- $this->historyModel->addErrorReportFile($fileName);
161- return $fileName;
138+ return $this->renderErrorMessages->createErrorReport($errorAggregator);
162139 }
163140
164141 /**
@@ -169,6 +146,6 @@ protected function createErrorReport(ProcessingErrorAggregatorInterface $errorAg
169146 */
170147 protected function createDownloadUrlImportHistoryFile($fileName)
171148 {
172- return $this->getUrl(self::IMPORT_HISTORY_FILE_DOWNLOAD_ROUTE, ['filename' => $fileName] );
149+ return $this->renderErrorMessages->createDownloadUrlImportHistoryFile( $fileName);
173150 }
174151}
0 commit comments