static function getList($params)
{
$params = is_array($params)? $params: Array();
if (!isset($params['CURRENT_USER']) && is_object($GLOBALS['USER']))
{
$params['CURRENT_USER'] = $GLOBALS['USER']->GetID();
}
$params['CURRENT_USER'] = intval($params['CURRENT_USER']);
$userId = $params['CURRENT_USER'];
if ($userId <= 0)
{
return false;
}
$enableLimit = false;
if (isset($params['OFFSET']))
{
$filterLimit = intval($params['LIMIT']);
$filterLimit = $filterLimit <= 0? self::FILTER_LIMIT: $filterLimit;
$filterOffset = intval($params['OFFSET']);
$enableLimit = true;
}
else
{
$filterLimit = false;
$filterOffset = false;
}
$ormParams = self::getListParams($params);
if (is_null($ormParams))
{
return false;
}
$filter = $ormParams['filter'];
$filter['ACTIVE'] = 'Y';
$intranetInstalled = BitrixMainLoader::includeModule('intranet');
$voximplantInstalled = BitrixMainLoader::includeModule('voximplant');
$select = array(
"ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "EXTERNAL_AUTH_ID", "WORK_PHONE", "PERSONAL_PHONE", "PERSONAL_MOBILE", "TIME_ZONE_OFFSET", "ACTIVE", "LAST_ACTIVITY_DATE",
"COLOR" => "ST.COLOR", "STATUS" => "ST.STATUS", "IDLE" => "ST.IDLE", "MOBILE_LAST_DATE" => "ST.MOBILE_LAST_DATE",
);
if($intranetInstalled)
{
$select[] = 'UF_PHONE_INNER';
$select[] = 'UF_DEPARTMENT';
}
if ($voximplantInstalled)
{
$select[] = 'UF_VI_PHONE';
}
$ormParams = Array(
'select' => $select,
'filter' => $filter,
'runtime' => Array(
new BitrixMainEntityReferenceField(
'ST',
'BitrixImModelStatusTable',
array(
"=ref.USER_ID" => "this.ID",
),
array("join_type"=>"LEFT")
)
),
);
if ($enableLimit)
{
$ormParams['offset'] = $filterOffset;
$ormParams['limit'] = $filterLimit;
}
$orm = BitrixMainUserTable::getList($ormParams);
$bots = BitrixImBot::getListCache();
$users = array();
while ($user = $orm->fetch())
{
if (CIMContactList::IsExtranet($user))
{
continue;
}
$color = false;
if (isset($user['COLOR']) && $user['COLOR'] <> '')
{
$color = BitrixImColor::getColor($user['COLOR']);
}
if (!$color)
{
$color = CIMContactList::GetUserColor($user["ID"], $user['PERSONAL_GENDER'] == 'M'? 'M': 'F');
}
$users[$user["ID"]] = Array(
'ID' => (int)$user["ID"],
'NAME' => BitrixImUser::formatFullNameFromDatabase($user),
'FIRST_NAME' => BitrixImUser::formatNameFromDatabase($user),
'LAST_NAME' => $user['LAST_NAME'],
'WORK_POSITION' => $user['WORK_POSITION'],
'COLOR' => $color,
'AVATAR' => CIMChat::GetAvatarImage($user["PERSONAL_PHOTO"], 200, false),
'GENDER' => $user['PERSONAL_GENDER'] == 'F'? 'F': 'M',
'BIRTHDAY' => $user['PERSONAL_BIRTHDAY'] instanceof BitrixMainTypeDate? $user['PERSONAL_BIRTHDAY']->format('d-m'): false,
'EXTRANET' => CIMContactList::IsExtranet($user),
'NETWORK' => $user['EXTERNAL_AUTH_ID'] == CIMContactList::NETWORK_AUTH_ID || $user['EXTERNAL_AUTH_ID'] == BitrixImBot::EXTERNAL_AUTH_ID && $bots[$user["ID"]]['TYPE'] == BitrixImBot::TYPE_NETWORK,
'BOT' => $user['EXTERNAL_AUTH_ID'] == BitrixImBot::EXTERNAL_AUTH_ID,
'CONNECTOR' => $user['EXTERNAL_AUTH_ID'] == "imconnector",
'EXTERNAL_AUTH_ID' => $user['EXTERNAL_AUTH_ID']? $user['EXTERNAL_AUTH_ID']: 'default',
'STATUS' => $user['STATUS'],
'IDLE' => $user['IDLE'] instanceof BitrixMainTypeDateTime? $user['IDLE']: false,
'LAST_ACTIVITY_DATE' => $user['MOBILE_LAST_DATE'] instanceof BitrixMainTypeDateTime? $user['MOBILE_LAST_DATE']: false,
'MOBILE_LAST_DATE' => $user['LAST_ACTIVITY_DATE'] instanceof BitrixMainTypeDateTime? $user['LAST_ACTIVITY_DATE']: false,
'DEPARTMENTS' => is_array($user['UF_DEPARTMENT']) && !empty($user['UF_DEPARTMENT'])? $user['UF_DEPARTMENT']: [],
'ABSENT' => CIMContactList::formatAbsentResult($user["ID"]),
);
if ($params['HR_PHOTO'])
{
$users[$user["ID"]]['AVATAR_HR'] = $users[$user["ID"]]['avatar'];
}
if ($voximplantInstalled)
{
$user["WORK_PHONE"] = CVoxImplantPhone::Normalize($user["WORK_PHONE"]);
if ($user["WORK_PHONE"])
{
$users[$user["ID"]]['PHONES']['WORK_PHONE'] = $user['WORK_PHONE'];
}
$user["PERSONAL_MOBILE"] = CVoxImplantPhone::Normalize($user["PERSONAL_MOBILE"]);
if ($user["PERSONAL_MOBILE"])
{
$users[$user["ID"]]['PHONES']['PERSONAL_MOBILE'] = $user['PERSONAL_MOBILE'];
}
$user["PERSONAL_PHONE"] = CVoxImplantPhone::Normalize($user["PERSONAL_PHONE"]);
if ($user["PERSONAL_PHONE"])
{
$users[$user["ID"]]['PHONES']['PERSONAL_PHONE'] = $user['PERSONAL_PHONE'];
}
$user["UF_PHONE_INNER"] = preg_replace("/[^0-9#*]/i", "", $user["UF_PHONE_INNER"]);
if ($user["UF_PHONE_INNER"])
{
$users[$user["ID"]]['PHONES']['INNER_PHONE'] = $user["UF_PHONE_INNER"];
}
}
else
{
$users[$user["ID"]]['PHONES']['WORK_PHONE'] = $user['WORK_PHONE'];
$users[$user["ID"]]['PHONES']['PERSONAL_MOBILE'] = $user['PERSONAL_MOBILE'];
$users[$user["ID"]]['PHONES']['PERSONAL_PHONE'] = $user['PERSONAL_PHONE'];
$users[$user["ID"]]['PHONES']['INNER_PHONE'] = $user["UF_PHONE_INNER"];
}
}
if ($params['JSON'])
{
foreach ($users as $key => $userData)
{
foreach ($userData as $field => $value)
{
if ($value instanceof BitrixMainTypeDateTime)
{
$users[$key][$field] = date('c', $value->getTimestamp());
}
else if (is_string($value) && $value && is_string($field) && in_array($field, Array('AVATAR', 'AVATAR_HR')) && mb_strpos($value, 'http') !== 0)
{
$users[$key][$field] = BitrixImCommon::getPublicDomain().$value;
}
else if (is_array($value))
{
$users[$key][$field] = array_change_key_case($value, CASE_LOWER);
}
}
$users[$key] = array_change_key_case($users[$key], CASE_LOWER);;
}
}
return $users;
}