• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/notify.php
  • Класс: BitrixImNotify
  • Вызов: Notify::requestData
private function requestData(int $requestType, int $limit): array
{
	$collection = [];
	$ormParams = $this->prepareGettingIdParams($requestType, $limit);
	$ids = BitrixImModelMessageTable::getList($ormParams)->fetchAll();
	if (count($ids) === 0)
	{
		return $collection;
	}

	$ids = array_map(static function($item) {
		return (int)$item['ID'];
	}, $ids);

	$ormParams = $this->prepareFilteringByIdParams($ids);
	$ormResult = BitrixImModelMessageTable::getList($ormParams);

	foreach ($ormResult as $notifyItem)
	{
		if ($notifyItem['NOTIFY_EVENT'] === self::EVENT_PRIVATE_SYSTEM)
		{
			$notifyItem['AUTHOR_ID'] = 0;
		}

		$collection[$notifyItem['ID']] = [
			'ID' => (int)$notifyItem['ID'],
			'CHAT_ID' => $this->chatId,
			'AUTHOR_ID' => (int)$notifyItem['AUTHOR_ID'],
			'DATE' => $notifyItem['DATE_CREATE'],
			'NOTIFY_TYPE' => (int)$notifyItem['NOTIFY_TYPE'],
			'NOTIFY_MODULE' => $notifyItem['NOTIFY_MODULE'],
			'NOTIFY_EVENT' => $notifyItem['NOTIFY_EVENT'],
			'NOTIFY_TAG' => $notifyItem['NOTIFY_TAG'],
			'NOTIFY_SUB_TAG' => $notifyItem['NOTIFY_SUB_TAG'],
			'NOTIFY_TITLE' => $notifyItem['NOTIFY_TITLE'],
			//'NOTIFY_READ' => $notifyItem['NOTIFY_READ'],
			'SETTING_NAME' => $notifyItem['NOTIFY_MODULE'].'|'.$notifyItem['NOTIFY_EVENT'],
		];
		$collection[$notifyItem['ID']]['TEXT'] = BitrixImText::parse(
			BitrixImText::convertHtmlToBbCode($notifyItem['MESSAGE']),
			['LINK_TARGET_SELF' => 'Y']
		);
		if ($notifyItem['AUTHOR_ID'] && !isset($this->users[$notifyItem['AUTHOR_ID']]))
		{
			$user = User::getInstance($notifyItem['AUTHOR_ID'])->getArray([
				'JSON' => 'Y',
				'SKIP_ONLINE' => 'Y'
			]);
			$user['last_activity_date'] =
				$notifyItem['USER_LAST_ACTIVITY_DATE']
					? date('c', $notifyItem['USER_LAST_ACTIVITY_DATE']->getTimestamp())
					: false
			;
			$user['desktop_last_date'] =
				$notifyItem['USER_DESKTOP_LAST_DATE']
					? date('c', $notifyItem['USER_DESKTOP_LAST_DATE']->getTimestamp())
					: false
			;
			$user['mobile_last_date'] =
				$notifyItem['USER_MOBILE_LAST_DATE']
					? date('c', $notifyItem['USER_MOBILE_LAST_DATE']->getTimestamp())
					: false
			;
			$user['idle'] = $notifyItem['USER_IDLE'] ?: false;

			$this->users[$notifyItem['AUTHOR_ID']] = $user;
		}

		//keyboard creation
		if ($notifyItem['NOTIFY_BUTTONS'])
		{
			$buttons = unserialize($notifyItem['NOTIFY_BUTTONS'], ['allowed_classes' => false]);

			$keyboard = new BitrixImBotKeyboard(111);
			$command = 'notifyConfirm';
			foreach ($buttons as $button)
			{
				$keyboard->addButton(
					[
						'TEXT' => $button['TITLE'],
						'COMMAND' => $command,
						'COMMAND_PARAMS' => $notifyItem['ID'].'|'.$button['VALUE'],
						'TEXT_COLOR' => '#fff',
						'BG_COLOR' => $button['TYPE'] === 'accept' ? '#8BC84B' : '#ef4b57',
						'DISPLAY' => 'LINE'
					]
				);
			}
			$collection[$notifyItem['ID']]['NOTIFY_BUTTONS'] = $keyboard->getJson();
		}
	}

	if (count($collection) > 0)
	{
		$params = CIMMessageParam::Get(array_keys($collection));
		foreach ($params as $notificationId => $param)
		{
			$collection[$notificationId]['PARAMS'] = empty($param) ? null : $param;
		}

		$collection = $this->fillReadStatuses($collection);
	}

	return $collection;
}