• Модуль: 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();
}