- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/user.php
- Класс: BitrixImUser
- Вызов: User::getMessages
static function getMessages($userId = null, $options = Array())
{
$userId = BitrixImCommon::getUserId($userId);
if (!$userId)
{
return false;
}
$filter = Array(
'=AUTHOR_ID' => $userId
);
if (isset($options['FIRST_ID']))
{
$order = array();
if (intval($options['FIRST_ID']) > 0)
{
$filter['>ID'] = $options['FIRST_ID'];
}
}
else
{
$order = Array('ID' => 'DESC');
if (isset($options['LAST_ID']) && intval($options['LAST_ID']) > 0)
{
$filter['= 500? 500: $options['LIMIT'];
}
else
{
$limit = 50;
}
$skipMessage = isset($options['SKIP_MESSAGE']) && $options['SKIP_MESSAGE'] == 'Y';
$select = Array(
'ID', 'CHAT_ID', 'DATE_CREATE',
'CHAT_TITLE' => 'CHAT.TITLE'
);
if (!$skipMessage)
{
$select[] = 'MESSAGE';
}
$orm = BitrixImModelMessageTable::getList(array(
'filter' => $filter,
'select' => $select,
'order' => $order,
'limit' => $limit
));
$messages = Array();
$messagesChat = Array();
while($message = $orm->fetch())
{
$messages[$message['ID']] = Array(
'ID' => (int)$message['ID'],
'DATE' => $message['DATE_CREATE'],
'TEXT' => (string)$message['MESSAGE'],
);
if ($skipMessage)
{
unset($messages[$message['ID']]['TEXT']);
}
$messagesChat[$message['ID']] = Array(
'ID' => (int)$message['ID'],
'CHAT_ID' => (int)$message['CHAT_ID']
);
}
$params = CIMMessageParam::Get(array_keys($messages));
$fileIds = Array();
foreach ($params as $messageId => $param)
{
$messages[$messageId]['params'] = empty($param)? null: $param;
if (isset($param['FILE_ID']))
{
foreach ($param['FILE_ID'] as $fileId)
{
$fileIds[$messagesChat[$messageId]['CHAT_ID']][$fileId] = $fileId;
}
}
}
$messages = CIMMessageLink::prepareShow($messages, $params);
$files = array();
foreach ($fileIds as $chatId => $fileId)
{
if ($result = CIMDisk::GetFiles($chatId, $fileId))
{
$files = array_merge($files, $result);
}
}
$result = Array(
'MESSAGES' => $messages,
'FILES' => $files,
);
if ($options['JSON'])
{
foreach ($result['MESSAGES'] as $key => $value)
{
if ($value['DATE'] instanceof BitrixMainTypeDateTime)
{
$result['MESSAGES'][$key]['DATE'] = date('c', $value['DATE']->getTimestamp());
}
$result['MESSAGES'][$key] = array_change_key_case($result['MESSAGES'][$key], CASE_LOWER);
}
$result['MESSAGES'] = array_values($result['MESSAGES']);
foreach ($result['FILES'] as $key => $value)
{
if ($value['date'] instanceof BitrixMainTypeDateTime)
{
$result['FILES'][$key]['date'] = date('c', $value['date']->getTimestamp());
}
foreach (['urlPreview', 'urlShow', 'urlDownload'] as $field)
{
$url = $result['FILES'][$key][$field];
if (is_string($url) && $url && mb_strpos($url, 'http') !== 0)
{
$result['FILES'][$key][$field] = BitrixImCommon::getPublicDomain().$url;
}
}
}
$result = array_change_key_case($result, CASE_LOWER);
}
return $result;
}