Index: branches/5.2.x/core/install/upgrades.php =================================================================== diff -u -N -r15176 -r15222 --- branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 15176) +++ branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 15222) @@ -1,6 +1,6 @@ Application->recallObject('EmailMessageHelper'); /* @var $email_message_helper EmailMessageHelper */ - foreach ($languages as $language_id) { $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']); + $parsed = $email_message_helper->parseTemplate($translation_data['Template'], 'html'); $fields_hash = Array ( 'l' . $language_id . '_Subject' => $parsed['Subject'], - 'l' . $language_id . '_Body' => $parsed['Body'], + 'l' . $language_id . '_Body' => $parsed['HtmlBody'], ); - if ($parsed['Headers']) { + if ( $parsed['Headers'] ) { $fields_hash['Headers'] = $parsed['Headers']; } @@ -2022,4 +2021,64 @@ $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'PageContent', 'PageId = ' . $page_id); } } + + /** + * Update to 5.2.0-B3; Introduces separate field for plain-text e-mail event translations + * + * @param string $mode when called mode {before, after) + */ + public function Upgrade_5_2_0_B3($mode) + { + if ( $mode == 'before' ) { + $this->_renameTables('to'); + } + + if ( $mode == 'after' ) { + $id_field = $this->Application->getUnitOption('emailevents', 'IDField'); + $table_name = $this->Application->getUnitOption('emailevents', 'TableName'); + $fields = $this->Conn->Query('DESCRIBE ' . $table_name, 'Field'); + + if ( !isset($fields['l1_Body']) ) { + // column dropped - nothing to convert anymore + return; + } + + $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); + /* @var $ml_helper kMultiLanguageHelper */ + + $languages = $ml_helper->getLanguages(); + $ml_helper->createFields('emailevents'); + + $sql = 'SELECT * + FROM ' . $table_name; + $email_events = $this->Conn->Query($sql); + + // 1. move data to new columns + foreach ($email_events as $email_event) { + $fields_hash = Array (); + $translation_field = $email_event['MessageType'] == 'html' ? 'HtmlBody' : 'PlainTextBody'; + + foreach ($languages as $language_id) { + $fields_hash['l' . $language_id . '_' . $translation_field] = $email_event['l' . $language_id . '_Body']; + } + + if ( $fields_hash ) { + $this->Conn->doUpdate($fields_hash, $table_name, $id_field . ' = ' . $email_event[$id_field]); + } + } + + // 2. drop old columns + $drops = Array ('DROP COLUMN MessageType'); + + foreach ($languages as $language_id) { + $lang_field = 'l' . $language_id . '_Body'; + + if ( isset($fields[$lang_field]) ) { + $drops[] = 'DROP COLUMN ' . $lang_field; + } + } + + $this->Conn->Query('ALTER TABLE ' . $table_name . ' ' . implode(', ', $drops)); + } + } } \ No newline at end of file