diff --git a/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product.php b/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product.php index d9d6154e..e9256947 100644 --- a/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product.php +++ b/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product.php @@ -114,6 +114,13 @@ class AvS_FastSimpleImport_Model_Import_Entity_Product extends AvS_FastSimpleImp 'country_of_manufacture' ); + /** + * Downloadable files uploader + * + * @var AvS_FastSimpleImport_Model_Import_Uploader_Downloadable + */ + protected $_downloadableUploader; + public function __construct() { parent::__construct(); @@ -1592,8 +1599,8 @@ protected function _getUploader() $this->_fileUploader->init(); $this->_fileUploader->removeValidateCallback('catalog_product_image'); - $tmpDir = Mage::getConfig()->getOptions()->getMediaDir() . '/import'; - $destDir = Mage::getConfig()->getOptions()->getMediaDir() . '/catalog/product'; + $tmpDir = Mage::getConfig()->getOptions()->getMediaDir() . DS . 'import'; + $destDir = Mage::getConfig()->getOptions()->getMediaDir() . DS . 'catalog' . DS . 'product'; if (!is_writable($destDir)) { @mkdir($destDir, 0777, true); } @@ -1612,29 +1619,46 @@ protected function _getUploader() } /** - * @param $fileName - * @return bool + * Returns an object for upload downloadable files + * + * @return AvS_FastSimpleImport_Model_Import_Uploader_Downloadable */ - protected function moveDownloadableFile($fileName) + protected function _getDownloadableUploader() { - $filePath = $this->_getUploader()->getTmpDir() . $fileName; - $basePath = Mage::getModel('downloadable/link')->getBasePath(); - $destDirectory = dirname(Mage::helper('downloadable/file')->getFilePath($basePath, $fileName)); - // make sure that the destination directory exists! - $ioObject = new Varien_Io_File(); - try { - $ioObject->open(array('path' => $destDirectory)); - } catch (Exception $e) { - $ioObject->mkdir($destDirectory, 0777, true); - $ioObject->open(array('path' => $destDirectory)); - } - $destFile = $basePath . DS . $fileName; - $sourceFile = realpath($filePath); - if ($sourceFile !== false) { - return copy($sourceFile, $destFile); - } else { - return false; + if (is_null($this->_downloadableUploader)) { + // make sure to pass null as a constructor argument, so that no upload file is set! + $this->_downloadableUploader = Mage::getModel('fastsimpleimport/import_uploader_downloadable', null); + $this->_downloadableUploader->init(); + + $tmpDir = Mage::getConfig()->getOptions()->getMediaDir() . DS . 'import'; + $destDir = Mage::getModel('downloadable/link')->getBasePath(); + if ( ! is_writable($destDir)) { + @mkdir($destDir, 0777, true); + } + if ( ! file_exists($tmpDir)) { + @mkdir($tmpDir, 0777, true); + } + if ( ! $this->_downloadableUploader->setTmpDir($tmpDir)) { + Mage::throwException("File directory '{$tmpDir}' is not readable."); + } + if ( ! $this->_downloadableUploader->setDestDir($destDir)) { + Mage::throwException("File directory '{$destDir}' is not writable."); + } } + + return $this->_downloadableUploader; + } + + /** + * @param $fileName + * + * @return string + */ + protected function _moveDownloadableFile($fileName) + { + $res = $this->_getDownloadableUploader()->move($fileName); + + return $res['file']; } /** @@ -2012,11 +2036,11 @@ protected function _saveDownloadableLinks(array $downloadableData) return $this; } - $downloadableLinkTableName = $this->_getDownloadableLinksTableName(); + $downloadableLinkTableName = $this->_getDownloadableLinksTableName(); $downloadableLinkTitleTableName = $this->_getDownloadableLinksTitleTableName(); foreach ($downloadableData as $productSku => $downloadableLink) { - $productId = $this->_newSku[$productSku]['entity_id']; + $productId = $this->_newSku[$productSku]['entity_id']; $insertedDownloadableLinks = []; if (Mage_ImportExport_Model_Import::BEHAVIOR_APPEND != $this->getBehavior()) { @@ -2032,32 +2056,27 @@ protected function _saveDownloadableLinks(array $downloadableData) ->where('product_id IN (?)', $productId) ->where('link_file = (?)', $insertValue['file'])); - if (!in_array($insertValue['file'], $insertedDownloadableLinks) && !$alreadyImported) { - $valueArr = array( - 'product_id' => $productId, - 'link_file' => $insertValue['file'], - 'link_type' => 'file', + if ( ! in_array($insertValue['file'], $insertedDownloadableLinks) && ! $alreadyImported) { + $insertedDownloadableLinks[] = $insertValue['file']; + $linkFile = $this->_moveDownloadableFile($insertValue['file']); + $valueArr = array( + 'product_id' => $productId, + 'link_file' => $linkFile, + 'link_type' => 'file', 'number_of_downloads' => $insertValue['number_of_downloads'], ); - $this->_connection - ->insertOnDuplicate($downloadableLinkTableName, $valueArr, array('product_id')); + $this->_connection->insertOnDuplicate($downloadableLinkTableName, $valueArr, array('product_id')); $linkId = $this->_connection->fetchOne('SELECT MAX(`link_id`) FROM ' . $downloadableLinkTableName); $valueArr = array( - 'store_id' => $insertValue['store_id'], - 'title' => $insertValue['title'], - 'link_id' => $linkId, + 'store_id' => $insertValue['store_id'], + 'title' => $insertValue['title'], + 'link_id' => $linkId, ); - $this->_connection - ->insertOnDuplicate($downloadableLinkTitleTableName, $valueArr, array('link_id')); - - $this->moveDownloadableFile($insertValue['file']); - $insertedDownloadableLinks[] = $insertValue['file']; - - + $this->_connection->insertOnDuplicate($downloadableLinkTitleTableName, $valueArr, array('link_id')); } } } diff --git a/src/app/code/community/AvS/FastSimpleImport/Model/Import/Uploader/Downloadable.php b/src/app/code/community/AvS/FastSimpleImport/Model/Import/Uploader/Downloadable.php new file mode 100644 index 00000000..48cb8b04 --- /dev/null +++ b/src/app/code/community/AvS/FastSimpleImport/Model/Import/Uploader/Downloadable.php @@ -0,0 +1,18 @@ +removeValidateCallback('catalog_product_image'); + $this->removeValidateCallback(Mage_Core_Model_File_Validator_Image::NAME); + } + +}