reportProcessor = $reportProcessor; $this->historyModel = $historyModel; $this->reportHelper = $reportHelper; $this->_helper = $helper; parent::__construct($context); } /** * TODO: Refactor Code * @param \Magento\Framework\View\Element\AbstractBlock $resultBlock * @param ProcessingErrorAggregatorInterface $errorAggregator * @return $this */ public function getImportErrorMessages( ProcessingErrorAggregatorInterface $errorAggregator ) { $resultText = ''; if ($errorAggregator->getErrorsCount()) { $message = ''; $counter = 0; foreach ($this->getErrorMessages($errorAggregator) as $error) { $message .= ++$counter . '. ' . $error . '
'; if ($counter >= self::LIMIT_ERRORS_MESSAGE) { break; } } if ($errorAggregator->hasFatalExceptions()) { foreach ($this->getSystemExceptions($errorAggregator) as $error) { $message .= $error->getErrorMessage() . __('Additional data') . ': ' . $error->getErrorDescription() . ''; } } try { $resultText.= '' . __('Following Error(s) has been occurred during importing process:') . '
' . '
' . __('Only first 100 errors are displayed here. ') . '' . __('Download full report') . '
' . '
' . $message . '
' ; } catch (\Exception $e) { foreach ($this->getErrorMessages($errorAggregator) as $errorMessage) { $resultText.= $errorMessage; } } } return $resultText; } /** * @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 rows:') . ' ' . implode(', ', $rows); } return $messages; } /** * @param ProcessingErrorAggregatorInterface $errorAggregator * @return \Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError[] */ protected function getSystemExceptions(ProcessingErrorAggregatorInterface $errorAggregator) { return $errorAggregator->getErrorsByCode([AbstractEntity::ERROR_CODE_SYSTEM_EXCEPTION]); } /** * @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; } /** * @param string $fileName * @return string */ protected function createDownloadUrlImportHistoryFile($fileName) { return $this->getUrl(self::IMPORT_HISTORY_FILE_DOWNLOAD_ROUTE, ['filename' => $fileName]); } /** * Generate url by route and parameters * * @param string $route * @param array $params * @return string */ public function getUrl($route = '', $params = []) { return $this->_helper->getUrl($route, $params); } }