• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/im.php
  • Класс: BitrixImOpenLinesIm
  • Вызов: Im::addMessagesNewsletter
static function addMessagesNewsletter($messages): array
{
	$result = array();
	$userCodes = array();

	if (is_array($messages) && Loader::includeModule('im'))
	{
		foreach ($messages as $code => $message)
		{
			$result[$code] = false;
			$userCodes[] = $code;
		}

		$rawChat = ChatTable::getList(array(
			'select' => array('ID', 'ENTITY_ID', 'RECENT_MID' => 'RECENT.ITEM_MID', 'ENTITY_DATA_1'),
			'filter' => array(
				'=ENTITY_TYPE' => 'LINES',
				'=ENTITY_ID' => $userCodes
			),
			'runtime' => array(
				new ReferenceField(
					'RECENT',
					'BitrixImModelRecentTable',
					array(
						'=this.ID' => 'ref.ITEM_ID',
						'=this.AUTHOR_ID' => 'ref.USER_ID',
						'ref.ITEM_TYPE' => new SqlExpression('?i', IM_MESSAGE_OPEN_LINE)
					)
				)
			)
		));

		while($rowChat = $rawChat->fetch())
		{
			//TODO: Replace with the method BitrixImOpenLinesChat::parseLinesChatEntityId or BitrixImOpenLinesChat::parseLiveChatEntityId
			$chatFieldData = explode('|', $rowChat['ENTITY_DATA_1']);
			$blockTimestamp = (int)$chatFieldData[8];
			if ($blockTimestamp !== 0 && $blockTimestamp < (new DateTime())->getTimestamp())
			{
				continue;
			}
			$fields = $messages[$rowChat['ENTITY_ID']];

			$fields['MESSAGE_TYPE'] = IM_MESSAGE_OPEN_LINE;
			$fields['TO_CHAT_ID'] = $rowChat['ID'];
			$fields['FROM_USER_ID'] = 0;
			$fields['SYSTEM'] = 'Y';
			$fields['SKIP_USER_CHECK'] = 'Y';
			$fields['IMPORTANT_CONNECTOR'] = 'Y';
			$fields['INCREMENT_COUNTER'] = 'N';
			$fields['PUSH'] = 'N';
			if(empty($rowChat['RECENT_MID']))
				$fields['RECENT_ADD'] = 'N';
			else
				$fields['RECENT_ADD'] = 'Y';

			$fields['NO_SESSION_OL'] = 'Y';

			$result[$rowChat['ENTITY_ID']] = CIMMessenger::Add($fields);
		}
	}

	return $result;
}