3namespace Bitrix\Im\V2\Entity\User;
6use Bitrix\Im\Model\StatusTable;
7use Bitrix\Im\Model\UserTable;
8use Bitrix\Im\V2\Integration\Extranet\CollaberService;
9use Bitrix\Main\Application;
10use Bitrix\Main\Data\Cache;
11use Bitrix\Main\Loader;
12use Bitrix\Main\ORM\Fields\Relations\Reference;
13use Bitrix\Main\ORM\Query\Join;
18 private const COMMON_SELECT_FIELD = [
37 'COLOR' =>
'ST.COLOR',
38 'STATUS' =>
'ST.STATUS',
43 private function __construct()
49 if (isset(self::$instance))
51 return self::$instance;
54 self::$instance =
new static();
56 return self::$instance;
62 $cachedUser = $cache->getVars();
63 if ($cachedUser !==
false)
70 if ($userData ===
null)
85 if ($userData[
'IS_BOT'])
89 if (CollaberService::getInstance()->isCollaber((
int)$userData[
'ID']))
93 if ($userData[
'IS_EXTRANET'])
107 $avatar = \CIMChat::GetAvatarImage($userData[
'PERSONAL_PHOTO']) ?:
'';
109 $preparedUserData = $userData;
110 $preparedUserData[
'COLOR'] = $this->
getColor($userData);
111 $preparedUserData[
'STATUS'] = $userData[
'STATUS'] ??
null;
114 $preparedUserData[
'BIRTHDAY'] =
115 $userData[
'PERSONAL_BIRTHDAY'] instanceof \Bitrix\Main\Type\Date
116 ? $userData[
'PERSONAL_BIRTHDAY']->format(
'd-m')
119 $preparedUserData[
'AVATAR'] = $avatar !==
'/bitrix/js/im/images/blank.gif' ? $avatar :
'';
120 $preparedUserData[
'AVATAR_HR'] = $avatar;
121 $preparedUserData[
'AVATAR_ID'] = (int)$userData[
'PERSONAL_PHOTO'];
122 $preparedUserData[
'IS_EXTRANET'] = $this->
isExtranet($userData);
123 $preparedUserData[
'IS_NETWORK'] = $this->
isNetwork($userData);
124 $preparedUserData[
'IS_BOT'] = $this->
isBot($userData);
125 $preparedUserData[
'IS_CONNECTOR'] = $this->
isConnector($userData);
126 $preparedUserData[
'LANGUAGE_ID'] = $userData[
'LANGUAGE_ID'] ??
null;
128 if (Loader::includeModule(
'voximplant'))
130 $preparedUserData[
'WORK_PHONE'] = CVoxImplantPhone::Normalize($userData[
'WORK_PHONE']) ?:
null;
131 $preparedUserData[
'PERSONAL_MOBILE'] = CVoxImplantPhone::Normalize($userData[
'PERSONAL_MOBILE']) ?:
null;
132 $preparedUserData[
'PERSONAL_PHONE'] = CVoxImplantPhone::Normalize($userData[
'PERSONAL_PHONE']) ?:
null;
135 if (Loader::includeModule(
'intranet'))
137 $innerPhone = preg_replace(
"/[^0-9\#\*]/i",
"", $userData[
'UF_PHONE_INNER'] ??
'');
140 $preparedUserData[
'INNER_PHONE'] = $innerPhone;
144 return $preparedUserData;
149 $preparedUserData = $userData;
150 $preparedUserData[
'ABSENT'] = \CIMContactList::formatAbsentResult((
int)$userData[
'ID']) ?:
null;
152 return $preparedUserData;
157 $query = UserTable::query()
158 ->setSelect(self::COMMON_SELECT_FIELD)
161 ->registerRuntimeField(
166 Join::on(
'this.ID',
'ref.USER_ID'),
167 [
'join_type' => Join::TYPE_LEFT]
172 if (Loader::includeModule(
'intranet'))
175 ->addSelect(
'UF_DEPARTMENT')
176 ->addSelect(
'UF_PHONE_INNER')
177 ->addSelect(
'UF_ZOOM')
178 ->addSelect(
'UF_SKYPE')
179 ->addSelect(
'UF_SKYPE_LINK')
183 if (Loader::includeModule(
'voximplant'))
185 $query->addSelect(
'UF_VI_PHONE');
188 return $query->fetch() ?:
null;
193 return \CIMContactList::IsExtranet(
$params);
198 $bots = \Bitrix\Im\Bot::getListCache();
199 $isNetworkUser =
$params[
'EXTERNAL_AUTH_ID'] === \CIMContactList::NETWORK_AUTH_ID;
201 $this->
isBot($params)
202 && $bots[
$params[
"ID"]][
'TYPE'] === \Bitrix\Im\Bot::TYPE_NETWORK
205 return $isNetworkUser || $isNetworkBot;
210 return $params[
'EXTERNAL_AUTH_ID'] === \Bitrix\Im\Bot::EXTERNAL_AUTH_ID;
215 return $params[
'EXTERNAL_AUTH_ID'] ===
'imconnector';
220 return $userData[
'COLOR']
231 if (isset($replaceColor[
$code]))
242 return in_array(
$params[
'EXTERNAL_AUTH_ID'], UserTable::filterExternalUserTypes([
'bot']),
true);
251 $cacheTTL = defined(
"BX_COMP_MANAGED_CACHE") ? 18144000 : 1800;
252 $cacheId =
"user_data_{$id}";
253 $cacheDir = $this->getCacheDir($id);
255 $cache->initCache($cacheTTL, $cacheId, $cacheDir);
263 $id = (int)$userData[
'ID'];
265 $taggedCache->startTagCache($this->getCacheDir($id));
266 $taggedCache->registerTag(
"USER_NAME_{$id}");
267 $taggedCache->endTagCache();
271 private function getCacheDir(
int $id): string
273 $cacheSubDir = $id % 100;
274 $cacheSubSubDir = ($id % 10000) / 100;
276 return "/bx/imc/userdata_v8/{$cacheSubDir}/{$cacheSubSubDir}/{$id}";
static getReplaceColors()
static getCodeByNumber($number)
static formatFullNameFromDatabase($fields)
static formatNameFromDatabase($fields)
static clearStaticCache()
prepareNonCachedUserData(array $userData)
getColorByUserIdAndGender(int $id, string $gender)
isConnector(array $params)
isExtranet(array $params)
prepareUserData(array $userData)
getColor(array $userData)
initUser(array $userData)
isExternal(array $params)
saveInCache(Cache $cache, array $userData)
static initByArray(array $userData)
endDataCache($vars=false)
startDataCache($TTL=false, $uniqueString=false, $initDir=false, $vars=array(), $baseDir='cache')
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']