*/ class Mage_Dataflow_Model_Convert_Adapter_Io extends Mage_Dataflow_Model_Convert_Adapter_Abstract { const XML_PATH_EXPORT_LOCAL_VALID_PATH = 'general/file/importexport_local_valid_paths'; /** * @return Varien_Io_Abstract */ public function getResource($forWrite = false) { if (!$this->_resource) { $type = $this->getVar('type', 'file'); $className = 'Varien_Io_' . ucwords($type); $this->_resource = new $className(); $isError = false; $ioConfig = $this->getVars(); switch ($this->getVar('type', 'file')) { case 'file': //validate export/import path $path = rtrim($ioConfig['path'], '\\/') . DS . $ioConfig['filename']; /** @var $validator Mage_Core_Model_File_Validator_AvailablePath */ $validator = Mage::getModel('core/file_validator_availablePath'); $validator->setPaths( Mage::getStoreConfig(self::XML_PATH_EXPORT_LOCAL_VALID_PATH) ); if (!$validator->isValid($path)) { foreach ($validator->getMessages() as $message) { Mage::throwException($message); return false; } } if (preg_match('#^' . preg_quote(DS, '#').'#', $this->getVar('path')) || preg_match('#^[a-z]:' . preg_quote(DS, '#') . '#i', $this->getVar('path'))) { $path = $this->_resource->getCleanPath($this->getVar('path')); } else { $baseDir = Mage::getBaseDir(); $path = $this->_resource->getCleanPath($baseDir . DS . trim($this->getVar('path'), DS)); } $this->_resource->checkAndCreateFolder($path); $realPath = realpath($path); if (!$isError && $realPath === false) { $message = Mage::helper('dataflow')->__('The destination folder "%s" does not exist or there is no access to create it.', $ioConfig['path']); Mage::throwException($message); } elseif (!$isError && !is_dir($realPath)) { $message = Mage::helper('dataflow')->__('Destination folder "%s" is not a directory.', $realPath); Mage::throwException($message); } elseif (!$isError) { if ($forWrite && !is_writeable($realPath)) { $message = Mage::helper('dataflow')->__('Destination folder "%s" is not writable.', $realPath); Mage::throwException($message); } else { $ioConfig['path'] = rtrim($realPath, DS); } } break; default: $ioConfig['path'] = rtrim($this->getVar('path'), '/'); break; } if ($isError) { return false; } try { $this->_resource->open($ioConfig); } catch (Exception $e) { $message = Mage::helper('dataflow')->__('An error occurred while opening file: "%s".', $e->getMessage()); Mage::throwException($message); } } return $this->_resource; } /** * Load data * * @return Mage_Dataflow_Model_Convert_Adapter_Io */ public function load() { if (!$this->getResource()) { return $this; } $batchModel = Mage::getSingleton('dataflow/batch'); $destFile = $batchModel->getIoAdapter()->getFile(true); $result = $this->getResource()->read($this->getVar('filename'), $destFile); $filename = $this->getResource()->pwd() . '/' . $this->getVar('filename'); if (false === $result) { $message = Mage::helper('dataflow')->__('Could not load file: "%s".', $filename); Mage::throwException($message); } else { $message = Mage::helper('dataflow')->__('Loaded successfully: "%s".', $filename); $this->addException($message); } $this->setData($result); return $this; } /** * Save result to destination file from temporary * * @return Mage_Dataflow_Model_Convert_Adapter_Io */ public function save() { if (!$this->getResource(true)) { return $this; } $batchModel = Mage::getSingleton('dataflow/batch'); $dataFile = $batchModel->getIoAdapter()->getFile(true); $filename = $this->getVar('filename'); $result = $this->getResource()->write($filename, $dataFile, 0777); if (false === $result) { $message = Mage::helper('dataflow')->__('Could not save file: %s.', $filename); Mage::throwException($message); } else { $message = Mage::helper('dataflow')->__('Saved successfully: "%s" [%d byte(s)].', $filename, $batchModel->getIoAdapter()->getFileSize()); if ($this->getVar('link')) { $message .= Mage::helper('dataflow')->__('Link', $this->getVar('link')); } $this->addException($message); } return $this; } }