Index: branches/5.3.x/core/install/install_toolkit.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/install/install_toolkit.php (.../install_toolkit.php) (revision 15483)
+++ branches/5.3.x/core/install/install_toolkit.php (.../install_toolkit.php) (revision 15584)
@@ -1,6 +1,6 @@
Application->recallObject('LanguageImportHelper');
/* @var $language_import_helper LanguageImportHelper */
- $language_import_helper->performImport($lang_file, '|0|1|2|', '', $upgrade ? LANG_SKIP_EXISTING : LANG_OVERWRITE_EXISTING);
+ if ( !$upgrade ) {
+ $language_import_helper->setOption(LanguageImportHelper::OVERWRITE_EXISTING);
+ }
+
+ $language_import_helper->performImport($lang_file, '|0|1|2|', '');
}
/**
Index: branches/5.3.x/core/units/helpers/multilanguage_helper.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/units/helpers/multilanguage_helper.php (.../multilanguage_helper.php) (revision 15483)
+++ branches/5.3.x/core/units/helpers/multilanguage_helper.php (.../multilanguage_helper.php) (revision 15584)
@@ -1,6 +1,6 @@
getEditingLanguage();
+
+ $calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields', Array ());
+ /* @var $calculated_fields Array */
+
+ foreach ($calculated_fields as $special => $fields) {
+ foreach ($fields as $field_name => $field_expression) {
+ $calculated_fields[$special][$field_name] = str_replace('%5$s', $editing_language, $field_expression);
+ }
+ }
+
+ $this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields);
+ }
+
+ /**
+ * Returns language, that is being edited or current language
+ *
+ * @return int
+ * @access public
+ */
+ public function getEditingLanguage()
+ {
+ $language_id = $this->Application->GetVar('lang_id');
+
+ if ( !$language_id ) {
+ $language_id = $this->Application->GetVar('m_lang');
+ }
+
+ return $language_id;
+ }
+
+ /**
+ * Determines if we're editing phrase/e-mail event on it's source language
+ *
+ * @param int $source_language
+ * @return bool
+ * @access public
+ */
+ public function editingInSourceLanguage($source_language)
+ {
+ return $this->getSourceLanguage($source_language) == $this->getEditingLanguage();
+ }
+
+ /**
+ * Replaces source language in given label translation
+ *
+ * @param kDBItem $object
+ * @param string $label
+ * @return string
+ * @access public
+ */
+ public function replaceSourceLanguage(kDBItem $object, $label)
+ {
+ $ret = $this->Application->Phrase($label);
+ $options = $object->GetFieldOption('TranslateFromLanguage', 'options');
+ $source_language = $this->getSourceLanguage($object->GetDBField('TranslateFromLanguage'));
+
+ return sprintf($ret, $options[$source_language]);
+ }
+
+ /**
+ * Ensures, that primary language is used, when no translation is needed
+ *
+ * @param int $source_language
+ * @return bool
+ * @access public
+ */
+ public function getSourceLanguage($source_language)
+ {
+ if ( !$source_language ) {
+ $source_language = $this->Application->GetDefaultLanguageId();
+ }
+
+ return $source_language;
+ }
+
+ /**
+ * Translation synchronization state management
+ *
+ * @param kEvent $event
+ * @return void
+ * @access public
+ * @throws InvalidArgumentException
+ */
+ public function updateTranslationState(kEvent $event)
+ {
+ if ( $event->Name != 'OnBeforeCopyToLive' ) {
+ throw new InvalidArgumentException('Unsupported "' . (string)$event . '" event');
+ }
+
+ $object = $event->getObject(Array ('skip_autoload' => true));
+ /* @var $object kDBItem */
+
+ $object->SwitchToTemp();
+ $object->Load($event->getEventParam('id'));
+
+ $save_mode = $this->Application->GetVar('translation_save_mode');
+
+ if ( $save_mode === false ) {
+ return;
+ }
+
+ $editing_language = $this->getEditingLanguage();
+
+ if ( $save_mode == TranslationSaveMode::SYNC_WITH_PRIMARY ) {
+ $object->SetDBField('l' . $editing_language . '_TranslateFrom', 0);
+ }
+ else {
+ $languages = $this->getLanguages();
+
+ foreach ($languages as $language_id) {
+ $object->SetDBField('l' . $language_id . '_TranslateFrom', $language_id == $editing_language ? 0 : $editing_language);
+ }
+ }
+
+ if ( $object->GetChangedFields() ) {
+ $object->Update();
+ }
+ }
}
Index: branches/5.3.x/core/admin_templates/regional/languages_import.tpl
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/admin_templates/regional/languages_import.tpl (.../languages_import.tpl) (revision 15483)
+++ branches/5.3.x/core/admin_templates/regional/languages_import.tpl (.../languages_import.tpl) (revision 15584)
@@ -36,7 +36,8 @@
-
+
+
Index: branches/5.3.x/core/install/upgrades.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/install/upgrades.php (.../upgrades.php) (revision 15483)
+++ branches/5.3.x/core/install/upgrades.php (.../upgrades.php) (revision 15584)
@@ -1,6 +1,6 @@
Conn->Query('ALTER TABLE ' . $table_name . ' DROP RunInterval');
}
+
+ /**
+ * Update to 5.3.0-B1
+ *
+ * @param string $mode when called mode {before, after)
+ */
+ public function Upgrade_5_3_0_B1($mode)
+ {
+ if ( $mode != 'before' ) {
+ return;
+ }
+
+ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ // add new ml columns to phrases/e-mail events
+ $ml_helper->createFields('phrases');
+ $ml_helper->createFields('emailevents');
+ }
}
\ No newline at end of file
Index: branches/5.3.x/core/units/phrases/phrases_event_handler.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/units/phrases/phrases_event_handler.php (.../phrases_event_handler.php) (revision 15483)
+++ branches/5.3.x/core/units/phrases/phrases_event_handler.php (.../phrases_event_handler.php) (revision 15584)
@@ -1,6 +1,6 @@
getTranslationFields();
$changed_fields = array_keys( $object->GetChangedFields() );
- $translation_fields = Array ('Translation', 'HintTranslation', 'ColumnTranslation');
foreach ($changed_fields as $changed_field) {
$changed_field = preg_replace('/^l[\d]+_/', '', $changed_field);
@@ -396,6 +396,42 @@
}
/**
+ * Returns fields, that can be translated
+ *
+ * @return Array
+ * @access protected
+ */
+ protected function getTranslationFields()
+ {
+ return Array ('Translation', 'HintTranslation', 'ColumnTranslation');
+ }
+
+ /**
+ * Put correct translation to source language fields
+ *
+ * @param kEvent $event
+ * @return void
+ * @access protected
+ */
+ protected function OnAfterItemLoad(kEvent $event)
+ {
+ parent::OnAfterItemLoad($event);
+
+ $object = $event->getObject();
+ /* @var $object kDBItem */
+
+ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ $translation_fields = $this->getTranslationFields();
+ $source_language = $ml_helper->getSourceLanguage($object->GetDBField('TranslateFromLanguage'));
+
+ foreach ($translation_fields as $translation_field) {
+ $object->SetDBField('Source' . $translation_field, $object->GetDBField('l' . $source_language . '_' . $translation_field));
+ }
+ }
+
+ /**
* Changes default module to custom (when available)
*
* @param kEvent $event
@@ -406,32 +442,18 @@
{
parent::OnAfterConfigRead($event);
- if ($this->Application->findModule('Name', 'Custom')) {
+ if ( $this->Application->findModule('Name', 'Custom') ) {
$fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
$fields['Module']['default'] = 'Custom';
$this->Application->setUnitOption($event->Prefix, 'Fields', $fields);
}
- // make sure, that PrimaryTranslation column always refrers to primary language column
- $language_id = $this->Application->GetVar('lang_id');
+ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
- if (!$language_id) {
- $language_id = $this->Application->GetVar('m_lang');
- }
+ $ml_helper->replaceMLCalculatedFields($event);
- $primary_language_id = $this->Application->GetDefaultLanguageId();
- $calculated_fields = $this->Application->getUnitOption($event->Prefix, 'CalculatedFields');
-
- foreach ($calculated_fields[''] as $field_name => $field_expression) {
- $field_expression = str_replace('%5$s', $language_id, $field_expression);
- $field_expression = str_replace('%4$s', $primary_language_id, $field_expression);
-
- $calculated_fields[''][$field_name] = $field_expression;
- }
-
- $this->Application->setUnitOption($event->Prefix, 'CalculatedFields', $calculated_fields);
-
- if ($this->Application->GetVar('regional')) {
+ if ( $this->Application->GetVar('regional') ) {
$this->Application->setUnitOption($event->Prefix, 'PopulateMlFields', true);
}
}
@@ -517,4 +539,21 @@
)
);
}
+
+ /**
+ * Updates translation state for all saved phrases
+ *
+ * @param kEvent $event
+ * @return void
+ * @access protected
+ */
+ protected function OnBeforeCopyToLive(kEvent $event)
+ {
+ parent::OnBeforeCopyToLive($event);
+
+ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ $ml_helper->updateTranslationState($event);
+ }
}
\ No newline at end of file
Index: branches/5.3.x/core/units/helpers/language_import_helper.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/units/helpers/language_import_helper.php (.../language_import_helper.php) (revision 15483)
+++ branches/5.3.x/core/units/helpers/language_import_helper.php (.../language_import_helper.php) (revision 15584)
@@ -1,6 +1,6 @@
_importOptions & $option_bit) == $option_bit;
+ }
+
+ /**
+ * Sets import option
+ *
+ * @param int $option_bit
+ * @param bool $enabled
+ * @return void
+ * @access public
+ */
+ public function setOption($option_bit, $enabled = true)
+ {
+ if ( $enabled ) {
+ $this->_importOptions |= $option_bit;
+ }
+ else {
+ $this->_importOptions = $this->_importOptions & ~$option_bit;
+ }
+ }
+
+ /**
* Performs import of given language pack (former Parse method)
*
* @param string $filename
* @param string $phrase_types
* @param Array $module_ids
- * @param int $import_mode
* @return bool
*/
- function performImport($filename, $phrase_types, $module_ids, $import_mode = LANG_SKIP_EXISTING)
+ function performImport($filename, $phrase_types, $module_ids)
{
// define the XML parsing routines/functions to call based on the handler path
if (!file_exists($filename) || !$phrase_types /*|| !$module_ids*/) {
@@ -184,14 +220,13 @@
// $module_ids = explode('|', substr($module_ids, 1, -1) );
$this->phrase_types_allowed = array_flip($phrase_types);
- $this->import_mode = $import_mode;
$this->_parseXML($filename);
// copy data from temp tables to live
foreach ($this->_languages as $language_id) {
- $this->_performUpgrade($language_id, 'phrases', 'PhraseKey', Array ('l%s_Translation', 'l%s_HintTranslation', 'l%s_ColumnTranslation', 'PhraseType'));
- $this->_performUpgrade($language_id, 'emailevents', 'EventId', Array ('l%s_Subject', 'Headers', 'l%s_HtmlBody', 'l%s_PlainTextBody'));
+ $this->_performUpgrade($language_id, 'phrases', 'PhraseKey', Array ('l%s_Translation', 'l%s_HintTranslation', 'l%s_ColumnTranslation', 'l%s_TranslateFrom', 'PhraseType'));
+ $this->_performUpgrade($language_id, 'emailevents', 'EventId', Array ('l%s_Subject', 'Headers', 'l%s_HtmlBody', 'l%s_PlainTextBody', 'l%s_TranslateFrom'));
$this->_performUpgrade($language_id, 'country-state', 'CountryStateId', Array ('l%s_Name'));
}
@@ -535,15 +570,15 @@
$live_records = $this->_getTableData($language_id, $prefix, $unique_field, $data_fields[0], false);
$temp_records = $this->_getTableData($language_id, $prefix, $unique_field, $data_fields[0], true);
- if (!$temp_records) {
+ if ( !$temp_records ) {
// no data for given language
- return ;
+ return;
}
// perform insert for records, that are missing in live table
$to_insert = array_diff($temp_records, $live_records);
- if ($to_insert) {
+ if ( $to_insert ) {
$to_insert = $this->Conn->qstrArray($to_insert);
$sql = 'INSERT INTO ' . $this->Application->getUnitOption($prefix, 'TableName') . '
@@ -559,7 +594,7 @@
// perform update for records, that are present in live table
$to_update = array_diff($temp_records, $to_insert);
- if ($to_update) {
+ if ( $to_update ) {
$to_update = $this->Conn->qstrArray($to_update);
$sql = 'UPDATE ' . $this->Application->getUnitOption($prefix, 'TableName') . ' live
@@ -582,19 +617,19 @@
$unique_field . ' IN (' . implode(',', $to_update) . ')',
);
- if ($this->import_mode == LANG_SKIP_EXISTING) {
+ if ( !$this->hasOption(self::OVERWRITE_EXISTING) ) {
// empty OR not set
$data_field = sprintf($data_fields[0], $language_id);
$where_clause[] = '(' . $data_field . ' = "") OR (' . $data_field . ' IS NULL)';
}
- if ($where_clause) {
+ if ( $where_clause ) {
$sql .= "\n" . 'WHERE (' . implode(') AND (', $where_clause) . ')';
}
$this->Conn->Query($sql);
- if ($this->Conn->getAffectedRows() > 0) {
+ if ( $this->Conn->getAffectedRows() > 0 ) {
// existing records were updated
$this->changedPrefixes[] = $prefix;
}
@@ -914,6 +949,9 @@
{
static $other_translations = Array ();
+ $primary_language = $this->Application->GetDefaultLanguageId();
+ $translate_from = $this->hasOption(self::SYNC_ADDED) || $primary_language == $language_id ? 0 : $primary_language;
+
if ( $this->Application->isDebugMode() ) {
$this->Application->Debugger->profileStart('L[' . $language_id . ']P', 'Language: ' . $language_id . '; Phrases Import');
}
@@ -951,12 +989,14 @@
$other_translations[$phrase_key]['l' . $other_language_id . '_Translation'] = '';
$other_translations[$phrase_key]['l' . $other_language_id . '_HintTranslation'] = '';
$other_translations[$phrase_key]['l' . $other_language_id . '_ColumnTranslation'] = '';
+ $other_translations[$phrase_key]['l' . $other_language_id . '_TranslateFrom'] = 0;
}
}
$other_translations[$phrase_key]['l' . $language_id . '_Translation'] = $translation;
$other_translations[$phrase_key]['l' . $language_id . '_HintTranslation'] = $hint_translation;
$other_translations[$phrase_key]['l' . $language_id . '_ColumnTranslation'] = $column_translation;
+ $other_translations[$phrase_key]['l' . $language_id . '_TranslateFrom'] = $translate_from;
$fields_hash = array_merge($fields_hash, $other_translations[$phrase_key]);
$this->Conn->doInsert($fields_hash, $this->_tables['phrases'], 'REPLACE', false);
@@ -981,6 +1021,9 @@
{
static $other_translations = Array ();
+ $primary_language = $this->Application->GetDefaultLanguageId();
+ $translate_from = $this->hasOption(self::SYNC_ADDED) || $primary_language == $language_id ? 0 : $primary_language;
+
if ( $this->Application->isDebugMode() ) {
$this->Application->Debugger->profileStart('L[' . $language_id . ']E', 'Language: ' . $language_id . '; Events Import');
}
@@ -1022,12 +1065,14 @@
$other_translations[$event_id]['l' . $other_language_id . '_Subject'] = '';
$other_translations[$event_id]['l' . $other_language_id . '_HtmlBody'] = '';
$other_translations[$event_id]['l' . $other_language_id . '_PlainTextBody'] = '';
+ $other_translations[$event_id]['l' . $other_language_id . '_TranslateFrom'] = 0;
}
}
$other_translations[$event_id]['l' . $language_id . '_Subject'] = $parsed['Subject'];
$other_translations[$event_id]['l' . $language_id . '_HtmlBody'] = $parsed['HtmlBody'];
$other_translations[$event_id]['l' . $language_id . '_PlainTextBody'] = $parsed['PlainTextBody'];
+ $other_translations[$event_id]['l' . $language_id . '_TranslateFrom'] = $translate_from;
if ( $parsed['Headers'] ) {
$other_translations[$event_id]['Headers'] = $parsed['Headers'];
@@ -1124,11 +1169,11 @@
WHERE PackName = ' . $this->Conn->qstr($fields_hash['PackName']);
$language_id = $this->Conn->GetOne($sql);
- if ($language_id) {
+ if ( $language_id ) {
// 2. language found -> update, when allowed
$this->lang_object->Load($language_id);
- if ($this->import_mode == LANG_OVERWRITE_EXISTING) {
+ if ( $this->hasOption(self::OVERWRITE_EXISTING) ) {
// update live language record based on data from xml
$this->lang_object->SetFieldsFromHash($fields_hash);
$this->lang_object->Update();
@@ -1139,18 +1184,18 @@
$this->lang_object->SetFieldsFromHash($fields_hash);
$this->lang_object->SetDBField('Enabled', STATUS_ACTIVE);
- if ($this->lang_object->Create()) {
+ if ( $this->lang_object->Create() ) {
$language_id = $this->lang_object->GetID();
- if (defined('IS_INSTALL') && IS_INSTALL) {
+ if ( defined('IS_INSTALL') && IS_INSTALL ) {
// language created during install becomes admin interface language
$this->lang_object->setPrimary(true, true);
}
}
}
// 4. collect ID of every processed language
- if (!in_array($language_id, $this->_languages)) {
+ if ( !in_array($language_id, $this->_languages) ) {
$this->_languages[kUtil::crc32($fields_hash['PackName'])] = $language_id;
}
Index: branches/5.3.x/core/units/languages/languages_event_handler.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 15483)
+++ branches/5.3.x/core/units/languages/languages_event_handler.php (.../languages_event_handler.php) (revision 15584)
@@ -1,6 +1,6 @@
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
- );
+ if ( $object->GetDBField('ImportOverwrite') ) {
+ $language_import_helper->setOption(LanguageImportHelper::OVERWRITE_EXISTING);
+ }
+ if ( $object->GetDBField('ImportSynced') ) {
+ $language_import_helper->setOption(LanguageImportHelper::SYNC_ADDED);
+ }
+
+ $language_import_helper->performImport($filename, $object->GetDBField('PhraseType'), $object->GetDBField('Module'));
+
// delete uploaded language pack after import is finished
unlink($filename);
Index: branches/5.3.x/core/units/phrases/phrase_tp.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/units/phrases/phrase_tp.php (.../phrase_tp.php) (revision 15483)
+++ branches/5.3.x/core/units/phrases/phrase_tp.php (.../phrase_tp.php) (revision 15584)
@@ -1,6 +1,6 @@
IsNewItem($params) ) {
+ return false;
+ }
+
+ $object = $this->getObject($params);
+ /* @var $object kDBItem */
+
+ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ return !$ml_helper->editingInSourceLanguage($object->GetDBField('TranslateFromLanguage'));
+ }
+
+ /**
+ * Shows field label with %s replaced with source translation language
+ *
+ * @param Array $params
+ * @return string
+ * @access protected
+ */
+ protected function SourceLanguageTitle($params)
+ {
+ $object = $this->getObject($params);
+ /* @var $object kDBItem */
+
+ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
+ /* @var $ml_helper kMultiLanguageHelper */
+
+ return $ml_helper->replaceSourceLanguage($object, $params['label']);
+ }
}
\ No newline at end of file
Index: branches/5.3.x/core/install/install_schema.sql
===================================================================
diff -u -r15578 -r15584
--- branches/5.3.x/core/install/install_schema.sql (.../install_schema.sql) (revision 15578)
+++ branches/5.3.x/core/install/install_schema.sql (.../install_schema.sql) (revision 15584)
@@ -110,6 +110,11 @@
l3_PlainTextBody longtext,
l4_PlainTextBody longtext,
l5_PlainTextBody longtext,
+ l1_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l2_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l3_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l4_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l5_TranslateFrom int(11) NOT NULL DEFAULT '0',
Headers text,
Enabled int(11) NOT NULL DEFAULT '1',
FrontEndOnly tinyint(3) unsigned NOT NULL DEFAULT '0',
@@ -137,7 +142,8 @@
KEY l2_PlainTextBody (l2_PlainTextBody(5)),
KEY l3_PlainTextBody (l3_PlainTextBody(5)),
KEY l4_PlainTextBody (l4_PlainTextBody(5)),
- KEY l5_PlainTextBody (l5_PlainTextBody(5))
+ KEY l5_PlainTextBody (l5_PlainTextBody(5)),
+ KEY l1_TranslateFrom (l1_TranslateFrom)
);
CREATE TABLE SystemEventSubscriptions (
@@ -236,6 +242,11 @@
l3_ColumnTranslation text,
l4_ColumnTranslation text,
l5_ColumnTranslation text,
+ l1_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l2_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l3_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l4_TranslateFrom int(11) NOT NULL DEFAULT '0',
+ l5_TranslateFrom int(11) NOT NULL DEFAULT '0',
PhraseType int(11) NOT NULL DEFAULT '0',
LastChanged int(10) unsigned DEFAULT NULL,
LastChangeIP varchar(15) NOT NULL DEFAULT '',
@@ -245,7 +256,8 @@
KEY PhraseKey (PhraseKey),
KEY l1_Translation (l1_Translation(5)),
KEY l1_HintTranslation (l1_HintTranslation(5)),
- KEY l1_ColumnTranslation (l1_ColumnTranslation(5))
+ KEY l1_ColumnTranslation (l1_ColumnTranslation(5)),
+ KEY l1_TranslateFrom (l1_TranslateFrom)
);
CREATE TABLE PhraseCache (
Index: branches/5.3.x/core/admin_templates/regional/phrases_edit.tpl
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/admin_templates/regional/phrases_edit.tpl (.../phrases_edit.tpl) (revision 15483)
+++ branches/5.3.x/core/admin_templates/regional/phrases_edit.tpl (.../phrases_edit.tpl) (revision 15584)
@@ -68,36 +68,28 @@
-
-
+
Index: branches/5.3.x/core/units/email_events/email_events_config.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/units/email_events/email_events_config.php (.../email_events_config.php) (revision 15483)
+++ branches/5.3.x/core/units/email_events/email_events_config.php (.../email_events_config.php) (revision 15584)
@@ -1,6 +1,6 @@
Array (
'prefixes' => Array ('emailevents'),
'format' => '#emailevents_status# - #emailevents_titlefield# - !la_section_General!',
- 'toolbar_buttons' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
+ 'toolbar_buttons' => Array ('select', 'setprimary', 'cancel', 'reset_edit', 'prev', 'next'),
),
'email_message_edit_settings' => Array (
@@ -73,6 +73,8 @@
),
),
+ 'CheckSimulatniousEdit' => true,
+
'PermSection' => Array ('main' => 'in-portal:configemail'),
'Sections' => Array (
@@ -89,6 +91,21 @@
'TableName' => TABLE_PREFIX . 'EmailEvents',
+ 'CalculatedFields' => Array (
+ '' => Array (
+ 'SourceSubject' => 'l%4$s_Subject',
+ 'SourceHtmlBody' => 'l%4$s_HtmlBody',
+ 'SourcePlainTextBody' => 'l%4$s_PlainTextBody',
+
+ 'CurrentSubject' => 'l%5$s_Subject',
+ 'CurrentHtmlBody' => 'l%5$s_HtmlBody',
+ 'CurrentPlainTextBody' => 'l%5$s_PlainTextBody',
+
+ 'TranslationInSync' => 'IF(l%5$s_TranslateFrom = 0, 1, 0)',
+ 'TranslateFromLanguage' => 'l%5$s_TranslateFrom',
+ ),
+ ),
+
'ListSQLs' => Array (
'' => ' SELECT %1$s.* %2$s FROM %1$s',
),
@@ -168,6 +185,12 @@
'default' => null
),
+ 'TranslateFrom' => Array (
+ 'type' => 'int',
+ 'formatter' => 'kMultiLanguage', 'db_type' => 'int', 'index_type' => 'int',
+ 'not_null' => 1, 'default' => 0
+ ),
+
'Enabled' => Array (
'type' => 'int',
'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
@@ -222,6 +245,25 @@
'Tag' => Array ('type' => 'string', 'default' => ''),
'Replacement' => Array ('type' => 'string', 'default' => ''),
'ReplacementTagsXML' => Array ('type' => 'string', 'default' => ''),
+
+ 'SourceSubject' => Array ('type' => 'string', 'default' => ''),
+ 'SourceHtmlBody' => Array ('type' => 'string', 'default' => ''),
+ 'SourcePlainTextBody' => Array ('type' => 'string', 'default' => ''),
+
+ 'CurrentSubject' => Array ('type' => 'string', 'default' => ''),
+ 'CurrentHtmlBody' => Array ('type' => 'string', 'default' => ''),
+ 'CurrentPlainTextBody' => Array ('type' => 'string', 'default' => ''),
+
+ 'TranslationInSync' => Array (
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
+ 'default' => 0,
+ ),
+ 'TranslateFromLanguage' => Array (
+ 'type' => 'int',
+ 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'Languages ORDER BY PackName', 'option_title_field' => 'PackName', 'option_key_field' => 'LanguageId',
+ 'default' => 0,
+ ),
),
'Grids' => Array (
@@ -253,13 +295,15 @@
'Fields' => Array (
'EventId' => Array ('title' => 'column:la_fld_Id', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
'Event' => Array ('filter_block' => 'grid_like_filter', 'width' => 250, ),
- 'Subject' => Array ('filter_block' => 'grid_like_filter', 'no_special' => 0, 'width' => 300, ),
+ 'CurrentSubject' => Array ('title' => 'column:la_fld_Subject', 'filter_block' => 'grid_like_filter', 'no_special' => 0, 'width' => 300, ),
'Description' => Array ('filter_block' => 'grid_like_filter', 'width' => 250, ),
'Type' => Array ('filter_block' => 'grid_options_filter', 'width' => 60, ),
'Enabled' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ),
'Module' => Array ('filter_block' => 'grid_multioptions_filter', 'width' => 100, ),
'FrontEndOnly' => Array ('filter_block' => 'grid_options_filter', 'width' => 120, 'hidden' => 1),
'LastChanged' => Array ('title' => 'column:la_fld_Modified', 'filter_block' => 'grid_date_range_filter', 'width' => 150),
+ 'TranslationInSync' => Array ('filter_block' => 'grid_options_filter', 'width' => 100, 'hidden' => 1),
+ 'TranslateFromLanguage' => Array ('filter_block' => 'grid_multioptions_filter', 'width' => 100, 'hidden' => 1),
),
),
),
Index: branches/5.3.x/admin/system_presets/simple/phrases_phrases.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/admin/system_presets/simple/phrases_phrases.php (.../phrases_phrases.php) (revision 15483)
+++ branches/5.3.x/admin/system_presets/simple/phrases_phrases.php (.../phrases_phrases.php) (revision 15584)
@@ -20,7 +20,7 @@
'phrases_list_st' => Array (/*'new_item', 'edit', 'delete', 'view',*/ 'export', /*'dbl-click'*/),
// edit phrase
-// 'phrase_edit_single' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
+ 'phrase_edit_single' => Array (/*'select',*/ 'setprimary', /*'cancel', 'reset_edit', 'prev', 'next'*/),
);
// fields to hide
@@ -31,14 +31,19 @@
// virtual fields to hide
$virtual_hidden_fields = Array (
- /*'PrimaryTranslation', 'CurrentTranslation', 'CurrentHintTranslation', 'CurrentColumnTranslation',
- 'LangFile', 'ImportOverwrite', 'DoNotEncode', 'ExportPhrases', 'ExportEmailEvents'*/
+ /*'PrimaryTranslation', 'SourceTranslation', 'SourceHintTranslation', 'SourceColumnTranslation',
+ 'CurrentTranslation', 'CurrentHintTranslation', 'CurrentColumnTranslation', 'LangFile', 'ImportOverwrite',
+ 'ImportSynced', 'DoNotEncode', 'ExportPhrases', 'ExportEmailEvents',*/ 'TranslationInSync', 'TranslateFromLanguage'
);
$debug_only_fields = Array (
'HintTranslation', 'ColumnTranslation'
);
+ $debug_only_virtual_fields = Array (
+ 'SourceHintTranslation', 'SourceColumnTranslation'
+ );
+
// fields to make required
$required_fields = Array (
'Phrase', 'Translation', 'PhraseType', 'Module'
@@ -55,5 +60,5 @@
// 'Default' => Array ('PhraseId', 'Phrase', 'CurrentTranslation', 'PrimaryTranslation', 'PhraseType', 'LastChanged', 'Module', 'CurrentHintTranslation', 'CurrentColumnTranslation'),
// single list of phrases
-// 'Phrases' => Array ('PhraseId', 'Phrase', 'CurrentTranslation', 'PhraseType', 'LastChanged', 'Module', 'CurrentHintTranslation', 'CurrentColumnTranslation'),
+ 'Phrases' => Array (/*'PhraseId', 'Phrase', 'CurrentTranslation', 'PhraseType', 'LastChanged', 'Module', 'CurrentHintTranslation', 'CurrentColumnTranslation',*/ 'TranslationInSync', 'TranslateFromLanguage'),
);
\ No newline at end of file
Index: branches/5.3.x/admin/system_presets/simple/email_events_emailevents.php
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/admin/system_presets/simple/email_events_emailevents.php (.../email_events_emailevents.php) (revision 15483)
+++ branches/5.3.x/admin/system_presets/simple/email_events_emailevents.php (.../email_events_emailevents.php) (revision 15584)
@@ -18,7 +18,7 @@
'email_message_list' => Array (/*'new_item', 'edit', 'delete', 'approve', 'decline', 'frontend_mail', 'view',*/ 'export', /*'dbl-click'*/),
// edit email edit - general tab
-// 'email_message_edit' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
+ 'email_message_edit' => Array (/*'select',*/ 'setprimary', /*'cancel', 'reset_edit', 'prev', 'next'*/),
// edit email edit - settings tab
// 'email_message_edit_settings' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
@@ -35,7 +35,7 @@
// virtual fields to hide
$virtual_hidden_fields = Array (
/*'RecipientType', 'RecipientName', 'RecipientAddressType',
- 'RecipientAddress', 'Tag', 'Replacement', 'ReplacementTagsXML',*/
+ 'RecipientAddress', 'Tag', 'Replacement', 'ReplacementTagsXML',*/ 'TranslationInSync', 'TranslateFromLanguage'
);
// fields to make required
@@ -52,6 +52,10 @@
'RecipientAddress', 'Tag', 'Replacement', 'ReplacementTagsXML',*/
);
+ $debug_only_virtual_fields = Array (
+ 'SourceSubject', 'SourceHtmlBody', 'SourcePlainTextBody',
+ );
+
// tabs during editing
$hide_edit_tabs = Array (
'Default' => Array (/*'general',*/ 'settings'),
@@ -60,5 +64,5 @@
// hide columns in grids
$hide_columns = Array (
// 'Default' => Array ('EventId', 'Description', 'Event', 'Module', 'Type', 'Enabled', 'LastChanged'),
-// 'Emails' => Array ('EventId', 'Event', 'Subject', 'Description', 'Type', 'Enabled', 'Module', 'FrontEndOnly', 'LastChanged'),
+ 'Emails' => Array (/*'EventId', 'Event', 'Subject', 'Description', 'Type', 'Enabled', 'Module', 'FrontEndOnly', 'LastChanged',*/ 'TranslationInSync', 'TranslateFromLanguage'),
);
\ No newline at end of file
Index: branches/5.3.x/core/admin_templates/languages/email_message_edit.tpl
===================================================================
diff -u -r15483 -r15584
--- branches/5.3.x/core/admin_templates/languages/email_message_edit.tpl (.../email_message_edit.tpl) (revision 15483)
+++ branches/5.3.x/core/admin_templates/languages/email_message_edit.tpl (.../email_message_edit.tpl) (revision 15584)
@@ -11,10 +11,26 @@