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");
103 if (isset($r['language'])) {
104 $this->updateTableTranslationRow($r);
107 $ff = HTML_FlexyFramework::get();
108 if (!isset($ff->Pman_Admin['languages'])) {
109 $this->jerr("invalid language configuration");
113 foreach($ff->Pman_Admin['languages'] as $lang) {
114 if (!isset($r[strtolower($lang)])) {
115 //echo "SKIP $lang\n";
119 $rr['language'] = $lang;
120 $rr['translation'] = $r[strtolower($lang)];
121 $this->updateTranslationRow($rr);
128 function updateTranslationRow($r)
130 //print_R($r); DB_DataObject::DebugLevel(1);
131 $tr = DB_DataObject::Factory('core_templatestr');
135 $tr->whereAdd("join_template_id_id.template='{$tr->escape($r['template'])}'");
136 $tr->whereAdd("join_template_id_id.view_name='{$tr->escape($r['module'])}'");
137 $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
138 $tr->lang = $r['language'];
139 if ($tr->find(true)) {
140 $tt = DB_DataObject::Factory('core_templatestr');
143 $tt->txt = $r['translation'];
144 $tt->updated = date('Y-m-d H:i:s');
153 function updateTableTranslation($r)
155 // print_R($r); DB_DataObject::DebugLevel(1);
156 $tr = DB_DataObject::Factory('core_templatestr');
160 $tr->whereAdd("core_templatestr.on_id='{$tr->escape($r['table id'])}'");
161 $tr->whereAdd("core_templatestr.on_table='{$tr->escape($r['table'])}'");
162 $tr->whereAdd("core_templatestr.on_col='{$tr->escape($r['column'])}'");
163 $tr->whereAdd("join_src_id_id.mdsum='{$tr->escape($r['code'])}'");
164 $tr->lang = $r['translation'];
165 if ($tr->find(true) && strlen(trim($r['txt']))) {
166 $tt = DB_DataObject::Factory('core_templatestr');
169 $tt->txt = $r['txt'];
170 $tt->updated = date('Y-m-d H:i:s');
179 function readXLS($file) {
181 require_once 'System.php';
182 $ssconvert = System::which('ssconvert');
183 if (!$ssconvert) die("ssconvert not installed");
184 $csv = $this->tempName('csv');
185 $cmd = "$ssconvert -T Gnumeric_stf:stf_csv ". escapeshellarg($file) . ' '.$csv;
190 if (!file_exists($csv)) {
191 $this->jerr("Failed to make file . \n".
199 $fh = fopen($csv, 'r');
201 $this->jerr("file invalid");
206 while (false !== ($row = fgetcsv($fh))) {
208 if ($head === false) {
211 // skip header lines.
213 if (!strlen(implode('', $h))) {
216 // how many empty rows..
217 if (count(explode(',',(rtrim(implode(',', $h), " ,")))) < 3) {
222 foreach($row as $i=>$c) {
223 $c = preg_replace('/[\t \n]+/', ' ', $c);
224 $head[$i] = strtolower(trim($c));
229 if (!strlen(trim(implode('', $h)))) {
239 foreach($row as $i=>$c) {
240 $c = preg_replace('/[\t \n]+/', ' ', $c);
241 $rrow[$head[$i]] = trim($c);