예제 #1
0
 /**
  * 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');
     }
 }
예제 #2
0
파일: Import.php 프로젝트: nemphys/magento2
 /**
  * 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);
 }
예제 #3
0
 /**
  * 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.');
 }
예제 #4
0
 /**
  * @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);
 }