Index: trunk/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -N -r7855 -r8104 --- trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 7855) +++ trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 8104) @@ -6,7 +6,7 @@ define('EVENT_STATUS_DISABLED', 0); define('EVENT_STATUS_ENABLED', 1); define('EVENT_STATUS_FRONTEND', 2); - + class EmailEventsEventsHandler extends kDBEventHandler { @@ -119,26 +119,26 @@ * * @param kEvent $event * @param int $event_id id of email event used - * + * * @return mixed */ function GetMessageRecipients(&$event, &$event_id) { $email_event =& $event->getObject( Array('skip_autoload' => true) ); /* @var $email_event kDBItem */ - + // get event parameters by name & type $load_keys = Array ( 'Event' => $event->getEventParam('EmailEventName'), 'Type' => $event->getEventParam('EmailEventType'), ); $email_event->Load($load_keys); - + if (!$email_event->isLoaded()) { // event record not found return false; } - + $enabled = $email_event->GetDBField('Enabled'); if ($enabled == EVENT_STATUS_DISABLED) { return false; @@ -150,18 +150,18 @@ // initial values $to_user_id = $event->getEventParam('EmailEventToUserId'); $from_user_id = $email_event->GetDBField('FromUserId'); - + if ($email_event->GetDBField('Type') == EVENT_TYPE_ADMIN) { // For type "Admin" recipient is a user from field FromUserId which means From/To user in Email events list $to_user_id = $from_user_id; $from_user_id = -1; } - + $event_id = $email_event->GetDBField('EventId'); - + return Array ($from_user_id, $to_user_id); } - + /** * Returns user name, email by id, or ones, that specified in $direct_params * @@ -175,36 +175,36 @@ // load user, because it can be addressed from email template tags $user =& $this->Application->recallObject('u.email-'.$user_type, null, Array('skip_autoload' => true)); /* @var $user UsersItem */ - + $email = $name = ''; $result = $user_id > 0 ? $user->Load($user_id) : $user->Clear(); if ($user->IsLoaded()) { $email = $user->GetDBField('Email'); $name = trim($user->GetDBField('FirstName').' '.$user->GetDBField('LastName')); } - + if (is_array($direct_params)) { if (isset($direct_params[$user_type.'_email'])) { $email = $direct_params[$user_type.'_email']; } - + if (isset($direct_params[$user_type.'_name'])) { $name = $direct_params[$user_type.'_name']; } } - + if (!$email) { // if email is empty, then use admins email $email = $this->Application->ConfigValue('Smtp_AdminMailFrom'); } - + if (!$name) { $name = $user_type == 'from' ? strip_tags($this->Application->ConfigValue('Site_Name')) : $email; } - + return Array ($email, $name); } - + /** * Returns email event message by ID (headers & body in one piece) * @@ -216,54 +216,54 @@ $current_language = $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) ); if (!$message->isLoaded()) { // event translation on required language not found - return false; + return false; } - + $message_type = $message->GetDBField('MessageType'); - + // 1. get message body $message_body = $message->GetDBField('Template'); - + // 2. add footer $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"'; - + list (, $footer) = explode("\n\n", $this->Conn->GetOne($sql)); if ($message_type == 'text') { $esender =& $this->Application->recallObject('EmailSender'); /* @var $esender kEmailSendingHelper */ - + $footer = $esender->ConvertToText($footer); } - + if ($footer) { $message_body .= "\r\n".$footer; } - + // 3. replace tags if needed $default_replacement_tags = Array ( ' ' ' 'GetDBField('ReplacementTags'); $replacement_tags = $replacement_tags ? unserialize($replacement_tags) : Array (); $replacement_tags = array_merge_recursive2($default_replacement_tags, $replacement_tags); foreach ($replacement_tags as $replace_from => $replace_to) { $message_body = str_replace($replace_from, $replace_to, $message_body); } - + return $message_body; } - + /** * Parse message template and return headers (as array) and message body part * @@ -274,7 +274,7 @@ function ParseMessageBody($message, $direct_params = null) { $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 @@ -289,16 +289,16 @@ // 3. separate headers from body $message_headers = Array (); list($headers, $message_body) = explode("\n\n", $message, 2); - + $headers = explode("\n", $headers); foreach ($headers as $header) { $header = explode(':', $header, 2); $message_headers[ trim($header[0]) ] = trim($header[1]); } - + return Array ($message_headers, $message_body); } - + /** * Raised when email message shoul be sent * @@ -313,38 +313,38 @@ // additional parameters from kApplication->EmailEvent $send_params = $event->getEventParam('DirectSendParams'); - + // 1. get information about message sender and recipient $recipients = $this->GetMessageRecipients($event, $event_id); if ($recipients === false) { // if not valid recipients found, then don't send event return false; } - + list ($from_id, $to_id) = $recipients; list ($from_email, $from_name) = $this->GetRecipientInfo($from_id, 'from', $send_params); 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); if (!trim($message_template)) { return false; } - + list ($message_headers, $message_body) = $this->ParseMessageBody($message_template, $send_params); if (!trim($message_body)) { return false; } - + // 3. set headers & send message $esender =& $this->Application->recallObject('EmailSender'); /* @var $esender kEmailSendingHelper */ - + $esender->SetFrom($from_email, $from_name); $esender->AddTo($to_email, $to_name); - + $message_subject = isset($message_headers['Subject']) ? $message_headers['Subject'] : 'Mail message'; - $esender->SetSubject($message_subject); + $esender->SetSubject($message_subject); foreach ($message_headers as $header_name => $header_value) { $esender->SetEncodedHeader($header_name, $header_value); @@ -360,7 +360,7 @@ foreach ($send_keys as $send_key) { unset($send_params[$send_key]); } - + $fields_hash = Array ( 'fromuser' => $from_name.' ('.$from_email.')', 'addressto' => $to_name.' ('.$to_email.')', @@ -369,7 +369,7 @@ 'event' => $email_event_name, 'EventParams' => serialize($send_params), ); - + $this->Conn->doInsert($fields_hash, TABLE_PREFIX.'EmailLog'); }