Index: branches/5.1.x/core/units/languages/languages_event_handler.php =================================================================== diff -u -N -r12657 -r13086 --- branches/5.1.x/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 12657) +++ branches/5.1.x/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 13086) @@ -1,6 +1,6 @@ Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + $event->status = erFAIL; return; } @@ -236,23 +237,43 @@ $object->SetDBField('CopyFromLanguage', $primary_lang_id); } - function OnChangeLanguage(&$event) { - $this->Application->SetVar('m_lang', $this->Application->GetVar('language')); + $language_id = $this->Application->GetVar('language'); - if ($this->Application->IsAdmin()) { + if ($this->Application->isAdmin) { + // admin data only + $this->Application->SetVar('m_lang', $language_id); + + // set new language for this session (admin interface only) + $this->Application->Session->SetField('Language', $language_id); + + // remember last user language in administrative console + if ($this->Application->RecallVar('user_id') == -1) { + $this->Application->StorePersistentVar('AdminLanguage', $language_id); + } + else { + $object =& $this->Application->recallObject('u.current'); + /* @var $object kDBItem */ + + $object->SetDBField('AdminLanguage', $language_id); + $object->Update(); + } + // without this language change in admin will cause erase of last remembered tree section $this->Application->SetVar('skip_last_template', 1); } - elseif (MOD_REWRITE) { - $mod_rewrite_helper =& $this->Application->recallObject('ModRewriteHelper'); - /* @var $mod_rewrite_helper kModRewriteHelper */ + else { + // changing language on Front-End + $this->Application->SetVar('m_lang', $language_id); - $mod_rewrite_helper->removePages(); - } + if (MOD_REWRITE) { + $mod_rewrite_helper =& $this->Application->recallObject('ModRewriteHelper'); + /* @var $mod_rewrite_helper kModRewriteHelper */ - //$this->Application->LinkVar('language', 'm_lang'); + $mod_rewrite_helper->removePages(); + } + } } /** @@ -263,30 +284,46 @@ function OnImportLanguage(&$event) { if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + $event->status = erFAIL; return; } $items_info = $this->Application->GetVar('phrases_import'); if ($items_info) { list ($id, $field_values) = each($items_info); - $object =& $this->Application->recallObject('phrases.import', 'phrases', Array('skip_autoload' => true) ); - $object->SetFieldsFromHash($field_values); - $filename = getArrayValue($field_values, 'LangFile', 'tmp_name'); - if ( filesize($filename) ) { - $language_import_helper =& $this->Application->recallObject('LanguageImportHelper'); - /* @var $language_import_helper LanguageImportHelper */ + $object =& $this->Application->recallObject('phrases.import', 'phrases', Array('skip_autoload' => true)); + /* @var $object kDBItem */ - $modules = getArrayValue($field_values, 'Module'); - $language_import_helper->performImport($filename, $field_values['PhraseType'], $modules, $field_values['ImportOverwrite'] ? LANG_OVERWRITE_EXISTING : LANG_SKIP_EXISTING); + $object->setID($id); + $object->SetFieldsFromHash($field_values); - $event->SetRedirectParam('opener', 'u'); + if (!$object->Validate()) { + $event->status = erFAIL; + return ; } - else { - $object =& $this->Application->recallObject('phrases.import'); + + $filename = $object->GetField('LangFile', 'full_path'); + + if (!filesize($filename)) { $object->SetError('LangFile', 'la_empty_file', 'la_EmptyFile'); $event->status = erFAIL; } + + $language_import_helper =& $this->Application->recallObject('LanguageImportHelper'); + /* @var $language_import_helper LanguageImportHelper */ + + $language_import_helper->performImport( + $filename, + $object->GetDBField('PhraseType'), + $object->GetDBField('Module'), + $object->GetDBField('ImportOverwrite') ? LANG_OVERWRITE_EXISTING : LANG_SKIP_EXISTING + ); + + // delete uploaded language pack after import is finished + unlink($filename); + + $event->SetRedirectParam('opener', 'u'); } } @@ -298,6 +335,7 @@ function OnExportLanguage(&$event) { if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + $event->status = erFAIL; return; } @@ -393,6 +431,11 @@ */ function OnSynchronizeLanguages(&$event) { + if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + $event->status = erFAIL; + return; + } + // get language list with primary language first $sql = 'SELECT LanguageId FROM ' . TABLE_PREFIX . 'Language