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