1: <?php
2: /**
3: * Magento
4: *
5: * NOTICE OF LICENSE
6: *
7: * This source file is subject to the Open Software License (OSL 3.0)
8: * that is bundled with this package in the file LICENSE.txt.
9: * It is also available through the world-wide-web at this URL:
10: * http://opensource.org/licenses/osl-3.0.php
11: * If you did not receive a copy of the license and are unable to
12: * obtain it through the world-wide-web, please send an email
13: * to license@magentocommerce.com so we can send you a copy immediately.
14: *
15: * DISCLAIMER
16: *
17: * Do not edit or add to this file if you wish to upgrade Magento to newer
18: * versions in the future. If you wish to customize Magento for your
19: * needs please refer to http://www.magentocommerce.com for more information.
20: *
21: * @category Mage
22: * @package Mage_Dataflow
23: * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24: * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25: */
26:
27:
28: /**
29: * Dataflow batch Io model
30: *
31: * @category Mage
32: * @package Mage_Dataflow
33: * @author Magento Core Team <core@magentocommerce.com>
34: */
35: class Mage_Dataflow_Model_Batch_Io
36: {
37: const TMP_DIR = '/var/tmp/';
38: const TMP_NAME = 'batch_%d.tmp';
39:
40: /**
41: * Dataflow Batch model
42: *
43: * @var Mage_Dataflow_Model_Batch
44: */
45: protected $_batchModel;
46:
47: /**
48: * Full path to tmp dir
49: *
50: * @var string
51: */
52: protected $_path;
53:
54: /**
55: * Filename
56: *
57: * @var string
58: */
59: protected $_filename;
60:
61: /**
62: * Varien IO File class
63: *
64: * @var Varien_Io_File
65: */
66: protected $_ioFile;
67:
68: /**
69: * size of file
70: *
71: * @var int
72: */
73: protected $_fileSize = 0;
74:
75: /**
76: * Init model (required)
77: *
78: * @param Mage_Dataflow_Model_Batch $object
79: * @return Mage_Dataflow_Model_Batch_Io
80: */
81: public function init(Mage_Dataflow_Model_Batch $object)
82: {
83: $this->_batchModel = $object;
84: return $this;
85: }
86:
87: /**
88: * Retrieve real path to tmp dir
89: *
90: * @return string
91: */
92: public function getPath()
93: {
94: if (is_null($this->_path)) {
95: $this->_path = $this->getIoAdapter()->getCleanPath(Mage::getBaseDir('tmp'));
96: $this->getIoAdapter()->checkAndCreateFolder($this->_path);
97: }
98: return $this->_path;
99: }
100:
101: /**
102: * Retrieve tmp filename
103: *
104: * @return string
105: */
106: public function getFile($withPath = false)
107: {
108: if (is_null($this->_filename)) {
109: $this->_filename = sprintf(self::TMP_NAME, $this->_batchModel->getId());
110: }
111: if ($withPath) {
112: return $this->getPath() . $this->_filename;
113: }
114: return $this->_filename;
115: }
116:
117: /**
118: * Retrieve Io File Adapter
119: *
120: * @return Varien_Io_File
121: */
122: public function getIoAdapter()
123: {
124: if (is_null($this->_ioFile)) {
125: $this->_ioFile = new Varien_Io_File();
126: }
127: return $this->_ioFile;
128: }
129:
130: /**
131: * Open file in stream mode
132: *
133: * @return Mage_Dataflow_Model_Batch_Io
134: */
135: public function open($write = true)
136: {
137: $mode = $write ? 'w+' : 'r+';
138: $ioConfig = array(
139: 'path' => $this->getPath()
140: );
141: $this->getIoAdapter()->setAllowCreateFolders(true);
142: $this->getIoAdapter()->open($ioConfig);
143: $this->getIoAdapter()->streamOpen($this->getFile(), $mode);
144:
145: $this->_fileSize = 0;
146:
147: return $this;
148: }
149:
150: /**
151: * Write string
152: *
153: * @param string $string
154: * @return bool
155: */
156: public function write($string)
157: {
158: $this->_fileSize += strlen($string);
159: return $this->getIoAdapter()->streamWrite($string);
160: }
161:
162: /**
163: * Read up to 1K bytes from the file pointer
164: * Reading stops as soon as one of the following conditions is met:
165: * # length bytes have been read
166: * # EOF (end of file) is reached
167: *
168: * @return string|array
169: */
170: public function read($csv = false, $delimiter = ',', $enclosure = '"')
171: {
172: if ($csv) {
173: $content = $this->getIoAdapter()->streamReadCsv($delimiter, $enclosure);
174: }
175: else {
176: $content = $this->getIoAdapter()->streamRead(1024);
177: $this->_fileSize += strlen($content);
178: }
179: return $content;
180: }
181:
182: /**
183: * Close file
184: *
185: * @return bool
186: */
187: public function close()
188: {
189: return $this->getIoAdapter()->streamClose();
190: }
191:
192: public function clear()
193: {
194: return $this->getIoAdapter()->rm($this->getFile(true));
195: }
196:
197: /**
198: * Get writed file size
199: *
200: * @return unknown
201: */
202: public function getFileSize()
203: {
204: return $this->_fileSize;
205: }
206: }
207: