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