4 * generic import routine..
8 * - preview the result. / edit?
16 require_once 'Pman.php';
17 class Pman_Admin_Import_Core_templatestr extends Pman
25 $cli = HTML_FlexyFramework::get()->cli;
31 $au = $this->getAuthUser();
38 function post($base = '' )
41 // should handle uploaded file..
42 if (empty($_FILES['imageUpload']['tmp_name']) ||
43 empty($_FILES['imageUpload']['name']) ||
44 empty($_FILES['imageUpload']['type'])
46 $this->jerr ("Missing file details");
50 PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
53 $this->transObj = DB_DataObject::factory('core_enum');
55 $this->transObj->query('BEGIN');
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']) ;
61 $ret = $this->processRows($rows);
64 $this->jok("DONE", false, array('extra'=> $ret));
69 function get($base = '', $opts = array())
71 $rows = $this->readXLS("/var/lib/php/sessions/pressrelease-translations.xls") ;
75 $ret = $this->processRows($rows);
82 function processRows($rows)
85 foreach($rows as $r) {
86 if (isset($r['table id'])) {
87 $ret[] = $this->updateTableTranslation($r);
91 $ret[] = $this->updateTranslation($r);
96 function updateTranslation($r)
98 // determine the type of file:
100 if (empty($r['template']) || empty($r['module']) || empty($r['code'])) {
101 $this->jerr("missing template / module or code column");
104 if (!isset($r['language'])) {
105 $this->jerr("missing language");
109 if($r['module'] == 'database') {
110 $arr = explode(':', $r['template']);
111 $r['table'] = $arr[0];
112 $r['column'] = $arr[1];
113 $this->updateTableTranslation($r);
115 // template translation
117 $this->updateTranslationRow($r);
123 function updateTranslationRow($r)
125 //print_R($r); DB_DataObject::DebugLevel(1);
126 $tr = DB_DataObject::Factory('core_templatestr');
130 $tr->whereAdd("join_template_id_id.template='{$tr->escape($r['template'])}'");
131 $tr->whereAdd("join_template_id_id.view_name='{$tr->escape($r['module'])}'");
132 $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
133 $tr->lang = $r['language'];
134 if ($tr->find(true)) {
135 $tt = DB_DataObject::Factory('core_templatestr');
138 $tt->txt = $r['translation'];
139 $tt->updated = date('Y-m-d H:i:s');
148 function updateTableTranslation($r)
150 // print_R($r); DB_DataObject::DebugLevel(1);
151 $tr = DB_DataObject::Factory('core_templatestr');
155 // update duplicate with same on_table, on_col, mdsum and lang
156 // $tr->whereAdd("core_templatestr.on_id='{$tr->escape($r['table id'])}'");
157 $tr->whereAdd("core_templatestr.on_table='{$tr->escape($r['table'])}'");
158 $tr->whereAdd("core_templatestr.on_col='{$tr->escape($r['column'])}'");
159 $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
160 $tr->lang = $r['language'];
162 $duplicate = $tr->fetchAll('id');
164 if(!empty($duplicate)) {
166 $t = DB_DataObject::factory('core_templatestr');
171 txt = '" . $r['translation'] . "',
172 updated = '" . date('Y-m-d H:i:s') . "'
174 id IN (" . implode(',', $duplicate) . ")"
183 function readXLS($file) {
185 require_once 'System.php';
186 $ssconvert = System::which('ssconvert');
187 if (!$ssconvert) die("ssconvert not installed");
188 $csv = $this->tempName('csv');
189 $cmd = "$ssconvert -T Gnumeric_stf:stf_csv ". escapeshellarg($file) . ' '.$csv;
194 if (!file_exists($csv)) {
195 $this->jerr("Failed to make file . \n".
203 $fh = fopen($csv, 'r');
205 $this->jerr("file invalid");
210 while (false !== ($row = fgetcsv($fh))) {
212 if ($head === false) {
215 // skip header lines.
217 if (!strlen(implode('', $h))) {
220 // how many empty rows..
221 if (count(explode(',',(rtrim(implode(',', $h), " ,")))) < 3) {
226 foreach($row as $i=>$c) {
227 $c = preg_replace('/[\t \n]+/', ' ', $c);
228 $head[$i] = strtolower(trim($c));
233 if (!strlen(trim(implode('', $h)))) {
243 foreach($row as $i=>$c) {
244 $c = preg_replace('/[\t \n]+/', ' ', $c);
245 $rrow[$head[$i]] = trim($c);