• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/messageusertype.php
  • Класс: BitrixMailMessageUserType
  • Вызов: MessageUserType::onBeforeSave
static function onBeforeSave($userField, $mailMessageId, $userId)
{
	$previousMailsIds = (array) $userField['VALUE'];
	if (!in_array($mailMessageId, $previousMailsIds))
	{
		$message = MailMessageTable::getList([
			'select' => [
				'ID', 'MAILBOX_ID',
			],
			'filter' => [
				'=ID' => $mailMessageId,
			],
		])->fetch();

		if (MailboxTable::getUserMailbox($message['MAILBOX_ID'], $userId))
		{
			if ($userField['VALUE'] !== false && $userField['MULTIPLE'] === 'N')
			{
				$result = static::deleteList([
					'!=MESSAGE_ID' => $mailMessageId,
					'=ENTITY_UF_ID' => $userField['ID'],
					'=ENTITY_TYPE' => $userField['ENTITY_ID'],
					'=ENTITY_ID' => $userField['VALUE_ID'],
				]);
			}
			InternalsMessageAccessTable::add([
				'TOKEN' => md5(sprintf(
					'%u:%u:%u:%s:%s:%u',
					time(),
					$message['MAILBOX_ID'],
					$mailMessageId,
					$userField['ENTITY_ID'],
					$userField['ID'],
					$userField['VALUE_ID']
				)),
				'MAILBOX_ID' => $message['MAILBOX_ID'],
				'MESSAGE_ID' => $mailMessageId,
				'ENTITY_UF_ID' => $userField['ID'],
				'ENTITY_TYPE' => $userField['ENTITY_ID'],
				'ENTITY_ID' => $userField['VALUE_ID'],
				'SECRET' => bin2hex(MainSecurityRandom::getBytes(16)),
				'OPTIONS' => [],
			]);
			static::sendEntityCreatedEvents($message, $userField);
		}
	}

	return $mailMessageId;
}