Index: branches/5.2.x/core/install/upgrades.php =================================================================== diff -u -N -r15222 -r15225 --- branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 15222) +++ branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 15225) @@ -1,6 +1,6 @@ getLanguages(); if ($this->Conn->TableFound(TABLE_PREFIX . 'EmailMessage', true)) { - $email_message_helper = $this->Application->recallObject('EmailMessageHelper'); - /* @var $email_message_helper EmailMessageHelper */ + $email_message_helper = $this->Application->recallObject('kEmailMessageHelper'); + /* @var $email_message_helper kEmailMessageHelper */ foreach ($languages as $language_id) { $sql = 'SELECT EmailMessageId, Template, EventId @@ -2034,51 +2034,116 @@ } 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'); + $this->_splitEmailBody(); + $this->_migrateCommonFooter(); + } + } - if ( !isset($fields['l1_Body']) ) { - // column dropped - nothing to convert anymore - return; - } + /** + * Splits e-mail body into HTML and Text fields + * + * @return void + * @access private + */ + private function _splitEmailBody() + { + $id_field = $this->Application->getUnitOption('emailevents', 'IDField'); + $table_name = $this->Application->getUnitOption('emailevents', 'TableName'); + $fields = $this->Conn->Query('DESCRIBE ' . $table_name, 'Field'); - $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); - /* @var $ml_helper kMultiLanguageHelper */ + if ( !isset($fields['l1_Body']) ) { + // column dropped - nothing to convert anymore + return; + } - $languages = $ml_helper->getLanguages(); - $ml_helper->createFields('emailevents'); + $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); + /* @var $ml_helper kMultiLanguageHelper */ - $sql = 'SELECT * - FROM ' . $table_name; - $email_events = $this->Conn->Query($sql); + $languages = $ml_helper->getLanguages(); + $ml_helper->createFields('emailevents'); - // 1. move data to new columns - foreach ($email_events as $email_event) { - $fields_hash = Array (); - $translation_field = $email_event['MessageType'] == 'html' ? 'HtmlBody' : 'PlainTextBody'; + $sql = 'SELECT * + FROM ' . $table_name; + $email_events = $this->Conn->Query($sql); - foreach ($languages as $language_id) { - $fields_hash['l' . $language_id . '_' . $translation_field] = $email_event['l' . $language_id . '_Body']; - } + // 1. move data to new columns + foreach ($email_events as $email_event) { + $fields_hash = Array (); + $translation_field = $email_event['MessageType'] == 'html' ? 'HtmlBody' : 'PlainTextBody'; - if ( $fields_hash ) { - $this->Conn->doUpdate($fields_hash, $table_name, $id_field . ' = ' . $email_event[$id_field]); - } + foreach ($languages as $language_id) { + $fields_hash['l' . $language_id . '_' . $translation_field] = $email_event['l' . $language_id . '_Body']; } - // 2. drop old columns - $drops = Array ('DROP COLUMN MessageType'); + if ( $fields_hash ) { + $this->Conn->doUpdate($fields_hash, $table_name, $id_field . ' = ' . $email_event[$id_field]); + } + } - foreach ($languages as $language_id) { - $lang_field = 'l' . $language_id . '_Body'; + // 2. drop old columns + $drops = Array ('DROP COLUMN MessageType'); - if ( isset($fields[$lang_field]) ) { - $drops[] = 'DROP COLUMN ' . $lang_field; - } + 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)); + $this->Conn->Query('ALTER TABLE ' . $table_name . ' ' . implode(', ', $drops)); + } + + /** + * Transforms COMMON.FOOTER e-mail event into new field in Languages table + */ + private function _migrateCommonFooter() + { + $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); + /* @var $ml_helper kMultiLanguageHelper */ + + $languages = $ml_helper->getLanguages(); + + $event_table = $this->Application->getUnitOption('emailevents', 'TableName'); + + $sql = 'SELECT * + FROM ' . $event_table . ' + WHERE Event = "COMMON.FOOTER"'; + $footer_data = $this->Conn->GetRow($sql); + + if ( !$footer_data ) { + return; } + + $table_name = $this->Application->getUnitOption('lang', 'TableName'); + + foreach ($languages as $language_id) { + $fields_hash = Array ( + 'HtmlEmailTemplate' => $this->_appendEmailDesignBody($footer_data['l' . $language_id . '_HtmlBody']), + 'TextEmailTemplate' => $this->_appendEmailDesignBody($footer_data['l' . $language_id . '_PlainTextBody']), + ); + + $this->Conn->doUpdate($fields_hash, $table_name, 'LanguageId = ' . $language_id); + } + + $sql = 'DELETE FROM ' . $event_table . ' + WHERE EventId = ' . $footer_data['EventId']; + $this->Conn->Query($sql); } + + /** + * Adds "$body" to given string + * + * @param string $string + * @return string + * @access private + */ + private function _appendEmailDesignBody($string) + { + if ( !$string ) { + return $string; + } + + return '$body' . "\n" . str_replace(Array ("\r\n", "\r"), "\n", $string); + } } \ No newline at end of file