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: * Convert csv parser
30: *
31: * @category Mage
32: * @package Mage_Dataflow
33: * @author Magento Core Team <core@magentocommerce.com>
34: */
35: class Mage_Dataflow_Model_Session_Parser_Csv extends Mage_Dataflow_Model_Convert_Parser_Abstract
36: {
37:
38: public function parse()
39: {
40: $fDel = $this->getVar('delimiter', ',');
41: $fEnc = $this->getVar('enclose', '"');
42:
43: if ($fDel=='\\t') {
44: $fDel = "\t";
45: }
46:
47: // fixed for multibyte characters
48: setlocale(LC_ALL, Mage::app()->getLocale()->getLocaleCode().'.UTF-8');
49:
50: $fp = tmpfile();
51: fputs($fp, $this->getData());
52: fseek($fp, 0);
53:
54: $data = array();
55: $sessionId = Mage::registry('current_dataflow_session_id');
56: $import = Mage::getModel('dataflow/import');
57: $map = new Varien_Convert_Mapper_Column();
58: for ($i=0; $line = fgetcsv($fp, 4096, $fDel, $fEnc); $i++) {
59: if (0==$i) {
60: if ($this->getVar('fieldnames')) {
61: $fields = $line;
62: continue;
63: } else {
64: foreach ($line as $j=>$f) {
65: $fields[$j] = 'column'.($j+1);
66: }
67: }
68: }
69: $row = array();
70: foreach ($fields as $j=>$f) {
71: $row[$f] = $line[$j];
72: }
73: /*
74: if ($i <= 100)
75: {
76: $data[] = $row;
77: }
78: */
79: //$map = new Varien_Convert_Mapper_Column();
80: $map->setData(array($row));
81: $map->map();
82: $row = $map->getData();
83: //$import = Mage::getModel('dataflow/import');
84: $import->setImportId(0);
85: $import->setSessionId($sessionId);
86: $import->setSerialNumber($i);
87: $import->setValue(serialize($row[0]));
88: $import->save();
89: //unset($import);
90: }
91: fclose($fp);
92: unset($sessionId);
93: //$this->setData($data);
94: return $this;
95: } // end
96:
97: public function unparse()
98: {
99: $csv = '';
100:
101: $fDel = $this->getVar('delimiter', ',');
102: $fEnc = $this->getVar('enclose', '"');
103: $fEsc = $this->getVar('escape', '\\');
104: $lDel = "\r\n";
105:
106: if ($fDel=='\\t') {
107: $fDel = "\t";
108: }
109:
110: $data = $this->getData();
111: $fields = $this->getGridFields($data);
112: $lines = array();
113:
114: if ($this->getVar('fieldnames')) {
115: $line = array();
116: foreach ($fields as $f) {
117: $line[] = $fEnc.str_replace(array('"', '\\'), array($fEsc.'"', $fEsc.'\\'), $f).$fEnc;
118: }
119: $lines[] = join($fDel, $line);
120: }
121: foreach ($data as $i=>$row) {
122: $line = array();
123: foreach ($fields as $f) {
124: /*
125: if (isset($row[$f]) && (preg_match('\"', $row[$f]) || preg_match('\\', $row[$f]))) {
126: $tmp = str_replace('\\', '\\\\',$row[$f]);
127: echo str_replace('"', '\"',$tmp).'<br>';
128: }
129: */
130: $v = isset($row[$f]) ? str_replace(array('"', '\\'), array($fEsc.'"', $fEsc.'\\'), $row[$f]) : '';
131:
132: $line[] = $fEnc.$v.$fEnc;
133: }
134: $lines[] = join($fDel, $line);
135: }
136: $result = join($lDel, $lines);
137: $this->setData($result);
138:
139: return $this;
140: }
141:
142: }
143: