- Модуль: rest
- Путь к файлу: ~/bitrix/modules/rest/lib/api/user.php
- Класс: BitrixRestApiUser
- Вызов: User::userGet
static function userGet($query, $nav = 0, CRestServer $server)
{
global $USER;
static::checkAllowedFields();
static $moduleAdminList = false;
$query = array_change_key_case($query, CASE_UPPER);
$sort = $query['SORT'];
$order = $query['ORDER'];
$adminMode = false;
//getting resize preset before user data preparing
$resizePresets = [
"small"=>["width"=>150, "height" => 150],
"medium"=>["width"=>300, "height" => 300],
"large"=>["width"=>1000, "height" => 1000],
];
$presetName = $query["IMAGE_RESIZE"];
$resize = ($presetName && $resizePresets[$presetName]
? $resizePresets[$presetName]
: false);
if (isset($query['ADMIN_MODE']) && $query['ADMIN_MODE'])
{
if ($moduleAdminList === false && Loader::includeModule('socialnetwork'))
{
$moduleAdminList = BitrixSocialnetworkUser::getModuleAdminList(array(SITE_ID, false));
}
if (is_array($moduleAdminList))
{
$adminMode = (array_key_exists($USER->getID(), $moduleAdminList));
}
}
$allowedUserFields = static::getAllowedUserFields($server->getAuthScope());
$allowedUserFields[] = 'IS_ONLINE';
$allowedUserFields[] = 'HAS_DEPARTAMENT';
$allowedUserFields[] = 'NAME_SEARCH';
$allowedUserFields[] = 'EXTERNAL_AUTH_ID';
if ($server->getMethod() == "user.search")
{
$allowedUserFields[] = 'FIND';
$allowedUserFields[] = 'UF_DEPARTMENT_NAME';
$allowedUserFields[] = 'CONFIRM_CODE';
}
if (isset($query['FILTER']) && is_array($query['FILTER']))
{
/**
* The following code is a mistake
* but it must be here to save backward compatibility
*/
$query = array_change_key_case($query['FILTER'], CASE_UPPER);
}
$filter = self::prepareUserFilter(
$query,
$allowedUserFields,
[
'HAS_DEPARTAMENT',
'NAME_SEARCH',
'FIND'
]
);
if (isset($filter['NAME_SEARCH']) || isset($filter['FIND']))
{
$nameSearch = isset($filter['NAME_SEARCH'])? $filter['NAME_SEARCH']: $filter['FIND'];
unset($filter['NAME_SEARCH']);
unset($filter['FIND']);
$filter = array_merge($filter, BitrixMainUserUtils::getUserSearchFilter(Array(
'FIND' => $nameSearch
)));
}
else if ($server->getMethod() == "user.search")
{
$previousFilter = $filter;
unset($filter['NAME']);
unset($filter['LAST_NAME']);
unset($filter['SECOND_NAME']);
unset($filter['WORK_POSITION']);
unset($filter['UF_DEPARTMENT_NAME']);
$filter = array_merge($filter, BitrixMainUserUtils::getUserSearchFilter(Array(
'NAME' => $previousFilter['NAME'],
'LAST_NAME' => $previousFilter['LAST_NAME'],
'SECOND_NAME' => $previousFilter['SECOND_NAME'],
'WORK_POSITION' => $previousFilter['WORK_POSITION'],
'UF_DEPARTMENT_NAME' => $previousFilter['UF_DEPARTMENT_NAME'],
)));
}
if (
!$adminMode
&& Loader::includeModule("extranet")
)
{
$filteredUserIDs = CExtranet::getMyGroupsUsersSimple(CExtranet::getExtranetSiteID());
$filteredUserIDs[] = $USER->getID();
if (CExtranet::isIntranetUser())
{
if (
!isset($filter["ID"])
|| !Loader::includeModule('socialnetwork')
|| !CSocNetUser::IsCurrentUserModuleAdmin(CSite::getDefSite(), false)
)
{
$filter[] = array(
'LOGIC' => 'OR',
'!UF_DEPARTMENT' => false,
'ID' => $filteredUserIDs
);
}
}
else
{
$filter["ID"] = (isset($filter["ID"]) ? array_intersect((is_array($filter["ID"]) ? $filter["ID"] : array($filter["ID"])), $filteredUserIDs) : $filteredUserIDs);
}
}
if (array_key_exists('HAS_DEPARTAMENT', $filter))
{
if ($filter['HAS_DEPARTAMENT'] === 'Y')
{
$filter[] = [
'LOGIC' => 'AND',
'!UF_DEPARTMENT' => false,
];
}
unset($filter['HAS_DEPARTAMENT']);
}
$filter['=IS_REAL_USER'] = 'Y';
$getListClassName = 'BitrixMainUserTable';
if (Loader::includeModule('intranet'))
{
$getListClassName = 'BitrixIntranetUserTable';
}
$getListMethodName = 'getList';
$navParams = self::getNavData($nav, true);
$querySort = [];
if ($sort && $order)
{
$querySort[$sort] = $order;
}
$allowedFields = static::getAllowedUserFields($server->getAuthScope());
$dbRes = $getListClassName::$getListMethodName(
[
'order' => $querySort,
'filter' => $filter,
'select' => $allowedFields,
'limit' => $navParams['limit'],
'offset' => $navParams['offset'],
'data_doubling' => false,
'count_total' => $nav !== -1,
]
);
$result = [];
$files = [];
while ($userInfo = $dbRes->fetch())
{
$result[] = self::getUserData($userInfo, $allowedFields);
if ($userInfo['PERSONAL_PHOTO'] > 0)
{
$files[] = $userInfo['PERSONAL_PHOTO'];
}
}
if (count($files) > 0)
{
$files = CRestUtil::getFile($files, $resize);
foreach ($result as $key => $userInfo)
{
if ($userInfo['PERSONAL_PHOTO'] > 0)
{
$result[$key]['PERSONAL_PHOTO'] = $files[$userInfo['PERSONAL_PHOTO']];
}
}
}
if ($result)
{
$count = 0;
if ($nav !== -1)
{
try
{
$count = $dbRes->getCount();
}
catch (ObjectPropertyException $exception)
{
}
}
return self::setNavData(
$result,
[
'count' => $count,
'offset' => $navParams['offset']
]
);
}
return $result;
}