Index: branches/RC/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -N -r11319 -r11538 --- branches/RC/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 11319) +++ branches/RC/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 11538) @@ -205,14 +205,18 @@ * * @param int $event_id * @param string $message_type contains message type = {text,html} + * @param int $language_id */ - function GetMessageBody($event_id, &$message_type) + function GetMessageBody($event_id, &$message_type, $language_id = null) { - $current_language = $this->Application->GetVar('m_lang'); + if (!isset($language_id)) { + $language_id = $this->Application->GetVar('m_lang'); + } + $message =& $this->Application->recallObject('emailmessages', null, Array('skip_autoload' => true)); /* @var $message kDBItem */ - $message->Load( Array('EventId' => $event_id, 'LanguageId' => $current_language) ); + $message->Load( Array('EventId' => $event_id, 'LanguageId' => $language_id) ); if (!$message->isLoaded()) { // event translation on required language not found return false; @@ -227,7 +231,7 @@ $sql = 'SELECT em.Template FROM '.$message->TableName.' em LEFT JOIN '.TABLE_PREFIX.'Events e ON e.EventId = em.EventId - WHERE em.LanguageId = '.$current_language.' AND e.Event = "COMMON.FOOTER"'; + WHERE em.LanguageId = '.$language_id.' AND e.Event = "COMMON.FOOTER"'; list (, $footer) = explode("\n\n", $this->Conn->GetOne($sql)); if ($message_type == 'text') { @@ -268,17 +272,20 @@ */ function ParseMessageBody($message, $direct_params = null) { + $message_language = $this->_getSendLanguage($direct_params); + $this->_changeLanguage($message_language); + $direct_params['message_text'] = isset($direct_params['message']) ? $direct_params['message'] : ''; // parameter alias // 1. parse template $this->Application->InitParser(); $parser_params = $this->Application->Parser->Params; // backup parser params // ==== for TemplateParser class only: begin ==== - $parser_pattern = $this->Application->Parser->Pattern; - $parser_values = $this->Application->Parser->Values; - $this->Application->Parser->Pattern = Array(); // fixes bug in TemplateParser::SortParams - $this->Application->Parser->Values = Array(); // fixes bug in TemplateParser::SortParams +// $parser_pattern = $this->Application->Parser->Pattern; +// $parser_values = $this->Application->Parser->Values; +// $this->Application->Parser->Pattern = Array(); // fixes bug in TemplateParser::SortParams +// $this->Application->Parser->Values = Array(); // fixes bug in TemplateParser::SortParams // ==== for TemplateParser class only: end ==== $this->Application->Parser->SetParams( array_merge_recursive2($parser_params, $direct_params) ); @@ -287,8 +294,8 @@ $message = $this->Application->Parser->Parse($message, 'email_template', 0); // ==== for TemplateParser class only: begin ==== - $this->Application->Parser->Pattern = $parser_pattern; - $this->Application->Parser->Values = $parser_values; +// $this->Application->Parser->Pattern = $parser_pattern; +// $this->Application->Parser->Values = $parser_values; // ==== for TemplateParser class only: end ==== $this->Application->Parser->SetParams($parser_params); // restore parser params @@ -307,6 +314,7 @@ $message_headers[ trim($header[0]) ] = trim($header[1]); } + $this->_changeLanguage(); return Array ($message_headers, $message_body); } @@ -337,13 +345,16 @@ list ($to_email, $to_name) = $this->GetRecipientInfo($to_id, 'to', $send_params); // 2. prepare message to be sent - $message_template = $this->GetMessageBody($event_id, $message_type); + $message_language = $this->_getSendLanguage($send_params); + $message_template = $this->GetMessageBody($event_id, $message_type, $message_language); if (!trim($message_template)) { + trigger_error('Message template is empty', E_USER_WARNING); return false; } list ($message_headers, $message_body) = $this->ParseMessageBody($message_template, $send_params); if (!trim($message_body)) { + trigger_error('Message template is empty after parsing', E_USER_WARNING); return false; } @@ -388,6 +399,35 @@ $this->Application->removeObject('u.email-to'); } + function _getSendLanguage($send_params) + { + if (!is_array($send_params) && $this->Application->isDebugMode()) { + $this->Application->Debugger->appendTrace(); + } + return array_key_exists('language_id', $send_params) ? $send_params['language_id'] : $this->Application->GetVar('m_lang'); + } + + function _changeLanguage($language_id = null) + { + static $prev_language_id = null; + + if (!isset($language_id)) { + // restore language + $language_id = $prev_language_id; + } + + $this->Application->SetVar('m_lang', $language_id); + $language =& $this->Application->recallObject('lang.current'); + /* @var $lang_object kDBItem */ + + $language->Load($language_id); + + $this->Application->Phrases->LanguageId = $language_id; + $this->Application->Phrases->Phrases = Array(); + + $prev_language_id = $language_id; // for restoring it later + } + /** * Process emails from queue *