• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/entity/message.php
  • Класс: BitrixSenderEntityMessage
  • Вызов: Message::saveData
protected function saveData($id, array $data)
{
	$fields = $data['FIELDS'];
	$utmTags = $data['UTM'];
	unset($data['FIELDS']);
	unset($data['UTM']);

	if (!is_array($fields) && count($fields) === 0)
	{
		$this->addError('No message fields.');
		return $id;
	}

	$id = $this->saveByEntity(MessageTable::getEntity(), $id, $data);
	if ($this->hasErrors())
	{
		return $id;
	}

	MessageFieldTable::deleteByMessageId($id);
	foreach ($fields as $field)
	{
		if (!$field['CODE'])
		{
			continue;
		}

		if (in_array($field['CODE'], ['MESSAGE_PERSONALIZE', 'SUBJECT_PERSONALIZE', 'TITLE_PERSONALIZE']))
		{
			continue;
		}

		if (in_array($field['CODE'], ['MESSAGE', 'SUBJECT', 'TITLE']))
		{
			preg_match_all("/#([0-9a-zA-Z_.|]+?)#/", $field['VALUE'], $matchesFindPlaceHolders);
			$matchesFindPlaceHoldersCount = count($matchesFindPlaceHolders[1]);
			if ($matchesFindPlaceHoldersCount > 0)
			{
				$list = json_encode($matchesFindPlaceHolders);
				MessageFieldTable::add(
					[
						'MESSAGE_ID' => $id,
						'TYPE' => $field['TYPE'],
						'CODE' => $field['CODE'] . '_PERSONALIZE',
						'VALUE' => $list,
					]
				);
			}
		}
		MessageFieldTable::add([
			'MESSAGE_ID' => $id,
			'TYPE' => $field['TYPE'],
			'CODE' => $field['CODE'],
			'VALUE' => $field['VALUE'],
		]);
	}

	MessageUtmTable::deleteByMessageId($id);
	if ($utmTags)
	{
		foreach ($utmTags as $utm)
		{
			if (empty($utm['VALUE']) || empty($utm['CODE']))
			{
				continue;
			}
			MessageUtmTable::add(
				[
					'MESSAGE_ID' => $id,
					'CODE' => $utm['CODE'],
					'VALUE' => $utm['VALUE'],
				]
			);
		}
	}

	return $id;
}