static function getUsersAll($arParams = [])
{
global $DB, $USER;
static $arFieldsStatic = array(
"ID" => Array("FIELD" => "U.ID", "TYPE" => "int"),
"ACTIVE" => Array("FIELD" => "U.ACTIVE", "TYPE" => "string"),
"NAME" => Array("FIELD" => "U.NAME", "TYPE" => "string"),
"EMAIL" => Array("FIELD" => "U.EMAIL", "TYPE" => "string"),
"LAST_NAME" => Array("FIELD" => "U.LAST_NAME", "TYPE" => "string"),
"SECOND_NAME" => Array("FIELD" => "U.SECOND_NAME", "TYPE" => "string"),
"LOGIN" => Array("FIELD" => "U.LOGIN", "TYPE" => "string"),
"PERSONAL_PHOTO" => Array("FIELD" => "U.PERSONAL_PHOTO", "TYPE" => "int"),
"WORK_POSITION" => Array("FIELD" => "U.WORK_POSITION", "TYPE" => "string"),
"CONFIRM_CODE" => Array("FIELD" => "U.CONFIRM_CODE", "TYPE" => "string"),
"PERSONAL_PROFESSION" => Array("FIELD" => "U.PERSONAL_PROFESSION", "TYPE" => "string"),
"EXTERNAL_AUTH_ID" => Array("FIELD" => "U.EXTERNAL_AUTH_ID", "TYPE" => "string")
);
$arFields = $arFieldsStatic;
$arFields["IS_ONLINE"] = Array(
"FIELD" => "IF(U.LAST_ACTIVITY_DATE > DATE_SUB(NOW(), INTERVAL " . CUser::getSecondsForLimitOnline() . " SECOND), 'Y', 'N')"
);
$currentUserId = $USER->GetId();
if (!$currentUserId)
{
return array();
}
$bExtranetEnabled = CModule::includeModule("extranet");
$bExtranetUser = (
$bExtranetEnabled
&& !CExtranet::IsIntranetUser()
);
$bExtranetWorkgroupsAllowed = (
$bExtranetEnabled
&& CExtranet::WorkgroupsAllowed()
);
$bShowAllContactsAllowed = (
$bExtranetEnabled
&& CExtranet::ShowAllContactsAllowed()
);
$rsData = CUserTypeEntity::GetList(
array("ID" => "ASC"),
array(
"FIELD_NAME" => "UF_DEPARTMENT",
"ENTITY_ID" => "USER"
)
);
if($arRes = $rsData->Fetch())
{
$UFId = (int)$arRes["ID"];
}
else
{
return array();
}
if (
$bExtranetUser
&& !$bExtranetWorkgroupsAllowed
) // limited extranet
{
return false;
}
$arOrder = array("ID" => "ASC");
$arFilter = array('ACTIVE' => 'Y');
if (
IsModuleInstalled("intranet")
|| COption::GetOptionString("main", "new_user_registration_email_confirmation", "N") === "Y"
)
{
$arFilter["CONFIRM_CODE"] = false;
}
$arExternalAuthId = self::getExternalAuthIdBlackList([
'ALLOW_BOTS' => (isset($arParams['ALLOW_BOTS']) && $arParams['ALLOW_BOTS'] === true)
]);
$arExternalAuthId[] = 'email';
$arFilter['!EXTERNAL_AUTH_ID'] = $arExternalAuthId;
$arGroupBy = false;
$arSelectFields = array("ID", "NAME", "LAST_NAME", "SECOND_NAME", "LOGIN", "PERSONAL_PHOTO", "WORK_POSITION", "PERSONAL_PROFESSION", "EXTERNAL_AUTH_ID", "EMAIL", "IS_ONLINE");
$arSqls = CSocNetGroup::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
$arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "DISTINCT", $arSqls["SELECT"]);
$strJoin = $strJoin2 = $arSqls2 = false;
if ($bExtranetEnabled)
{
if ($bExtranetWorkgroupsAllowed)
{
if (!$bExtranetUser)
{
$strJoin = "
INNER JOIN b_utm_user UM ON UM.VALUE_ID = U.ID and FIELD_ID = ".intval($UFId)."
";
$tmp = $arSqls;
$arSqls["WHERE"] .= ($arSqls["WHERE"] <> '' ? " AND " : "")."
(UM.VALUE_INT > 0)";
if (!$bShowAllContactsAllowed)
{
// select all the users (intranet and extranet from my groups)
$strJoin2 = "
INNER JOIN b_sonet_user2group UG ON UG.USER_ID = U.ID AND UG.ROLE <= '".SONET_ROLES_USER."'
INNER JOIN b_sonet_user2group UG_MY
ON UG_MY.GROUP_ID = UG.GROUP_ID AND UG_MY.USER_ID = ".(int)$currentUserId."
AND UG_MY.ROLE <= '".UserToGroupTable::ROLE_USER."'
LEFT JOIN b_utm_user UM ON UM.VALUE_ID = U.ID and FIELD_ID = ".(int)$UFId."
";
$arSqls2 = $tmp;
}
}
else
{
$strJoin = "
INNER JOIN b_sonet_user2group UG ON UG.USER_ID = U.ID AND UG.ROLE <= '".SONET_ROLES_USER."'
INNER JOIN b_sonet_user2group UG_MY
ON UG_MY.GROUP_ID = UG.GROUP_ID AND UG_MY.USER_ID = ".(int)$currentUserId."
AND UG_MY.ROLE <= '".UserToGroupTable::ROLE_USER."'
LEFT JOIN b_utm_user UM ON UM.VALUE_ID = U.ID and FIELD_ID = ".(int)$UFId."
";
}
}
elseif (!$bShowAllContactsAllowed) // limited extranet, only for intranet users, don't show extranet
{
$strJoin = "INNER JOIN b_utm_user UM ON UM.VALUE_ID = U.ID and FIELD_ID = ".intval($UFId);
$arSqls["WHERE"] .= ($arSqls["WHERE"] <> '' ? " AND " : "")."UM.VALUE_INT > 0";
}
}
$strSql =
"SELECT
".(
$bExtranetEnabled
? $arSqls["SELECT"].", CASE WHEN UM.VALUE_INT > 0 THEN 'employee' WHEN EXTERNAL_AUTH_ID = 'email' THEN 'email' ELSE 'extranet' END USER_TYPE"
: $arSqls["SELECT"].", CASE WHEN EXTERNAL_AUTH_ID = 'email' THEN 'email' ELSE 'employee' END USER_TYPE"
)."
FROM b_user U
".$arSqls["FROM"]." ";
if ($strJoin)
{
$strSql .= $strJoin." ";
}
if ($arSqls["WHERE"] <> '')
{
$strSql .= "WHERE ".$arSqls["WHERE"]." ";
}
$strSql .= "GROUP BY ID ";
if ($strJoin2)
{
$strSql .=
"UNION SELECT
".$arSqls2["SELECT"].", CASE WHEN UM.VALUE_INT > 0 THEN 'employee' WHEN EXTERNAL_AUTH_ID = 'email' THEN 'email' ELSE 'extranet' END USER_TYPE
FROM b_user U
".$arSqls2["FROM"]." ";
$strSql .= $strJoin2." ";
if ($arSqls2["WHERE"] <> '')
{
$strSql .= "WHERE ".$arSqls2["WHERE"]." ";
}
$strSql .= "GROUP BY ID ";
$strSql .= "ORDER BY ID ASC"; // cannot use alias
}
else // only without union
{
if ($arSqls["ORDERBY"] <> '')
{
$strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
}
}
//echo "!1!=".htmlspecialcharsbx($strSql)."
";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$maxCount = (IsModuleInstalled('bitrix24') ? 200 : 500);
$resultCount = 0;
$countExceeded = false;
$arUsers = array();
if ($bExtranetEnabled)
{
CSocNetTools::InitGlobalExtranetArrays();
}
while ($arUser = $dbRes->GetNext())
{
if (
$resultCount > $maxCount
&& (!isset($arParams['RETURN_FULL_LIST']) || $arParams['RETURN_FULL_LIST'] !== 'Y')
)
{
$countExceeded = true;
break;
}
$sName = trim(CUser::FormatName(empty($arParams["NAME_TEMPLATE"]) ? CSite::GetNameFormat(false) : $arParams["NAME_TEMPLATE"], $arUser, true, false));
if (empty($sName))
{
$sName = $arUser["~LOGIN"];
}
$arFileTmp = CFile::ResizeImageGet(
$arUser["PERSONAL_PHOTO"],
array('width' => 100, 'height' => 100),
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' => $arUser['WORK_POSITION'] ? $arUser['WORK_POSITION'] : ($arUser['PERSONAL_PROFESSION'] ? $arUser['PERSONAL_PROFESSION'] : ' '),
'isExtranet' => (isset($arUser['USER_TYPE']) && $arUser['USER_TYPE'] === 'extranet' ? "Y" : "N"),
'isEmail' => ($arUser['EXTERNAL_AUTH_ID'] === 'email' ? 'Y' : 'N'),
'active' => 'Y'
);
if ($arUser['EXTERNAL_AUTH_ID'] === 'email')
{
$arUsers['U'.$arUser["ID"]]['email'] = $arUser['EMAIL'];
}
$arUsers['U'.$arUser["ID"]]['checksum'] = md5(serialize($arUsers['U'.$arUser["ID"]]));
$arUsers['U'.$arUser["ID"]]['login'] = '';
$resultCount++;
}
if ($countExceeded)
{
return CSocNetLogDestination::GetUsers(
array(
"id" => array($currentUserId)
),
true
);
}
return $arUsers;
}