• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/item/usercontentview.php
  • Класс: BitrixSocialnetworkItemUserContentView
  • Вызов: UserContentView::getUserList
static function getUserList(array $params = []): array
{
	global $USER;

	$result = [
		'items' => [],
		'hiddenCount' => 0
	];

	$contentId = (!empty($params['contentId']) ? $params['contentId'] : false);
	$pageNum = (!empty($params['page']) ? (int)$params['page'] : 1);
	$pathToUserProfile = (!empty($params['pathToUserProfile']) ? $params['pathToUserProfile'] : '');
	$pageSize = 10;

	if (
		!$contentId
		&& $pageNum <= 0
	)
	{
		return $result;
	}

	$select = [
		'USER_ID',
		'DATE_VIEW',
		'USER_NAME' => 'USER.NAME',
		'USER_LAST_NAME' => 'USER.LAST_NAME',
		'USER_SECOND_NAME' => 'USER.SECOND_NAME',
		'USER_LOGIN' => 'USER.LOGIN',
		'USER_PERSONAL_PHOTO' => 'USER.PERSONAL_PHOTO',
		'USER_PERSONAL_GENDER' => 'USER.PERSONAL_GENDER'
	];

	$extranetInstalled = $mailInstalled = false;
	$extranetIdList = [];

	if (ModuleManager::isModuleInstalled('extranet'))
	{
		$extranetInstalled = true;
		$select['USER_UF_DEPARTMENT'] = "USER.UF_DEPARTMENT";
	}

	if (IsModuleInstalled('mail'))
	{
		$mailInstalled = true;
		$select['USER_EXTERNAL_AUTH_ID'] = "USER.EXTERNAL_AUTH_ID";
	}

	$queryParams = [
		'order' => [
			'DATE_VIEW' => 'DESC'
		],
		'filter' => [
			'=CONTENT_ID' => $contentId
		],
		'select' => $select
	];

	if (!$extranetInstalled)
	{
		$queryParams['limit'] = $pageSize;
		$queryParams['offset'] = ($pageNum - 1) * $pageSize;
	}

	$userList = [];
	$timeZoneOffset = CTimeZone::getOffset();

	$res = UserContentViewTable::getList($queryParams);

	while ($fields = $res->fetch())
	{
		$photoSrc = '';

		if ((int)$fields['USER_PERSONAL_PHOTO'] <= 0)
		{
			switch ($fields['USER_PERSONAL_GENDER'])
			{
				case "M":
					$suffix = "male";
					break;
				case "F":
					$suffix = "female";
					break;
				default:
					$suffix = "unknown";
			}
			$fields['USER_PERSONAL_PHOTO'] = Option::get('socialnetwork', 'default_user_picture_' . $suffix, false, SITE_ID);
		}

		if (
			!empty($fields['USER_PERSONAL_PHOTO'])
			&& (int)$fields['USER_PERSONAL_PHOTO'] > 0
		)
		{
			$file = CFile::resizeImageGet(
				$fields["USER_PERSONAL_PHOTO"],
				[ 'width' => 58, 'height' => 58 ],
				BX_RESIZE_IMAGE_EXACT,
				false,
				false,
				true
			);
			$photoSrc = $file["src"];
		}

		$userFields = [
			'NAME' => $fields['USER_NAME'],
			'LAST_NAME' => $fields['USER_LAST_NAME'],
			'SECOND_NAME' => $fields['USER_SECOND_NAME'],
			'LOGIN' => $fields['USER_LOGIN'],
		];

		$userType = '';
		if (
			$mailInstalled
			&& $fields["USER_EXTERNAL_AUTH_ID"] === "email"
		)
		{
			$userType = "mail";
		}
		elseif (
			$extranetInstalled
			&& (
				empty($fields["USER_UF_DEPARTMENT"])
				|| (int)$fields["USER_UF_DEPARTMENT"][0] <= 0
			)
		)
		{
			$userType = "extranet";
			$extranetIdList[] = $fields["USER_ID"];
		}

		$dateView = (
			$fields['DATE_VIEW'] instanceof BitrixMainTypeDateTime
				? $fields['DATE_VIEW']->toString()
				: ''
		);

		$userList[$fields['USER_ID']] = [
			'ID' => $fields['USER_ID'],
			'TYPE' => $userType,
			'URL' => CUtil::jSEscape(CComponentEngine::makePathFromTemplate($pathToUserProfile, [
				"UID" => $fields["USER_ID"],
				"user_id" => $fields["USER_ID"],
				"USER_ID" => $fields["USER_ID"]
			])),
			'PHOTO_SRC' => $photoSrc,
			'FULL_NAME' => CUser::formatName(CSite::getNameFormat(), $userFields, true, true),
			'DATE_VIEW' => $dateView,
			'DATE_VIEW_FORMATTED' => (
				!empty($dateView)
					? CComponentUtil::getDateTimeFormatted(MakeTimeStamp($dateView), "FULL", $timeZoneOffset)
					: ''
			)
		];
	}

	$userIdToCheckList = [];

	if (Loader::includeModule('extranet'))
	{
		$userIdToCheckList = (
			CExtranet::isIntranetUser(SITE_ID, $USER->getId())
				? $extranetIdList
				: array_keys($userList)
		);
	}

	if (!empty($userIdToCheckList))
	{
		$myGroupsUserList = CExtranet::getMyGroupsUsersSimple(CExtranet::getExtranetSiteID());
		foreach ($userIdToCheckList as $userIdToCheck)
		{
			if (
				!in_array($userIdToCheck, $myGroupsUserList)
				&& $userIdToCheck != $USER->getId()
			)
			{
				unset($userList[$userIdToCheck]);
				$result['hiddenCount']++;
			}
		}
	}

	if (!$extranetInstalled)
	{
		$result['items'] = $userList;
	}
	elseif ($pageNum <= ((count($userList) / $pageSize) + 1))
	{
		$res = new CDBResult();
		$res->initFromArray($userList);
		$res->navStart($pageSize, false, $pageNum);

		while($user = $res->fetch())
		{
			$result['items'][] = $user;
		}
	}
	else
	{
		$result['items'] = [];
	}

	return $result;
}