/** * @return string */ public static function handleEvent(array $arEvent) { if (!isset($arEvent['FIELDS']) && isset($arEvent['C_FIELDS'])) { $arEvent['FIELDS'] = $arEvent['C_FIELDS']; } if (!is_array($arEvent['FIELDS'])) { throw new \Bitrix\Main\ArgumentTypeException("FIELDS"); } $flag = static::SEND_RESULT_TEMPLATE_NOT_FOUND; // no templates $arResult = array("Success" => false, "Fail" => false, "Was" => false); $trackRead = null; $trackClick = null; if (array_key_exists('TRACK_READ', $arEvent)) { $trackRead = $arEvent['TRACK_READ']; } if (array_key_exists('TRACK_CLICK', $arEvent)) { $trackClick = $arEvent['TRACK_CLICK']; } $arSites = explode(",", $arEvent["LID"]); if (count($arSites) <= 0) { return $flag; } // get charset and server name for languages of event $charset = false; $serverName = null; $siteDb = Main\SiteTable::getList(array('select' => array('SERVER_NAME', 'CULTURE_CHARSET' => 'CULTURE.CHARSET'), 'filter' => array('LID' => $arSites))); if ($arSiteDb = $siteDb->fetch()) { $charset = $arSiteDb['CULTURE_CHARSET']; $serverName = $arSiteDb['SERVER_NAME']; } if (!$charset) { return $flag; } // get filter for list of message templates $arEventMessageFilter = array(); $MESSAGE_ID = intval($arEvent["MESSAGE_ID"]); if ($MESSAGE_ID > 0) { $eventMessageDb = MailInternal\EventMessageTable::getById($MESSAGE_ID); if ($eventMessageDb->Fetch()) { $arEventMessageFilter['ID'] = $MESSAGE_ID; $arEventMessageFilter['ACTIVE'] = 'Y'; } } if (count($arEventMessageFilter) == 0) { $arEventMessageFilter = array('ACTIVE' => 'Y', 'EVENT_NAME' => $arEvent["EVENT_NAME"], 'EVENT_MESSAGE_SITE.SITE_ID' => $arSites); } // get list of message templates of event $messageDb = MailInternal\EventMessageTable::getList(array('select' => array('ID'), 'filter' => $arEventMessageFilter, 'group' => array('ID'))); while ($arMessage = $messageDb->fetch()) { $eventMessage = MailInternal\EventMessageTable::getRowById($arMessage['ID']); $eventMessage['FILES'] = array(); $attachmentDb = MailInternal\EventMessageAttachmentTable::getList(array('select' => array('FILE_ID'), 'filter' => array('EVENT_MESSAGE_ID' => $arMessage['ID']))); while ($arAttachmentDb = $attachmentDb->fetch()) { $eventMessage['FILE'][] = $arAttachmentDb['FILE_ID']; } $arFields = $arEvent['FIELDS']; foreach (GetModuleEvents("main", "OnBeforeEventSend", true) as $event) { if (ExecuteModuleEventEx($event, array(&$arFields, &$eventMessage)) === false) { continue 2; } } // get message object for send mail $arMessageParams = array('EVENT' => $arEvent, 'FIELDS' => $arFields, 'MESSAGE' => $eventMessage, 'SITE' => $arSites, 'CHARSET' => $charset); $message = EventMessageCompiler::createInstance($arMessageParams); $message->compile(); // send mail $result = Main\Mail\Mail::send(array('TO' => $message->getMailTo(), 'SUBJECT' => $message->getMailSubject(), 'BODY' => $message->getMailBody(), 'HEADER' => $message->getMailHeaders(), 'CHARSET' => $message->getMailCharset(), 'CONTENT_TYPE' => $message->getMailContentType(), 'MESSAGE_ID' => $message->getMailId(), 'ATTACHMENT' => $message->getMailAttachment(), 'TRACK_READ' => $trackRead, 'TRACK_CLICK' => $trackClick, 'LINK_PROTOCOL' => \Bitrix\Main\Config\Option::get("main", "mail_link_protocol", ''), 'LINK_DOMAIN' => $serverName)); if ($result) { $arResult["Success"] = true; } else { $arResult["Fail"] = true; } $arResult["Was"] = true; } if ($arResult["Was"]) { if ($arResult["Success"]) { if ($arResult["Fail"]) { $flag = static::SEND_RESULT_PARTLY; } else { $flag = static::SEND_RESULT_SUCCESS; } // all sent } else { if ($arResult["Fail"]) { $flag = static::SEND_RESULT_ERROR; } // all templates failed } } return $flag; }
} } } $arEventMessageFile = array(); $str_ACTIVE = "Y"; $str_EVENT_NAME = $EVENT_NAME; $em = CEventMessage::GetByID($ID); if (!$em->ExtractEditFields("str_")) { $ID = 0; } else { $str_LID = array(); $db_LID = CEventMessage::GetLang($ID); while ($ar_LID = $db_LID->Fetch()) { $str_LID[] = $ar_LID["LID"]; } $attachmentFileDb = \Bitrix\Main\Mail\Internal\EventMessageAttachmentTable::getList(array('select' => array('FILE_ID'), 'filter' => array('EVENT_MESSAGE_ID' => $ID))); while ($ar = $attachmentFileDb->fetch()) { if ($arFileFetch = CFile::GetFileArray($ar['FILE_ID'])) { $arEventMessageFile[] = $arFileFetch; } } } if ($bVarsFromForm) { $str_LID = $LID; $DB->InitTableVarsForEdit("b_event_message", "", "str_"); $str_ADDITIONAL_FIELD = $ADDITIONAL_FIELD; } $arMailSiteTemplate = array(); $mailSiteTemplateDb = CSiteTemplate::GetList(null, array('TYPE' => 'mail')); while ($mailSiteTemplate = $mailSiteTemplateDb->GetNext()) { $arMailSiteTemplate[] = $mailSiteTemplate;