Index: branches/5.2.x/core/units/languages/languages_event_handler.php =================================================================== diff -u -N -r14628 -r14629 --- branches/5.2.x/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 14628) +++ branches/5.2.x/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 14629) @@ -1,6 +1,6 @@ Application->recallObject('kMultiLanguageHelper'); /* @var $ml_helper kMultiLanguageHelper */ - + $ml_helper->createFields('phrases'); $ml_helper->createFields('emailevents'); @@ -365,6 +365,7 @@ $primary_lang_id = $this->Conn->GetOne($sql); $object->SetDBField('CopyFromLanguage', $primary_lang_id); + $object->SetDBField('SynchronizationModes', Language::SYNCHRONIZE_DEFAULT); } /** @@ -617,31 +618,46 @@ * Copy missing phrases across all system languages (starting from primary) * * @param kEvent $event + * @return void + * @access protected */ - function OnSynchronizeLanguages(&$event) + protected function OnSynchronizeLanguages(&$event) { - if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { + if ( $this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1) ) { $event->status = kEvent::erFAIL; return; } + $source_languages = $target_languages = Array (); + // get language list with primary language first - $sql = 'SELECT LanguageId + $sql = 'SELECT SynchronizationModes, LanguageId FROM ' . TABLE_PREFIX . 'Language + WHERE SynchronizationModes <> "" ORDER BY PrimaryLang DESC'; + $languages = $this->Conn->GetCol($sql, 'LanguageId'); - $source_langs = $this->Conn->GetCol($sql); - $target_langs = $source_langs; + foreach ($languages as $language_id => $synchronization_modes) { + $synchronization_modes = explode('|', substr($synchronization_modes, 1, -1)); - foreach ($source_langs as $source_id) { - foreach ($target_langs as $target_id) { - if ($source_id == $target_id) { + if ( in_array(Language::SYNCHRONIZE_TO_OTHERS, $synchronization_modes) ) { + $source_languages[] = $language_id; + } + + if ( in_array(Language::SYNCHRONIZE_FROM_OTHERS, $synchronization_modes) ) { + $target_languages[] = $language_id; + } + } + + foreach ($source_languages as $source_id) { + foreach ($target_languages as $target_id) { + if ( $source_id == $target_id ) { continue; } $sql = 'UPDATE ' . TABLE_PREFIX . 'Phrase SET l' . $target_id . '_Translation = l' . $source_id . '_Translation - WHERE (l' . $target_id . '_Translation IS NULL) OR (l' . $target_id . '_Translation = "")'; + WHERE COALESCE(l' . $target_id . '_Translation, "") = "" AND COALESCE(l' . $source_id . '_Translation, "") <> ""'; $this->Conn->Query($sql); } }