Index: branches/5.1.x/core/install/upgrades.php =================================================================== diff -u -r13140 -r13151 --- branches/5.1.x/core/install/upgrades.php (.../upgrades.php) (revision 13140) +++ branches/5.1.x/core/install/upgrades.php (.../upgrades.php) (revision 13151) @@ -1,6 +1,6 @@ Application->recallObject('kMultiLanguageHelper'); + $ml_helper->createFields('phrases'); + $ml_helper->createFields('emailevents'); + + // migrate email events $table_structure = $this->Conn->Query('DESCRIBE ' . TABLE_PREFIX . 'Events', 'Field'); if (!array_key_exists('Headers', $table_structure)) { @@ -1336,42 +1342,91 @@ $this->Conn->Query($sql); } - // create multilingual Subject and Template fields - $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper'); - $ml_helper->createFields('emailevents'); + if ($this->Conn->TableFound(TABLE_PREFIX . 'EmailMessage')) { + $email_message_helper =& $this->Application->recallObject('EmailMessageHelper'); + /* @var $email_message_helper EmailMessageHelper */ - $email_message_helper =& $this->Application->recallObject('EmailMessageHelper'); - /* @var $email_message_helper EmailMessageHelper */ + for ($language_id = 1; $language_id <= $ml_helper->languageCount; $language_id++) { + if (!$ml_helper->LanguageFound($language_id)) { + continue; + } + $sql = 'SELECT EmailMessageId, Template, EventId + FROM ' . TABLE_PREFIX . 'EmailMessage + WHERE LanguageId = ' . $language_id; + $translations = $this->Conn->Query($sql, 'EventId'); + + foreach ($translations as $event_id => $translation_data) { + $parsed = $email_message_helper->parseTemplate($translation_data['Template']); + + $fields_hash = Array ( + 'l' . $language_id . '_Subject' => $parsed['Subject'], + 'l' . $language_id . '_Body' => $parsed['Body'], + ); + + if ($parsed['Headers']) { + $fields_hash['Headers'] = $parsed['Headers']; + } + + $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Events', 'EventId = ' . $event_id); + + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'EmailMessage + WHERE EmailMessageId = ' . $translation_data['EmailMessageId']; + $this->Conn->Query($sql); + } + } + } + + // migrate phrases + $temp_table = $this->Application->GetTempName(TABLE_PREFIX . 'Phrase'); + + $sqls = Array ( + 'DROP TABLE IF EXISTS ' . $temp_table, + 'CREATE TABLE ' . $temp_table . ' LIKE ' . TABLE_PREFIX . 'Phrase', + 'ALTER TABLE ' . $temp_table . ' DROP LanguageId, DROP Translation', + 'ALTER IGNORE TABLE ' . $temp_table . ' DROP INDEX LanguageId_2', + 'ALTER TABLE ' . $temp_table . ' DROP PhraseId', + 'ALTER TABLE ' . $temp_table . ' ADD PhraseId INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST', + ); + + foreach ($sqls as $sql) { + $this->Conn->Query($sql); + } + + $already_added = Array (); + $primary_language_id = $this->Application->GetDefaultLanguageId(); + for ($language_id = 1; $language_id <= $ml_helper->languageCount; $language_id++) { if (!$ml_helper->LanguageFound($language_id)) { continue; } - $sql = 'SELECT EmailMessageId, Template, EventId - FROM ' . TABLE_PREFIX . 'EmailMessage + $sql = 'SELECT Phrase, PhraseKey, Translation AS l' . $language_id . '_Translation, PhraseType, LastChanged, LastChangeIP, Module + FROM ' . TABLE_PREFIX . 'Phrase WHERE LanguageId = ' . $language_id; - $translations = $this->Conn->Query($sql, 'EventId'); + $phrases = $this->Conn->Query($sql, 'Phrase'); - foreach ($translations as $event_id => $translation_data) { - $parsed = $email_message_helper->parseTemplate($translation_data['Template']); - - $fields_hash = Array ( - 'l' . $language_id . '_Subject' => $parsed['Subject'], - 'l' . $language_id . '_Body' => $parsed['Body'], - ); - - if ($parsed['Headers']) { - $fields_hash['Headers'] = $parsed['Headers']; + foreach ($phrases as $phrase => $fields_hash) { + if (array_key_exists($phrase, $already_added)) { + $this->Conn->doUpdate($fields_hash, $temp_table, 'PhraseId = ' . $already_added[$phrase]); } + else { + $this->Conn->doInsert($fields_hash, $temp_table); + $already_added[$phrase] = $this->Conn->getInsertID(); + } + } - $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Events', 'EventId = ' . $event_id); - - $sql = 'DELETE FROM ' . TABLE_PREFIX . 'EmailMessage - WHERE EmailMessageId = ' . $translation_data['EmailMessageId']; + // in case some phrases were found in this language, but not in primary language -> copy them + if ($language_id != $primary_language_id) { + $sql = 'UPDATE ' . $temp_table . ' + SET l' . $primary_language_id . '_Translation = l' . $language_id . '_Translation + WHERE l' . $primary_language_id . '_Translation IS NULL'; $this->Conn->Query($sql); } } + + $this->Conn->Query('DROP TABLE IF EXISTS ' . TABLE_PREFIX . 'Phrase'); + $this->Conn->Query('RENAME TABLE ' . $temp_table . ' TO ' . TABLE_PREFIX . 'Phrase'); } } } \ No newline at end of file