- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/mail/eventmessagecompiler.php
- Класс: BitrixMainMailEventMessageCompiler
- Вызов: EventMessageCompiler::setMailBody
protected function setMailBody()
{
$isHtml = $this->eventMessageFields["BODY_TYPE"] == "html";
// replace placeholders in body
$message = $this->eventMessageFields["MESSAGE_PHP"];
if(empty($message) && !empty($this->eventMessageFields["MESSAGE"]))
{
$message = MailInternalEventMessageTable::replaceTemplateToPhp($this->eventMessageFields["MESSAGE"]);
if($this->eventMessageFields["ID"]>0)
MailInternalEventMessageTable::update($this->eventMessageFields["ID"], array('MESSAGE_PHP' => $message));
}
if(!empty($this->eventMessageFields['SITE_TEMPLATE_ID']))
$siteTemplateId = $this->eventMessageFields['SITE_TEMPLATE_ID'];
else
$siteTemplateId = null;
$themeCompiler = EventMessageThemeCompiler::createInstance($siteTemplateId, $message, $isHtml);
if(empty($siteTemplateId))
$siteTemplateId = ".default";
// set context variables for components
$themeCompiler->setSiteTemplateId($siteTemplateId);
$themeCompiler->setSiteId($this->siteId);
$themeCompiler->setLanguageId($this->languageId);
Loc::setCurrentLang($themeCompiler->getLanguageId());
// set values of $arParams, used by components
$eventSiteFields = $this->eventSiteFields;
if($isHtml)
{
foreach ($this->eventSiteFields as $fieldKey => $fieldValue)
{
$eventSiteFields["HTML_".$fieldKey] = nl2br(htmlspecialcharsbx($fieldValue, ENT_COMPAT, false));
if (strpos($fieldValue, "<") === false)
{
$eventSiteFields[$fieldKey] = nl2br($fieldValue);
}
}
}
$eventSiteFields['MAIL_EVENTS_UNSUBSCRIBE_LINK'] = Tracking::getLinkUnsub(
'main',
[
'CODE' => mb_strtolower(trim(explode(',', $this->getMailTo())[0])),
'EVENT_NAME' => $this->eventMessageFields["EVENT_NAME"]
]
);
$themeCompiler->setParams($eventSiteFields);
// eval site template and body
$themeCompiler->execute();
// get eval result of site template and body
$message = $themeCompiler->getResult();
$this->mailBody = $message;
Loc::setCurrentLang(null);
EventMessageThemeCompiler::unsetInstance();
}