/** * Validate uploaded files action * * @return void */ public function validateAction() { $data = $this->getRequest()->getPost(); if ($data) { $this->loadLayout(false); /** @var $resultBlock Mage_ImportExport_Block_Adminhtml_Import_Frame_Result */ $resultBlock = $this->getLayout()->getBlock('import.frame.result'); // common actions $resultBlock->addAction('show', 'import_validation_container')->addAction('clear', array(Mage_ImportExport_Model_Import::FIELD_NAME_SOURCE_FILE, Mage_ImportExport_Model_Import::FIELD_NAME_IMG_ARCHIVE_FILE)); try { /** @var $import Mage_ImportExport_Model_Import */ $import = Mage::getModel('Mage_ImportExport_Model_Import')->setData($data); $source = Mage_ImportExport_Model_Import_Adapter::findAdapterFor($import->uploadSource()); $validationResult = $import->validateSource($source); if (!$import->getProcessedRowsCount()) { $resultBlock->addError($this->__('File does not contain data. Please upload another one')); } else { if (!$validationResult) { if ($import->getProcessedRowsCount() == $import->getInvalidRowsCount()) { $resultBlock->addNotice($this->__('File is totally invalid. Please fix errors and re-upload file')); } elseif ($import->getErrorsCount() >= $import->getErrorsLimit()) { $resultBlock->addNotice($this->__('Errors limit (%d) reached. Please fix errors and re-upload file', $import->getErrorsLimit())); } else { if ($import->isImportAllowed()) { $resultBlock->addNotice($this->__('Please fix errors and re-upload file or simply press "Import" button to skip rows with errors'), true); } else { $resultBlock->addNotice($this->__('File is partially valid, but import is not possible'), false); } } // errors info foreach ($import->getErrors() as $errorCode => $rows) { $error = $errorCode . ' ' . $this->__('in rows:') . ' ' . implode(', ', $rows); $resultBlock->addError($error); } } else { if ($import->isImportAllowed()) { $resultBlock->addSuccess($this->__('File is valid! To start import process press "Import" button'), true); } else { $resultBlock->addError($this->__('File is valid, but import is not possible'), false); } } $resultBlock->addNotice($import->getNotices()); $resultBlock->addNotice($this->__('Checked rows: %d, checked entities: %d, invalid rows: %d, total errors: %d', $import->getProcessedRowsCount(), $import->getProcessedEntitiesCount(), $import->getInvalidRowsCount(), $import->getErrorsCount())); } } catch (Exception $e) { $resultBlock->addNotice($this->__('Please fix errors and re-upload file'))->addError($e->getMessage()); } $this->renderLayout(); } elseif ($this->getRequest()->isPost() && empty($_FILES)) { $this->loadLayout(false); $resultBlock = $this->getLayout()->getBlock('import.frame.result'); $resultBlock->addError($this->__('File was not uploaded')); $this->renderLayout(); } else { $this->_getSession()->addError($this->__('Data is invalid or file is not uploaded')); $this->_redirect('*/*/index'); } }
/** * Returns source adapter object. * * @param string $sourceFile Full path to source file * @return Mage_ImportExport_Model_Import_Adapter_Abstract */ protected function _getSourceAdapter($sourceFile) { return Mage_ImportExport_Model_Import_Adapter::findAdapterFor($sourceFile); }
/** * Test import data method with delete behaviour * * @magentoDataFixture Mage/ImportExport/_files/customers_for_address_import.php * @covers Mage_ImportExport_Model_Import_Entity_Eav_Customer_Address::_importData */ public function testImportDataDelete() { // set behaviour $this->_entityAdapter->setParameters(array('behavior' => Mage_ImportExport_Model_Import::BEHAVIOR_DELETE)); // set fixture CSV file $sourceFile = __DIR__ . '/../_files/address_import_delete.csv'; $result = $this->_entityAdapter->setSource(Mage_ImportExport_Model_Import_Adapter::findAdapterFor($sourceFile))->isDataValid(); $this->assertTrue($result, 'Validation result must be true.'); // import data $this->_entityAdapter->importData(); // key attribute $keyAttribute = 'postcode'; // get addresses /** @var $addressCollection Mage_Customer_Model_Resource_Address_Collection */ $addressCollection = Mage::getResourceModel('Mage_Customer_Model_Resource_Address_Collection'); $addressCollection->addAttributeToSelect($keyAttribute); $addresses = array(); /** @var $address Mage_Customer_Model_Address */ foreach ($addressCollection as $address) { $addresses[$address->getData($keyAttribute)] = $address; } // is addresses exists $this->assertArrayNotHasKey($this->_deleteData['delete'], $addresses, 'Address must not exist.'); $this->assertArrayHasKey($this->_deleteData['not_delete'], $addresses, 'Address must exist.'); }
/** * @param string $behavior * @param string $sourceFile * @param array $dataBefore * @param array $dataAfter * @param array $errors * * @magentoDataFixture Mage/ImportExport/_files/customers_for_address_import.php * @magentoAppIsolation enabled * * @dataProvider importDataDataProvider * @covers Mage_ImportExport_Model_Import_Entity_CustomerComposite::_importData */ public function testImportData($behavior, $sourceFile, array $dataBefore, array $dataAfter, array $errors = array()) { // set entity adapter parameters $this->_entityAdapter->setParameters(array('behavior' => $behavior)); // set fixture CSV file $result = $this->_entityAdapter->setSource(Mage_ImportExport_Model_Import_Adapter::findAdapterFor($sourceFile))->isDataValid(); if ($errors) { $this->assertFalse($result); } else { $this->assertTrue($result); } // assert validation errors // can't use error codes because entity adapter gathers only error messages from aggregated adapters $actualErrors = array_values($this->_entityAdapter->getErrorMessages()); $this->assertEquals($errors, $actualErrors); // assert data before import $this->_assertCustomerData($dataBefore); // import data $this->_entityAdapter->importData(); // assert data after import $this->_assertCustomerData($dataAfter); }