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