Fix #6494 - translations code for reports
[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'=> $rows));
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             $ret[] = $this->updateTranslation($r);
87             
88         }
89         return $ret;
90     }        
91     
92     
93     var $seq = 1;
94     function updateTranslation($r)
95     {
96         //print_R($r); DB_DataObject::DebugLevel(1);
97         $tr = DB_DataObject::Factory('core_templatestr');
98         $tr->autoJoin();
99
100        
101         $tr->whereAdd("join_template_id_id.template='{$tr->escape($r['template'])}'");
102         $tr->whereAdd("join_template_id_id.view_name='{$tr->escape($r['module'])}'");
103         $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
104         $tr->lang = $r['language'];
105         if ($tr->find(true)) {
106             $tt = DB_DataObject::Factory('core_templatestr');
107             $tt->get($tr->id);
108             $tr= clone($tt);
109             $tt->txt = $r['translation'];
110             $tt->updated = date('Y-m-d H:i:s');
111             $tt->update($tr);
112              
113             return 1;
114         }
115         return 0;
116     }
117     
118     
119     function readXLS($file) {
120         
121         require_once 'System.php';
122         $ssconvert = System::which('ssconvert');
123         if (!$ssconvert) die("ssconvert not installed");
124         $csv = $this->tempName('csv');
125         $cmd = "$ssconvert  -T Gnumeric_stf:stf_csv ". escapeshellarg($file) . ' '.$csv;
126         
127          $data= `$cmd`;
128         
129         clearstatcache();
130          if (!file_exists($csv)) {
131             $this->jerr("Failed to make file . \n".
132                         $cmd . "\n" .
133                         $data
134                         );
135             
136             
137         }
138          //echo $data;
139         $fh = fopen($csv, 'r');
140         if (!$fh) {
141             $this->jerr("file invalid");
142         }
143         $rows = array();
144         $head = false;
145         $blank = 0;
146         while (false !== ($row = fgetcsv($fh))) {
147              
148             if ($head === false) {
149                 
150                 $h = $row;
151                 // skip header lines.
152                 array_shift($h);
153                 if (!strlen(implode('', $h))) {
154                     continue;
155                 }
156                 // how many empty rows..
157                 if (count(explode(',',(rtrim(implode(',', $h), " ,")))) < 3) {
158                     continue;
159                 }
160                 
161                 $head = array();
162                 foreach($row as $i=>$c) {
163                    $c = preg_replace('/[\t \n]+/', ' ', $c);
164                    $head[$i] = strtolower(trim($c));
165                 }
166                 continue;
167             }
168             
169             if (!strlen(trim(implode('', $h)))) {
170                 $blank++;
171                 if ($blank > 3) { 
172                     break;
173                 }
174                 continue;
175             }
176             
177             $blank = 0;
178             $rrow = array();
179             foreach($row as $i=>$c) {
180                 $c = preg_replace('/[\t \n]+/', ' ', $c);
181                 $rrow[$head[$i]] = trim($c);
182             }
183            // var_dump($row);
184           //  print_r($max);
185             $rows[] = $rrow;
186         }
187         unlink($csv);
188         return $rows;
189         
190         
191     }
192     
193 }