static function GetUsers($arParams = Array(), $bSelf = true)
{
global $USER, $CACHE_MANAGER;
$userId = (int)$USER->GetID();
if (
isset($arParams['all'])
&& $arParams['all'] === 'Y'
)
{
if (IsModuleInstalled("intranet"))
{
return self::getUsersAll($arParams);
}
$arParamsNew = $arParams;
$arParamsNew["id"] = array($userId);
unset($arParamsNew["all"]);
return CSocNetLogDestination::GetUsers($arParamsNew, $bSelf);
}
$bExtranet = false;
$filter = [];
if (
!isset($arParams['IGNORE_ACTIVITY'])
|| $arParams['IGNORE_ACTIVITY'] !== 'Y'
)
{
$filter['=ACTIVE'] = 'Y';
}
if (
isset($arParams['ONLY_WITH_EMAIL'])
&& $arParams['ONLY_WITH_EMAIL'] === 'Y'
)
{
$filter['!=EMAIL'] = false;
}
$arExternalAuthId = self::getExternalAuthIdBlackList([
'ALLOW_BOTS' => (isset($arParams['ALLOW_BOTS']) && $arParams['ALLOW_BOTS'] === true)
]);
if (!empty($arExternalAuthId))
{
$filter['!=EXTERNAL_AUTH_ID'] = $arExternalAuthId;
}
if (
(
!isset($arParams['IGNORE_ACTIVITY'])
|| $arParams['IGNORE_ACTIVITY'] !== 'Y'
)
&& (
IsModuleInstalled("intranet")
|| COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") === "Y"
)
)
{
$filter["=CONFIRM_CODE"] = false;
}
$select = [ "ID", "LAST_NAME", "NAME", "SECOND_NAME", "LOGIN", "EMAIL", "PERSONAL_PHOTO", "WORK_POSITION", "PERSONAL_PROFESSION", "IS_ONLINE", "EXTERNAL_AUTH_ID" ];
if (
isset($arParams["CRM_ENTITY"])
&& $arParams["CRM_ENTITY"] === "Y"
&& ModuleManager::isModuleInstalled('crm')
)
{
$select[] = 'UF_USER_CRM_ENTITY';
}
if (ModuleManager::isModuleInstalled('intranet'))
{
$select[] = 'USER_TYPE';
$select[] = 'UF_DEPARTMENT';
}
if (array_key_exists('id', $arParams))
{
if (empty($arParams['id']))
{
$filter['ID'] = $userId;
}
else
{
$arSelect = array($userId);
foreach ($arParams['id'] as $value)
{
if (
intval($value) > 0
&& !in_array($value, $arSelect)
)
{
$arSelect[] = intval($value);
}
}
sort($arSelect);
$filter['@ID'] = $arSelect;
}
}
elseif (isset($arParams['deportament_id']))
{
if (is_array($arParams['deportament_id']))
{
$filter['=UF_DEPARTMENT'] = $arParams['deportament_id'];
}
else
{
if ($arParams['deportament_id'] === 'EX')
{
$bExtranet = true;
}
else
{
$filter['UF_DEPARTMENT'] = intval($arParams['deportament_id']);
}
}
}
$avatarSize = array(
"width" => (intval($arParams["THUMBNAIL_SIZE_WIDTH"] ?? 0) > 0 ? $arParams["THUMBNAIL_SIZE_WIDTH"] : 100),
"height" => (intval($arParams["THUMBNAIL_SIZE_HEIGHT"] ?? 0) > 0 ? $arParams["THUMBNAIL_SIZE_HEIGHT"] : 100)
);
$cacheTtl = 3153600;
$cacheId = 'socnet_destination_getusers_'.md5(serialize($filter)).$bSelf.CSocNetUser::IsCurrentUserModuleAdmin().($bExtranet ? '_ex_'.$userId : '').md5(serialize($avatarSize));
$cacheDir = '/socnet/dest/'.(
isset($arParams['id'])
? 'user'
: 'dept'
) . '/' . mb_substr(md5($cacheId), 0, 2) . '/';
$obCache = new CPHPCache;
if($obCache->InitCache($cacheTtl, $cacheId, $cacheDir))
{
$arUsers = $obCache->GetVars();
}
else
{
$obCache->StartDataCache();
if(defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->StartTagCache($cacheDir);
}
if (
$bExtranet
&& CModule::IncludeModule("extranet")
)
{
$extranetSiteId = CExtranet::GetExtranetSiteID();
// get all extranet groups and set tags
$rsSonetGroup = CSocNetUserToGroup::GetList(
array(),
array(
"USER_ID" => $USER->GetId(),
"GROUP_SITE_ID" => $extranetSiteId
),
false,
false,
array("GROUP_ID")
);
while($arSonetGroup = $rsSonetGroup->Fetch())
{
$CACHE_MANAGER->RegisterTag("sonet_user2group_G".$arSonetGroup["GROUP_ID"]);
}
$CACHE_MANAGER->RegisterTag("sonet_user2group_U".$USER->GetId());
$arUsers = Array();
$arExtranetUsers = CExtranet::GetMyGroupsUsersFull($extranetSiteId, $bSelf);
foreach($arExtranetUsers as $arUserTmp)
{
if (!empty($arUserTmp['UF_DEPARTMENT']))
{
continue;
}
$sName = trim(CUser::FormatName(empty($arParams["NAME_TEMPLATE"]) ? CSite::GetNameFormat(false) : $arParams["NAME_TEMPLATE"], $arUserTmp, true, false));
if (empty($sName))
{
$sName = $arUserTmp["~LOGIN"];
}
$arFileTmp = CFile::ResizeImageGet(
$arUserTmp["PERSONAL_PHOTO"],
$avatarSize,
BX_RESIZE_IMAGE_EXACT,
false
);
$arUsers['U'.$arUserTmp["ID"]] = Array(
'id' => 'U'.$arUserTmp["ID"],
'entityId' => $arUserTmp["ID"],
'email' => $arUserTmp["EMAIL"] ? $arUserTmp["EMAIL"] : '',
'name' => $sName,
'avatar' => empty($arFileTmp['src'])? '': $arFileTmp['src'],
'desc' => self::getUserDescription($arUserTmp, [
'showEmail' => !empty($arParams["ONLY_WITH_EMAIL"])
]),
);
if (defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->RegisterTag("USER_NAME_".intval($arUserTmp["ID"]));
}
}
}
else
{
$bExtranetInstalled = CModule::IncludeModule("extranet");
CSocNetTools::InitGlobalExtranetArrays();
if (
!isset($filter['UF_DEPARTMENT'])
&& $bExtranetInstalled
)
{
$arUserIdVisible = CExtranet::GetMyGroupsUsersSimple(SITE_ID);
}
$order = [ 'LAST_NAME' => 'ASC' ];
$arUsers = Array();
$className = (BitrixMainLoader::includeModule('intranet') ? 'BitrixIntranetUserTable' : 'BitrixMainUserTable');
$res = $className::getList([
'order' => $order,
'filter' => $filter,
'select' => $select
]);
while ($arUser = $res->fetch())
{
foreach($arUser as $key => $value)
{
if (is_string($value))
{
$arUser[$key] = BitrixMainTextHtmlFilter::encode($value);
}
}
if (
!$bSelf
&& is_object($USER)
&& $userId == $arUser["ID"]
)
{
continue;
}
if (
!isset($filter['UF_DEPARTMENT']) // all users
&& $bExtranetInstalled
)
{
if (
isset($arUser["UF_DEPARTMENT"])
&& $arUser['EXTERNAL_AUTH_ID'] !== 'email'
&& (
$arUser['EXTERNAL_AUTH_ID'] !== 'bot'
|| !isset($arParams['ALLOW_BOTS'])
|| $arParams['ALLOW_BOTS'] !== true
)
&& (
!is_array($arUser["UF_DEPARTMENT"])
|| empty($arUser["UF_DEPARTMENT"])
|| (int)$arUser["UF_DEPARTMENT"][0] <= 0
) // extranet user
&& (
empty($arUserIdVisible)
|| !is_array($arUserIdVisible)
|| !in_array($arUser["ID"], $arUserIdVisible)
)
)
{
continue;
}
}
$sName = trim(CUser::FormatName(empty($arParams["NAME_TEMPLATE"]) ? CSite::GetNameFormat(false) : $arParams["NAME_TEMPLATE"], $arUser, true, false));
if (empty($sName))
{
$sName = htmlspecialcharsBack($arUser["LOGIN"]);
}
$arFileTmp = CFile::ResizeImageGet(
$arUser["PERSONAL_PHOTO"],
$avatarSize,
BX_RESIZE_IMAGE_EXACT,
false
);
$arUsers['U'.$arUser["ID"]] = Array(
'id' => 'U'.$arUser["ID"],
'entityId' => $arUser["ID"],
'email' => $arUser["EMAIL"],
'name' => $sName,
'avatar' => empty($arFileTmp['src'])? '': $arFileTmp['src'],
'desc' => self::getUserDescription($arUser, [
'showEmail' => !empty($arParams["ONLY_WITH_EMAIL"])
]),
'isExtranet' => (isset($arUser['USER_TYPE']) && $arUser['USER_TYPE'] === 'extranet' ? "Y" : "N"),
'isEmail' => ($arUser['EXTERNAL_AUTH_ID'] === 'email' ? 'Y' : 'N'),
'isCrmEmail' => (
$arUser['EXTERNAL_AUTH_ID'] === 'email'
&& !empty($arUser['UF_USER_CRM_ENTITY'])
? 'Y'
: 'N'
)
);
if ($arUser['EXTERNAL_AUTH_ID'] === 'email')
{
$arUsers['U'.$arUser["ID"]]['email'] = $arUser['EMAIL'];
}
$arUsers['U'.$arUser["ID"]]['checksum'] = md5(serialize($arUsers['U'.$arUser["ID"]]));
if (defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->RegisterTag("USER_NAME_".intval($arUser["ID"]));
}
}
}
if (defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->RegisterTag("USER_NAME");
if (!empty($filter['UF_DEPARTMENT']))
{
$CACHE_MANAGER->RegisterTag('intranet_department_'.$filter['UF_DEPARTMENT']);
}
$CACHE_MANAGER->EndTagCache();
}
$obCache->EndDataCache($arUsers);
}
return $arUsers;
}