• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/rest.php
  • Класс: CForumRestService
  • Вызов: CForumRestService::getUserMessage
static function getUserMessage($arParams, $offset, CRestServer $server)
{
	$arParams = array_change_key_case($arParams, CASE_UPPER);

	global $USER;

	$result = array(
		'MESSAGES' => array(),
		'FILES' => array(),
	);

	$userId = (
		isset($arParams["USER_ID"])
		&& intval($arParams["USER_ID"]) > 0
		&& self::isAdmin()
			? $arParams["USER_ID"]
			: $USER->getId()
	);

	$otherUserMode = ($userId != $USER->getId());

	if ($userId <= 0)
	{
		throw new BitrixRestRestException("User ID can't be empty", "ID_EMPTY", CRestServer::STATUS_WRONG_REQUEST);
	}

	if (isset($arParams['FIRST_ID']))
	{
		$options['FIRST_ID'] = intval($arParams['FIRST_ID']);
	}
	else
	{
		$options['LAST_ID'] = isset($arParams['LAST_ID']) && intval($arParams['LAST_ID']) > 0? intval($arParams['LAST_ID']): 0;
	}

	$options['LIMIT'] = isset($arParams['LIMIT'])? (intval($arParams['LIMIT']) > 1000? 1000: intval($arParams['LIMIT'])): 100;

	$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[' $filter,
		'select' => array(
			'ID', 'POST_DATE', 'POST_MESSAGE', 'UF_FORUM_MESSAGE_DOC'
		),
		'order' => $order,
		'limit' => $options['LIMIT']
	));

	$attachedIdList = array();
	$messageAttachedList = array();

	while($messageFields = $res->fetch())
	{
		$result['MESSAGES'][$messageFields['ID']] = array(
			'ID' => (int)$messageFields['ID'],
			'MESSAGE_ID' => (int)$messageFields['ID'],
			'DATE' => $messageFields['POST_DATE'],
			'MESSAGE' => ($otherUserMode ? '' : (string)$messageFields['POST_MESSAGE']),
			'ATTACH' => array()
		);

		if (!empty($messageFields['UF_FORUM_MESSAGE_DOC']))
		{
			if (is_array($messageFields['UF_FORUM_MESSAGE_DOC']))
			{
				$attached = $messageFields['UF_FORUM_MESSAGE_DOC'];
			}
			elseif (intval($messageFields['UF_FORUM_MESSAGE_DOC']) > 0)
			{
				$attached = array(intval($messageFields['UF_FORUM_MESSAGE_DOC']));
			}
			else
			{
				$attached = array();
			}

			if (!empty($attached))
			{
				$attachedIdList = array_merge($attachedIdList, $attached);
			}

			$messageAttachedList[$messageFields['ID']] = $attached;
		}
	}

	$attachedObjectList = array();

	if (
		!empty($attachedIdList)
		&& Loader::includeModule('disk')
	)
	{
		$res = BitrixDiskAttachedObject::getList(array(
			'filter' => array(
				'@ID' => array_unique($attachedIdList)
			),
			'select' => array('ID', 'OBJECT_ID')
		));
		while($attachedObjectFields = $res->fetch())
		{
			$diskObjectId = $attachedObjectFields['OBJECT_ID'];

			if ($fileData = self::getFileData($diskObjectId))
			{
				$attachedObjectList[$attachedObjectFields['ID']] = $diskObjectId;
				$result['FILES'][$diskObjectId] = $fileData;
			}
		}
	}

	foreach ($result['MESSAGES'] as $key => $value)
	{
		if ($value['DATE'] instanceof BitrixMainTypeDateTime)
		{
			$result['MESSAGES'][$key]['DATE'] = date('c', $value['DATE']->getTimestamp());
		}

		if (!empty($messageAttachedList[$key]))
		{
			foreach($messageAttachedList[$key] as $attachedId)
			{
				if (!empty($attachedObjectList[$attachedId]))
				{
					$result['MESSAGES'][$key]['ATTACH'][] = $attachedObjectList[$attachedId];
				}
			}
		}

		$result['MESSAGES'][$key] = array_change_key_case($result['MESSAGES'][$key], CASE_LOWER);
	}

	$result['MESSAGES'] = array_values($result['MESSAGES']);
	$result['FILES'] = self::convertFileData($result['FILES']);

	return $result;
}