sync
[Pman.Admin] / Import / Core_templatestr.php
1 <?php
2
3 /**
4  * generic import routine..
5  *
6  * - upload a file..
7  *
8  * - preview the result. / edit?
9  *
10  * - import..
11  * 
12  *
13  */
14
15
16 require_once 'Pman.php';
17 class Pman_Admin_Import_Core_templatestr extends Pman
18 {
19     var $cli  = false;
20      
21      
22      
23     function getAuth()
24     {
25         $cli = HTML_FlexyFramework::get()->cli;
26         if ($cli) {
27             $this->cli = true;
28             return true;
29         }
30         parent::getAuth();
31         $au = $this->getAuthUser();
32         if (!$au) {
33             $this->jerrAuth();
34         }
35         return true;
36     }
37     
38     function post($base = '' )
39     {
40         
41            // should handle uploaded file..
42         if (empty($_FILES['imageUpload']['tmp_name']) || 
43             empty($_FILES['imageUpload']['name']) || 
44             empty($_FILES['imageUpload']['type'])
45         ) {
46             $this->jerr ("Missing file details");
47             exit;
48         }
49         
50         PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
51     
52           
53         $this->transObj = DB_DataObject::factory('core_enum');
54         
55         $this->transObj->query('BEGIN');
56         
57         // first convert the file to a readable format..
58         //$rows = $this->readXLS("/home/alan/Downloads/oll_example.xls") ;
59         $rows = $this->readXLS($_FILES['imageUpload']['tmp_name']) ;
60         
61         $ret = $this->processRows($rows);
62         
63          
64         $this->jok("DONE", false, array('extra'=> $ret));
65         
66     }
67     
68     /*
69     function get($base = '',  $opts = array())
70     {
71         $rows = $this->readXLS("/var/lib/php/sessions/pressrelease-translations.xls") ;
72         
73        
74         
75         $ret = $this->processRows($rows);
76          
77         $this->jdata($ret);
78         exit;
79         
80     }
81     */
82     function processRows($rows)
83     { 
84         $ret = array();
85         foreach($rows as $r) {
86             if (isset($r['table id'])) {
87                 $ret[] = $this->updateTableTranslation($r);
88                 continue;
89             }
90             
91             $ret[] = $this->updateTranslation($r);
92             
93         }
94         return $ret;
95     }        
96     
97     
98     var $seq = 1;
99     function updateTranslation($r)
100     {
101         //print_R($r); DB_DataObject::DebugLevel(1);
102         $tr = DB_DataObject::Factory('core_templatestr');
103         $tr->autoJoin();
104
105        
106         $tr->whereAdd("join_template_id_id.template='{$tr->escape($r['template'])}'");
107         $tr->whereAdd("join_template_id_id.view_name='{$tr->escape($r['module'])}'");
108         $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
109         $tr->lang = $r['language'];
110         if ($tr->find(true)) {
111             $tt = DB_DataObject::Factory('core_templatestr');
112             $tt->get($tr->id);
113             $tr= clone($tt);
114             $tt->txt = $r['translation'];
115             $tt->updated = date('Y-m-d H:i:s');
116             $tt->update($tr);
117              
118             return 1;
119         }
120         return 0;
121     }
122     
123     
124     
125     function updateTableTranslation($r)
126     {
127       //   print_R($r); DB_DataObject::DebugLevel(1);
128         $tr = DB_DataObject::Factory('core_templatestr');
129         $tr->autoJoin();
130
131        
132         $tr->whereAdd("core_templatestr.on_id='{$tr->escape($r['table id'])}'");
133         $tr->whereAdd("core_templatestr.on_table='{$tr->escape($r['table'])}'");
134         $tr->whereAdd("core_templatestr.on_col='{$tr->escape($r['column'])}'");
135         $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
136         $tr->lang = $r['translation'];
137         if ($tr->find(true) && strlen(trim($r['txt']))) {
138             $tt = DB_DataObject::Factory('core_templatestr');
139             $tt->get($tr->id);
140             $tr= clone($tt);
141             $tt->txt = $r['txt'];
142             $tt->updated = date('Y-m-d H:i:s');
143             $tt->update($tr);
144              
145             return 1;
146         }
147         return 0;
148     }
149     
150     
151     function readXLS($file) {
152         
153         require_once 'System.php';
154         $ssconvert = System::which('ssconvert');
155         if (!$ssconvert) die("ssconvert not installed");
156         $csv = $this->tempName('csv');
157         $cmd = "$ssconvert  -T Gnumeric_stf:stf_csv ". escapeshellarg($file) . ' '.$csv;
158         
159          $data= `$cmd`;
160         
161         clearstatcache();
162          if (!file_exists($csv)) {
163             $this->jerr("Failed to make file . \n".
164                         $cmd . "\n" .
165                         $data
166                         );
167             
168             
169         }
170          //echo $data;
171         $fh = fopen($csv, 'r');
172         if (!$fh) {
173             $this->jerr("file invalid");
174         }
175         $rows = array();
176         $head = false;
177         $blank = 0;
178         while (false !== ($row = fgetcsv($fh))) {
179              
180             if ($head === false) {
181                 
182                 $h = $row;
183                 // skip header lines.
184                 array_shift($h);
185                 if (!strlen(implode('', $h))) {
186                     continue;
187                 }
188                 // how many empty rows..
189                 if (count(explode(',',(rtrim(implode(',', $h), " ,")))) < 3) {
190                     continue;
191                 }
192                 
193                 $head = array();
194                 foreach($row as $i=>$c) {
195                    $c = preg_replace('/[\t \n]+/', ' ', $c);
196                    $head[$i] = strtolower(trim($c));
197                 }
198                 continue;
199             }
200             
201             if (!strlen(trim(implode('', $h)))) {
202                 $blank++;
203                 if ($blank > 3) { 
204                     break;
205                 }
206                 continue;
207             }
208             
209             $blank = 0;
210             $rrow = array();
211             foreach($row as $i=>$c) {
212                 $c = preg_replace('/[\t \n]+/', ' ', $c);
213                 $rrow[$head[$i]] = trim($c);
214             }
215            // var_dump($row);
216           //  print_r($max);
217             $rows[] = $rrow;
218         }
219         unlink($csv);
220         return $rows;
221         
222         
223     }
224     
225 }