Index: trunk/core/kernel/db/db_tag_processor.php =================================================================== diff -u -N -r1636 -r1641 --- trunk/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 1636) +++ trunk/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 1641) @@ -1054,7 +1054,7 @@ } $cut_first = getArrayValue($params,'cut_first'); - if( $cut_first && strlen($title) > $cut_first ) $title = substr($title, 0, $cut_first).' ...'; + if( $cut_first && strlen($title) > $cut_first && !preg_match('/(.*)<\/a>/',$title) ) $title = substr($title, 0, $cut_first).' ...'; return $title; } Index: trunk/core/units/languages/import_xml.php =================================================================== diff -u -N -r1636 -r1641 --- trunk/core/units/languages/import_xml.php (.../import_xml.php) (revision 1636) +++ trunk/core/units/languages/import_xml.php (.../import_xml.php) (revision 1641) @@ -151,7 +151,7 @@ $sql = sprintf( $sql, $this->lang_object->IDField, kTempTablesHandler::GetLiveName($this->lang_object->TableName), - $this->Conn->qstr($this->current_event['PackName']) ); + $this->Conn->qstr($this->current_language['PackName']) ); $language_id = $this->Conn->GetOne($sql); if($language_id) $this->current_language['LanguageId'] = $language_id; break; Index: trunk/kernel/units/languages/import_xml.php =================================================================== diff -u -N -r1636 -r1641 --- trunk/kernel/units/languages/import_xml.php (.../import_xml.php) (revision 1636) +++ trunk/kernel/units/languages/import_xml.php (.../import_xml.php) (revision 1641) @@ -151,7 +151,7 @@ $sql = sprintf( $sql, $this->lang_object->IDField, kTempTablesHandler::GetLiveName($this->lang_object->TableName), - $this->Conn->qstr($this->current_event['PackName']) ); + $this->Conn->qstr($this->current_language['PackName']) ); $language_id = $this->Conn->GetOne($sql); if($language_id) $this->current_language['LanguageId'] = $language_id; break; Index: trunk/kernel/units/languages/languages_event_handler.php =================================================================== diff -u -N -r1636 -r1641 --- trunk/kernel/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 1636) +++ trunk/kernel/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 1641) @@ -150,11 +150,23 @@ { list($id,$field_values) = each($items_info); - $lang_xml =& $this->Application->recallObject('LangXML'); - $lang_xml->Parse($field_values['LangFile']['tmp_name'], $field_values['PhraseType'], $field_values['Module']); + $filename = getArrayValue($field_values, 'LangFile', 'tmp_name'); + if( filesize($filename) ) + { + $modules = getArrayValue($field_values,'Module'); + $lang_xml =& $this->Application->recallObject('LangXML'); + $lang_xml->Parse($filename, $field_values['PhraseType'], $modules); + + $event->redirect = 'dummy'; + $event->SetRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'mode'=>$field_values['ImportOverwrite']) ); + } + else + { + $object =& $this->Application->recallObject('phrases.import'); + $object->SetError('LangFile', 'la_empty_file', 'la_EmptyFile'); + $event->redirect = false; + } } - $event->redirect = 'dummy'; - $event->SetRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'mode'=>$field_values['ImportOverwrite']) ); } /** @@ -170,6 +182,9 @@ $import_mode = (int)$this->Application->GetVar('mode'); // 1 - overwrite existing phrases, 0 - don't overwrite existing phrases $import_source = (int)$this->Application->GetVar('source'); $import_steps = Array(0 => 'lang', 1 => 'phrases', 2 => 'emailmessages', 3 => 'finish'); + + $key_fields = Array(0 => 'PackName', 1 => 'Phrase', 2 => 'EventId'); // by what field should we search record match + $import_titles = Array(0 => 'la_ImportingLanguages', 1 => 'la_ImportingPhrases', 2 => 'la_ImportingEmailEvents', 3 => 'la_Done'); // --- BEFORE --- @@ -211,36 +226,56 @@ echo $this->Application->ParseBlock($block_params); flush(); - $fields = array_keys( $this->Application->getUnitOption($import_prefix,'Fields') ); - $sql = 'SELECT * FROM %s LIMIT %s,%s'; $rows = $this->Conn->Query( sprintf($sql,$src_table,$import_start,IMPORT_BY) ); + $values_sql = ''; + // if found and mode = 1 (overwrite) - //$search_sql = 'SELECT '.$id_field.' FROM '.$dst_table.' WHERE '; + $search_sql = 'SELECT '.$id_field.' FROM '.$dst_table.' WHERE '.$key_fields[$import_source].' = %s AND LanguageId = %s'; + $update_sql = 'UPDATE '.$dst_table.' SET %s WHERE '.$id_field.' = %s'; - $fields_sql = ''; - foreach($fields as $field_name) + foreach($rows as $row) { - $fields_sql .= '`'.$field_name.'`,'; + $tmp_sql = sprintf($search_sql, $this->Conn->qstr($row[ $key_fields[$import_source] ]), $row['LanguageId'] ); + $tmp_id = $this->Conn->GetOne($tmp_sql); + if($tmp_id > 0 && $import_mode == 1) + { + // update + $update_fields = ''; + foreach($row as $field_name => $field_value) + { + if($field_name == $id_field) continue; + $update_fields .= '`'.$field_name.'` = '.$this->Conn->qstr($field_value).','; + } + $update_fields = preg_replace('/(.*),$/', '\\1', $update_fields); + $this->Conn->Query( sprintf($update_sql, $update_fields, $tmp_id) ); + } + elseif(!$tmp_id) + { + $values_sql .= '('; + foreach($row as $field_value) + { + $values_sql .= $this->Conn->qstr($field_value).','; + } + $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql).'),'; + } } - $fields_sql = preg_replace('/(.*),$/', '\\1', $fields_sql); - $values_sql = ''; - foreach($rows as $row) + if($values_sql) { - $values_sql .= '('; - foreach($row as $field_value) + $fields_sql = ''; + $fields = array_keys( $this->Application->getUnitOption($import_prefix,'Fields') ); + foreach($fields as $field_name) { - $values_sql .= $this->Conn->qstr($field_value).','; + $fields_sql .= '`'.$field_name.'`,'; } - $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql).'),'; + $fields_sql = preg_replace('/(.*),$/', '\\1', $fields_sql); + + $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql); + $sql = sprintf('INSERT INTO %s (%s) VALUES %s', $dst_table, $fields_sql, $values_sql); + $this->Conn->Query($sql); } - $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql); - - $sql = sprintf('INSERT INTO %s (%s) VALUES %s', $dst_table, $fields_sql, $values_sql); - $this->Conn->Query($sql); - $event->setRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'start' => $import_start += count($rows), 'total' => $import_total, 'source' => $import_source, 'mode' => $import_mode) ); } Index: trunk/core/units/languages/languages_event_handler.php =================================================================== diff -u -N -r1636 -r1641 --- trunk/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 1636) +++ trunk/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 1641) @@ -150,11 +150,23 @@ { list($id,$field_values) = each($items_info); - $lang_xml =& $this->Application->recallObject('LangXML'); - $lang_xml->Parse($field_values['LangFile']['tmp_name'], $field_values['PhraseType'], $field_values['Module']); + $filename = getArrayValue($field_values, 'LangFile', 'tmp_name'); + if( filesize($filename) ) + { + $modules = getArrayValue($field_values,'Module'); + $lang_xml =& $this->Application->recallObject('LangXML'); + $lang_xml->Parse($filename, $field_values['PhraseType'], $modules); + + $event->redirect = 'dummy'; + $event->SetRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'mode'=>$field_values['ImportOverwrite']) ); + } + else + { + $object =& $this->Application->recallObject('phrases.import'); + $object->SetError('LangFile', 'la_empty_file', 'la_EmptyFile'); + $event->redirect = false; + } } - $event->redirect = 'dummy'; - $event->SetRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'mode'=>$field_values['ImportOverwrite']) ); } /** @@ -170,6 +182,9 @@ $import_mode = (int)$this->Application->GetVar('mode'); // 1 - overwrite existing phrases, 0 - don't overwrite existing phrases $import_source = (int)$this->Application->GetVar('source'); $import_steps = Array(0 => 'lang', 1 => 'phrases', 2 => 'emailmessages', 3 => 'finish'); + + $key_fields = Array(0 => 'PackName', 1 => 'Phrase', 2 => 'EventId'); // by what field should we search record match + $import_titles = Array(0 => 'la_ImportingLanguages', 1 => 'la_ImportingPhrases', 2 => 'la_ImportingEmailEvents', 3 => 'la_Done'); // --- BEFORE --- @@ -211,36 +226,56 @@ echo $this->Application->ParseBlock($block_params); flush(); - $fields = array_keys( $this->Application->getUnitOption($import_prefix,'Fields') ); - $sql = 'SELECT * FROM %s LIMIT %s,%s'; $rows = $this->Conn->Query( sprintf($sql,$src_table,$import_start,IMPORT_BY) ); + $values_sql = ''; + // if found and mode = 1 (overwrite) - //$search_sql = 'SELECT '.$id_field.' FROM '.$dst_table.' WHERE '; + $search_sql = 'SELECT '.$id_field.' FROM '.$dst_table.' WHERE '.$key_fields[$import_source].' = %s AND LanguageId = %s'; + $update_sql = 'UPDATE '.$dst_table.' SET %s WHERE '.$id_field.' = %s'; - $fields_sql = ''; - foreach($fields as $field_name) + foreach($rows as $row) { - $fields_sql .= '`'.$field_name.'`,'; + $tmp_sql = sprintf($search_sql, $this->Conn->qstr($row[ $key_fields[$import_source] ]), $row['LanguageId'] ); + $tmp_id = $this->Conn->GetOne($tmp_sql); + if($tmp_id > 0 && $import_mode == 1) + { + // update + $update_fields = ''; + foreach($row as $field_name => $field_value) + { + if($field_name == $id_field) continue; + $update_fields .= '`'.$field_name.'` = '.$this->Conn->qstr($field_value).','; + } + $update_fields = preg_replace('/(.*),$/', '\\1', $update_fields); + $this->Conn->Query( sprintf($update_sql, $update_fields, $tmp_id) ); + } + elseif(!$tmp_id) + { + $values_sql .= '('; + foreach($row as $field_value) + { + $values_sql .= $this->Conn->qstr($field_value).','; + } + $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql).'),'; + } } - $fields_sql = preg_replace('/(.*),$/', '\\1', $fields_sql); - $values_sql = ''; - foreach($rows as $row) + if($values_sql) { - $values_sql .= '('; - foreach($row as $field_value) + $fields_sql = ''; + $fields = array_keys( $this->Application->getUnitOption($import_prefix,'Fields') ); + foreach($fields as $field_name) { - $values_sql .= $this->Conn->qstr($field_value).','; + $fields_sql .= '`'.$field_name.'`,'; } - $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql).'),'; + $fields_sql = preg_replace('/(.*),$/', '\\1', $fields_sql); + + $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql); + $sql = sprintf('INSERT INTO %s (%s) VALUES %s', $dst_table, $fields_sql, $values_sql); + $this->Conn->Query($sql); } - $values_sql = preg_replace('/(.*),$/', '\\1', $values_sql); - - $sql = sprintf('INSERT INTO %s (%s) VALUES %s', $dst_table, $fields_sql, $values_sql); - $this->Conn->Query($sql); - $event->setRedirectParams( Array('lang_event' => 'OnImportProgress', 'pass' => 'all,lang', 'start' => $import_start += count($rows), 'total' => $import_total, 'source' => $import_source, 'mode' => $import_mode) ); }