58 $bLoadUsers = isset(
$arParams[
'LOAD_USERS']) &&
$arParams[
'LOAD_USERS'] ==
'N'?
false:
true;
59 $bLoadChats = isset(
$arParams[
'LOAD_CHATS']) &&
$arParams[
'LOAD_CHATS'] ==
'N'?
false:
true;
62 if(defined(
"BX_COMP_MANAGED_CACHE"))
67 $bBusShowAll = !
IsModuleInstalled(
'intranet') && COption::GetOptionInt(
'im',
'contact_list_show_all_bus');
69 $bIntranetEnable =
false;
70 if(CModule::IncludeModule(
'intranet'))
72 $bIntranetEnable =
true;
78 $arUserInGroup =
array();
79 $arExtranetUsers =
array();
84 foreach (
$groups as $groupId => $group)
86 $arUserInGroup[$groupId] = Array(
'id' => $groupId,
'users' => $group[
'USERS']);
87 foreach ($group[
'USERS'] as $groupUserId)
89 $arExtranetUsers[$groupUserId] = $groupUserId;
91 $arUserSG[$groupId] =
array(
94 'name' => $group[
'NAME']
96 $arGroups[$groupId] = $arUserSG[$groupId];
100 $bFriendEnable =
false;
101 if ((!CModule::IncludeModule(
'extranet') || !CExtranet::IsExtranetSite()) && CModule::IncludeModule(
'socialnetwork') && CSocNetUser::IsFriendsAllowed())
103 $bFriendEnable =
true;
104 $dbFriends =
CSocNetUserRelations::GetList(
array(),
array(
"USER_ID" =>
$USER->GetID(),
"RELATION" =>
SONET_RELATIONS_FRIEND),
false,
false,
array(
"ID",
"FIRST_USER_ID",
"SECOND_USER_ID",
"DATE_CREATE",
"DATE_UPDATE",
"INITIATED_BY"));
107 while ($arFriends = $dbFriends->GetNext(
true,
false))
109 $friendId = $pref = (intval(
$USER->GetID()) == $arFriends[
"FIRST_USER_ID"]) ? $arFriends[
"SECOND_USER_ID"] : $arFriends[
"FIRST_USER_ID"];
110 $arFriendUsers[$friendId] = $friendId;
131 '=CONFIRM_CODE' =>
false,
132 '!=EXTERNAL_AUTH_ID' => \
Bitrix\
Im\
Model\UserTable::filterExternalUserTypes([\
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID])
134 if (CModule::IncludeModule(
'extranet'))
136 if(!CExtranet::IsIntranetUser())
138 $filter[
'=ID'] = array_merge(Array(
$USER->GetId()), $arExtranetUsers);
146 if (!$bIntranetEnable && !$bBusShowAll)
149 if (!empty($arFriendUsers))
153 if (!empty($arExtranetUsers))
160 $bCLCacheEnable =
false;
161 if ($bIntranetEnable && (!$bFriendEnable || $bBusShowAll))
162 $bCLCacheEnable =
true;
164 if ($bCLCacheEnable && CModule::IncludeModule(
'extranet') && !CExtranet::IsIntranetUser())
165 $bCLCacheEnable =
false;
167 $bVoximplantEnable = CModule::IncludeModule(
'voximplant');
169 $bOpenChatEnabled = CIMMessenger::CheckEnableOpenChat();
172 $nameTemplateSite = CSite::GetNameFormat(
false);
173 $cache_id =
'im_contact_list_v29_'.$nameTemplate.
'_'.$nameTemplateSite.(!empty($arExtranetUsers)?
'_'.$USER->GetID():
'').$bVoximplantEnable.$bColorEnabled.$bOpenChatEnabled;
175 $cache_dir =
'/bx/imc/contact';
177 $arUsersToGroup =
array();
178 $arUserInGroupStructure =
array();
181 if($bCLCacheEnable && $obCLCache->InitCache($ttl, $cache_id, $cache_dir))
183 $tmpVal = $obCLCache->GetVars();
184 $arUsers = $tmpVal[
'USERS'];
185 $arPhones = $tmpVal[
'PHONES'];
186 $arUsersToGroup = $tmpVal[
'USER_TO_GROUP'];
187 $arUserInGroupStructure = $tmpVal[
'USER_IN_GROUP'];
190 $arOnline = CIMStatus::GetList();
191 foreach ($arUsers as
$userId => $value)
197 $arUsers[
$userId][
'status'] =
'online';
198 $arUsers[
$userId][
'idle'] =
false;
199 $arUsers[
$userId][
'mobile_last_date'] =
false;
200 $arUsers[
$userId][
'desktop_last_date'] =
false;
202 $arUsers[
$userId][
'last_activity_date'] = isset($arOnline[
'users'][
$userId])? $arOnline[
'users'][
$userId][
'last_activity_date']:
false;
204 if (isset($arOnline[
'users'][
$userId][
'color']) && $arOnline[
'users'][
$userId][
'color'])
206 $arUsers[
$userId][
'color'] = $arOnline[
'users'][
$userId][
'color'];
213 "ID",
"LAST_NAME",
"NAME",
"LOGIN",
"PERSONAL_PHOTO",
"SECOND_NAME",
"PERSONAL_BIRTHDAY",
"WORK_POSITION",
"PERSONAL_GENDER",
"EXTERNAL_AUTH_ID",
"WORK_PHONE",
"PERSONAL_PHONE",
"PERSONAL_MOBILE",
"ACTIVE",
"LAST_ACTIVITY_DATE",
214 "COLOR" =>
"ST.COLOR",
"STATUS" =>
"ST.STATUS",
"IDLE" =>
"ST.IDLE",
"MOBILE_LAST_DATE" =>
"ST.MOBILE_LAST_DATE",
"DESKTOP_LAST_DATE" =>
"ST.DESKTOP_LAST_DATE",
224 if ($bVoximplantEnable)
235 '\Bitrix\Im\Model\StatusTable',
237 "=ref.USER_ID" =>
"this.ID",
239 array(
"join_type"=>
"LEFT")
242 'order' => Array(
'LAST_NAME' =>
'ASC')
245 $bots = \Bitrix\Im\Bot::getListCache();
247 while ($arUser = $orm->fetch())
249 $arUser = CIMStatus::prepareLastDate($arUser);
252 if(is_array($arUser[
"UF_DEPARTMENT"]) && !empty($arUser[
"UF_DEPARTMENT"]))
254 foreach($arUser[
"UF_DEPARTMENT"] as $dep_id)
256 if (isset($arUserInGroupStructure[$dep_id]))
257 $arUserInGroupStructure[$dep_id][
'users'][] = $arUser[
"ID"];
259 $arUserInGroupStructure[$dep_id] = Array(
'id' => $dep_id,
'users' => Array($arUser[
"ID"]));
275 if ($arUser[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID)
277 else if (isset($arExtranetUsers[$arUser[
"ID"]]))
279 elseif (isset($arFriendUsers[$arUser[
"ID"]]))
287 foreach ($arUser as
$key => $value)
292 $color =
self::GetUserColor($arUser[
"ID"], $arUser[
'PERSONAL_GENDER'] ==
'M'?
'M':
'F');
293 if (isset($arUser[
'COLOR']) && $arUser[
'COLOR'] <>
'')
299 $color =
self::GetUserColor($arUser[
"ID"], $arUser[
'PERSONAL_GENDER'] ==
'M'?
'M':
'F');
302 $arUsersToGroup[$arUser[
'ID']] = $arUser[
"UF_DEPARTMENT"];
303 $arUser[
'PERSONAL_BIRTHDAY'] = $arUser[
'PERSONAL_BIRTHDAY'] instanceof \Bitrix\Main\Type\Date? $arUser[
'PERSONAL_BIRTHDAY']->format(
'd-m'):
false;
304 $arUser[
'LAST_ACTIVITY_DATE'] = $arUser[
'LAST_ACTIVITY_DATE'] instanceof \Bitrix\Main\Type\DateTime? $arUser[
'LAST_ACTIVITY_DATE']:
false;
306 $userExternalAuthId = $arUser[
'EXTERNAL_AUTH_ID'] ??
'default';
307 $userItemId = $arUser[
"ITEM_ID"] ??
null;
308 $userById = $arUser[
"ID"] ??
null;
310 $botByUserItemId = $bots[$userItemId] ??
null;
311 $botByUserId = $bots[$userById] ??
null;
313 $botClassName = $botByUserItemId[
'CLASS'] ??
null;
314 $botType = $botByUserId[
'TYPE'] ??
null;
316 $userExternalAuthId == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID
317 && $botType == \
Bitrix\
Im\Bot::TYPE_NETWORK
319 $botClassName === \
Bitrix\ImBot\
Bot\Support24::class
320 || $botClassName === \
Bitrix\ImBot\
Bot\Partner24::class
321 || $botClassName === \
Bitrix\ImBot\
Bot\SaleSupport24::class
325 $userExternalAuthId =
'support24';
328 $arUsers[$arUser[
"ID"]] = Array(
329 'id' => $arUser[
"ID"],
331 'active' => $arUser[
'ACTIVE'] ==
'Y',
333 'last_name' => $arUser[
'LAST_NAME'],
334 'work_position' => $arUser[
'WORK_POSITION'],
336 'avatar' => CIMChat::GetAvatarImage($arUser[
"PERSONAL_PHOTO"]),
337 'birthday' => $arUser[
'PERSONAL_BIRTHDAY'],
338 'gender' => $arUser[
'PERSONAL_GENDER'] ==
'F'?
'F':
'M',
339 'phone_device' => $bVoximplantEnable && $arUser[
'UF_VI_PHONE'] ==
'Y',
340 'extranet' => self::IsExtranet($arUser),
341 'network' => ($userExternalAuthId === self::NETWORK_AUTH_ID) || ($userExternalAuthId === \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID) && ($botType === \
Bitrix\
Im\Bot::TYPE_NETWORK),
342 'bot' => $userExternalAuthId === \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID,
344 'external_auth_id' => $userExternalAuthId,
347 'status' =>
'online',
349 'last_activity_date' => $arUser[
'LAST_ACTIVITY_DATE'],
352 'mobile_last_date' =>
false,
353 'desktop_last_date' =>
false,
354 'absent' => self::formatAbsentResult($arUser[
"ID"]),
358 if (!empty($arUser[
'UF_ZOOM']))
360 $services[
'zoom'] = $arUser[
'UF_ZOOM'];
362 if (!empty($arUser[
'UF_SKYPE_LINK']))
364 $services[
'skype'] = $arUser[
'UF_SKYPE_LINK'];
366 else if (!empty($arUser[
'UF_SKYPE']))
368 $services[
'skype'] =
'skype://'.$arUser[
'UF_SKYPE'];
371 $arUsers[$arUser[
"ID"]][
'services'] = empty($services)?
null: array_change_key_case($services, CASE_LOWER);
373 if ($bVoximplantEnable)
375 $result = CVoxImplantPhone::Normalize($arUser[
"WORK_PHONE"]);
378 $arPhones[$arUser[
"ID"]][
'WORK_PHONE'] = $arUser[
'WORK_PHONE'];
380 $result = CVoxImplantPhone::Normalize($arUser[
"PERSONAL_MOBILE"]);
383 $arPhones[$arUser[
"ID"]][
'PERSONAL_MOBILE'] = $arUser[
'PERSONAL_MOBILE'];
385 $result = CVoxImplantPhone::Normalize($arUser[
"PERSONAL_PHONE"]);
388 $arPhones[$arUser[
"ID"]][
'PERSONAL_PHONE'] = $arUser[
'PERSONAL_PHONE'];
390 $result = preg_replace(
"/[^0-9\#\*]/i",
"", $arUser[
"UF_PHONE_INNER"]);
393 $arPhones[$arUser[
"ID"]][
'INNER_PHONE'] =
$result;
398 $arPhones[$arUser[
"ID"]][
'WORK_PHONE'] = $arUser[
'WORK_PHONE'];
399 $arPhones[$arUser[
"ID"]][
'PERSONAL_MOBILE'] = $arUser[
'PERSONAL_MOBILE'];
400 $arPhones[$arUser[
"ID"]][
'PERSONAL_PHONE'] = $arUser[
'PERSONAL_PHONE'];
401 $arPhones[$arUser[
"ID"]][
'INNER_PHONE'] = $arUser[
'UF_PHONE_INNER'];
407 if(defined(
"BX_COMP_MANAGED_CACHE"))
411 $CACHE_MANAGER->RegisterTag($bVoximplantEnable?
"USER_CARD":
"USER_NAME");
414 if($obCLCache->StartDataCache())
416 $obCLCache->EndDataCache(
array(
418 'USER_TO_GROUP' => $arUsersToGroup,
419 'USER_IN_GROUP' => $arUserInGroupStructure,
420 'PHONES' => $arPhones
427 if (is_array($arUsersToGroup[
$USER->GetID()]))
429 foreach($arUsersToGroup[
$USER->GetID()] as $dep_id)
437 foreach ($arUserInGroupStructure as
$key =>
$val)
441 unset($arUsersToGroup, $arUserInGroupStructure);
448 $bOpenChatEnabled = CIMMessenger::CheckEnableOpenChat();
449 $cache_id =
'im_chats_v10_'.$USER->GetID().
'_'.$bColorEnabled.
'_'.$bOpenChatEnabled;
451 $cache_dir =
'/bx/imc/chats';
453 if($obCLCache->InitCache($ttl, $cache_id, $cache_dir))
455 $tmpVal = $obCLCache->GetVars();
456 $arChats = $tmpVal[
'CHATS'];
461 $arChats = CIMChat::GetChatData(Array(
462 'SKIP_PRIVATE' =>
'Y',
464 'USER_ID' =>
$USER->GetID()
469 $chatsOpen = CIMChat::GetOpenChatData(Array(
470 'USER_ID' =>
$USER->GetID()
473 foreach ($chatsOpen[
'chat'] as
$key => $value)
475 $arChats[
'chat'][
$key] = $value;
477 foreach ($chatsOpen[
'userInChat'] as
$key => $value)
479 $arChats[
'userInChat'][
$key] = $value;
481 foreach ($chatsOpen[
'userCallStatus'] as
$key => $value)
483 $arChats[
'userCallStatus'][
$key] = $value;
485 foreach ($chatsOpen[
'userChatBlockStatus'] as
$key => $value)
487 $arChats[
'userChatBlockStatus'][
$key] = $value;
491 if($obCLCache->StartDataCache())
493 $obCLCache->EndDataCache(
array(
500 $arContactList = Array(
'users' => $arUsers,
'groups' =>
$arGroups,
'chats' => $arChats[
'chat'],
'lines' => $arChats[
'lines'],
'phones' => $arPhones,
'userInGroup' => $arUserInGroup);
502 foreach(
GetModuleEvents(
"im",
"OnAfterContactListGetList",
true) as $arEvent)
505 return $arContactList;
531 $searchText = trim($searchText);
532 if (mb_strlen($searchText) < 3)
534 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"IM_CL_SEARCH_EMPTY"),
"ERROR_SEARCH_EMPTY");
539 $nameTemplateSite = CSite::GetNameFormat(
false);
543 $filter[
"=CONFIRM_CODE"] =
false;
544 $filter[
"=IS_REAL_USER"] =
"Y";
549 if (!$bIntranetEnable)
559 "ID",
"LAST_NAME",
"NAME",
"SECOND_NAME",
"LOGIN",
"PERSONAL_PHOTO",
"PERSONAL_BIRTHDAY",
"WORK_POSITION",
"PERSONAL_GENDER",
"EXTERNAL_AUTH_ID",
"ACTIVE",
"UF_IM_SEARCH",
"LAST_ACTIVITY_DATE",
560 "COLOR" =>
"ST.COLOR",
"STATUS" =>
"ST.STATUS",
"IDLE" =>
"ST.IDLE",
"MOBILE_LAST_DATE" =>
"ST.MOBILE_LAST_DATE",
"DESKTOP_LAST_DATE" =>
"ST.DESKTOP_LAST_DATE",
564 if ($bVoximplantEnable)
567 $bots = \Bitrix\Im\Bot::getListCache();
575 '\Bitrix\Im\Model\StatusTable',
577 "=ref.USER_ID" =>
"this.ID",
579 array(
"join_type"=>
"LEFT")
582 'order' => Array(
'LAST_NAME' =>
'ASC')
585 while ($arUser = $orm->fetch())
587 $arUser[
'PERSONAL_BIRTHDAY'] = $arUser[
'PERSONAL_BIRTHDAY'] instanceof \Bitrix\Main\Type\Date? $arUser[
'PERSONAL_BIRTHDAY']->format(
'd-m'):
false;
588 $arUser[
'LAST_ACTIVITY_DATE'] = $arUser[
'LAST_ACTIVITY_DATE'] instanceof \Bitrix\Main\Type\DateTime? $arUser[
'LAST_ACTIVITY_DATE']:
false;
590 $arUser = CIMStatus::prepareLastDate($arUser);
592 $userExternalAuthId = $arUser[
'EXTERNAL_AUTH_ID']? $arUser[
'EXTERNAL_AUTH_ID']:
'default';
594 $userExternalAuthId == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID
595 && $bots[$arUser[
"ID"]][
'TYPE'] == \
Bitrix\
Im\Bot::TYPE_NETWORK
597 $bots[$arUser[
"ITEM_ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\Support24::class
598 || $bots[$arUser[
"ITEM_ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\Partner24::class
599 || $bots[$arUser[
"ITEM_ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\SaleSupport24::class
603 $userExternalAuthId =
'support24';
606 $arUsers[$arUser[
"ID"]] = Array(
607 'id' => $arUser[
"ID"],
609 'active' => $arUser[
'ACTIVE'] ==
'Y',
611 'last_name' => $arUser[
'LAST_NAME'],
612 'work_position' => $arUser[
'WORK_POSITION'],
613 'color' => self::GetUserColor($arUser[
"ID"], $arUser[
'PERSONAL_GENDER'] ==
'M'?
'M':
'F'),
614 'avatar' => CIMChat::GetAvatarImage($arUser[
"PERSONAL_PHOTO"]),
615 'birthday' => $arUser[
'PERSONAL_BIRTHDAY'],
616 'gender' => $arUser[
'PERSONAL_GENDER'] ==
'F'?
'F':
'M',
617 'phone_device' => $bVoximplantEnable && $arUser[
'UF_VI_PHONE'] ==
'Y',
618 'extranet' => self::IsExtranet($arUser),
619 'network' => $arUser[
'EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID || $arUser[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID && $bots[$arUser[
"ID"]][
'TYPE'] == \
Bitrix\
Im\Bot::TYPE_NETWORK,
620 'bot' => $arUser[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID,
622 'search_mark' => $searchText,
623 'external_auth_id' => $userExternalAuthId,
626 'status' =>
'online',
628 'last_activity_date' => $arUser[
'LAST_ACTIVITY_DATE'],
631 'mobile_last_date' =>
false,
632 'desktop_last_date' =>
false,
633 'absent' => self::formatAbsentResult($arUser[
"ID"]),
637 if (CModule::IncludeModule(
'imbot'))
639 $result = \Bitrix\ImBot\Bot\Network::search($searchText);
644 $id =
'networkLines'.$arLine[
"CODE"];
645 $arUsers[$id] = Array(
650 'avatar' => empty($arLine[
'LINE_AVATAR'])?
'/bitrix/js/im/images/blank.gif': $arLine[
'LINE_AVATAR'],
653 'phone_device' =>
false,
659 'network_id' => $arLine[
"CODE"],
660 'search_mark' => $searchText,
661 'external_auth_id' =>
'network',
662 'status' =>
'online',
664 'last_activity_date' =>
false,
665 'mobile_last_date' =>
false,
666 'desktop_last_date' =>
false,
673 return Array(
'users' => $arUsers);
682 $toUserId = intval(
$arParams[
'TO_USER_ID']);
685 if(
IsModuleInstalled(
'intranet') && CModule::IncludeModule(
'extranet') && !CExtranet::IsIntranetUser())
688 if (CModule::IncludeModule(
"socialnetwork"))
692 if(defined(
"BX_COMP_MANAGED_CACHE"))
697 $cache_id =
'im_user_sg_'.$USER->GetID();
699 $cache_dir =
'/bx/imc/sonet';
701 if($obSGCache->InitCache($ttl, $cache_id, $cache_dir))
703 $tmpVal = $obSGCache->GetVars();
704 $bResult = in_array($toUserId, $tmpVal[
'EXTRANET_USERS']);
708 if(defined(
"BX_COMP_MANAGED_CACHE"))
711 $dbUsersInGroup = CSocNetUserToGroup::GetList(
714 "USER_ID" =>
$USER->GetID(),
716 "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(),
717 "GROUP_ACTIVE" =>
"Y",
718 "GROUP_CLOSED" =>
"N"
722 array(
"ID",
"GROUP_ID",
"GROUP_NAME")
725 $arUserSocNetGroups = Array();
727 while (
$ar = $dbUsersInGroup->GetNext(
true,
false))
729 $arUserSocNetGroups[] =
$ar[
"GROUP_ID"];
730 $arUserSG[
'SG'.$ar[
'GROUP_ID']] =
array(
731 'id' =>
'SG'.
$ar[
'GROUP_ID'],
735 if(defined(
"BX_COMP_MANAGED_CACHE"))
742 $arExtranetUsers = Array();
743 $arUserInGroup = Array();
744 if (
count($arUserSocNetGroups) > 0)
746 $dbUsersInGroup = CSocNetUserToGroup::GetList(
749 "GROUP_ID" => $arUserSocNetGroups,
751 "USER_ACTIVE" =>
"Y",
752 "USER_CONFIRM_CODE" =>
false
756 array(
"ID",
"USER_ID",
"GROUP_ID")
759 while (
$ar = $dbUsersInGroup->GetNext(
true,
false))
761 if(
$USER->GetID() !=
$ar[
"USER_ID"])
763 $arExtranetUsers[
$ar[
"USER_ID"]] =
$ar[
"USER_ID"];
765 if (isset($arUserInGroup[
"SG".
$ar[
"GROUP_ID"]]))
766 $arUserInGroup[
"SG".$ar[
"GROUP_ID"]][
'users'][] =
$ar[
"USER_ID"];
768 $arUserInGroup[
"SG".$ar[
"GROUP_ID"]] = Array(
'id' =>
"SG".
$ar[
"GROUP_ID"],
'users' => Array(
$ar[
"USER_ID"]));
772 if(defined(
"BX_COMP_MANAGED_CACHE"))
774 if($obSGCache->StartDataCache())
776 $obSGCache->EndDataCache(
array(
777 'USER_SG' => $arUserSG,
778 'EXTRANET_USERS' => $arExtranetUsers,
779 'USER_IN_GROUP' => $arUserInGroup
782 $bResult = in_array($toUserId, $arExtranetUsers);
802 $toChatId = intval(
$arParams[
'TO_CHAT_ID']);
803 $fromUserId = intval(
$USER->GetID());
805 $groupTypes = CIMChat::implodeTypesForQuery(CIMChat::getGroupTypes());
810 WHERE R.USER_ID = ".$fromUserId.
"
811 AND R.MESSAGE_TYPE IN ({$groupTypes})
812 AND R.CHAT_ID = ".$toChatId.
"";
824 $paramsDepartment =
$arParams[
'DEPARTMENT'] ??
null;
825 $paramsHrPhoto =
$arParams[
'HR_PHOTO'] ??
null;
826 $paramsPhones =
$arParams[
'PHONES'] ??
null;
827 $paramsUseCache =
$arParams[
'USE_CACHE'] ??
null;
828 $paramsShowOnline =
$arParams[
'SHOW_ONLINE'] ??
null;
829 $paramsExtraFields =
$arParams[
'EXTRA_FIELDS'] ??
null;
830 $paramsCacheTtl =
$arParams[
'CACHE_TTL'] ??
null;
832 $getDepartment = !($paramsDepartment ===
'N');
833 $getHrPhoto = $paramsHrPhoto ===
'Y';
835 $useCache = !($paramsUseCache ===
'N');
836 $showOnline = !($paramsShowOnline ===
'N');
837 $extraFields = $paramsExtraFields ===
'Y';
844 if (intval($value) > 0)
860 $nameTemplateSite = CSite::GetNameFormat(
false);
862 $bIntranetEnable =
false;
864 $bIntranetEnable =
true;
871 $obCache = new \CPHPCache;
872 $cache_ttl = (int)$paramsCacheTtl;
875 $cache_ttl = defined(
"BX_COMP_MANAGED_CACHE") ? 18144000 : 1800;
879 $cache_id =
'user_data_v40_'.$uid.
'_'.$nameTemplate.
'_'.$nameTemplateSite.
'_'.$extraFields.
'_'.$getPhones.
'_'.$getDepartment.
'_'.$bIntranetEnable.
'_'.$bVoximplantEnable.
'_'.LANGUAGE_ID.
'_'.$bColorEnabled;
880 $cache_dir =
'/bx/imc/userdata/' . mb_substr(
$uid, 0, 2) .
'/' . mb_substr(
$uid, 2, 2) .
'/' .
$uid;
881 if ($obCache->initCache($cache_ttl, $cache_id, $cache_dir))
883 $arCacheResult = $obCache->getVars();
886 $onlineUserId = array_keys(array_filter($arCacheResult[
'users'],
function(
$user) {
887 return !
$user[
'bot'];
889 if (!empty($onlineUserId))
891 $arOnline = CIMStatus::GetList(Array(
'ID' => $onlineUserId));
895 foreach ($arCacheResult[
'users'] as
$userId => $value)
903 $arCacheResult[
'users'][
$userId][
'status'] =
'online';
904 $arCacheResult[
'users'][
$userId][
'idle'] =
false;
905 $arCacheResult[
'users'][
$userId][
'mobile_last_date'] =
false;
906 $arCacheResult[
'users'][
$userId][
'desktop_last_date'] =
false;
907 $arCacheResult[
'users'][
$userId][
'last_activity_date'] = isset($arOnline[
'users'][
$userId])? $arOnline[
'users'][
$userId][
'last_activity_date']:
false;
908 $arCacheResult[
'users'][
$userId][
'absent'] = isset($arOnline[
'users'][
$userId])? $arOnline[
'users'][
$userId][
'absent']:
false;
911 if ($getHrPhoto && !isset($arCacheResult[
'hrphoto']))
913 $arCacheResult[
'hrphoto'][
$userId] = $arCacheResult[
'users'][
$userId][
'avatar'];
918 $converter =
new Converter(Converter::TO_SNAKE | Converter::TO_LOWER | Converter::KEYS);
921 $arCacheResult[
'users'][
$userId][
'bot_data'] = !empty($botData)
922 ? $converter->process($botData)
928 $arCacheResult[
'users'][
$userId][
'bot_data'] =
null;
931 return $arCacheResult;
935 $arSelect =
array(
"ID",
"LAST_NAME",
"NAME",
"EMAIL",
"LOGIN",
"PERSONAL_PHOTO",
"SECOND_NAME",
"PERSONAL_BIRTHDAY",
"WORK_POSITION",
"PERSONAL_GENDER",
"EXTERNAL_AUTH_ID",
"PERSONAL_WWW",
"ACTIVE",
"LAST_ACTIVITY_DATE");
938 $arSelect[] =
'WORK_PHONE';
939 $arSelect[] =
'PERSONAL_PHONE';
940 $arSelect[] =
'PERSONAL_MOBILE';
944 $arSelect[] =
'UF_ZOOM';
945 $arSelect[] =
'UF_SKYPE';
946 $arSelect[] =
'UF_SKYPE_LINK';
947 $arSelect[] =
'UF_PHONE_INNER';
948 $arSelect[] =
'UF_DEPARTMENT';
950 if ($bVoximplantEnable)
952 $arSelect[] =
'UF_VI_PHONE';
956 $arUserInGroup =
array();
958 $arHrPhoto =
array();
963 $query->registerRuntimeField(
'',
new \
Bitrix\
Main\
Entity\ReferenceField(
'ref',
'Bitrix\Im\Model\StatusTable',
array(
'=this.ID' =>
'ref.USER_ID')));
964 $query->addSelect(
'ref.COLOR',
'COLOR')
965 ->addSelect(
'ref.STATUS',
'STATUS')
966 ->addSelect(
'ref.IDLE',
'IDLE')
967 ->addSelect(
'ref.MOBILE_LAST_DATE',
'MOBILE_LAST_DATE')
968 ->addSelect(
'ref.DESKTOP_LAST_DATE',
'DESKTOP_LAST_DATE');
970 foreach ($arSelect as $value)
972 $query->addSelect($value);
978 $resultQuery =
$query->exec();
980 $bots = \Bitrix\Im\Bot::getListCache();
982 while ($arUser = $resultQuery->fetch())
984 $arUser = CIMStatus::prepareLastDate($arUser);
986 foreach ($arUser as
$key => $value)
991 $arSource[$arUser[
"ID"]][
"PERSONAL_PHOTO"] = $arUser[
"PERSONAL_PHOTO"];
993 $color =
self::GetUserColor($arUser[
"ID"], $arUser[
'PERSONAL_GENDER'] ==
'M'?
'M':
'F');
994 if (isset($arUser[
'COLOR']) && $arUser[
'COLOR'] <>
'')
1000 $color =
self::GetUserColor($arUser[
"ID"], $arUser[
'PERSONAL_GENDER'] ==
'M'?
'M':
'F');
1003 $arUser[
'PERSONAL_BIRTHDAY'] = $arUser[
'PERSONAL_BIRTHDAY'] instanceof \Bitrix\Main\Type\Date? $arUser[
'PERSONAL_BIRTHDAY']->format(
'd-m'):
false;
1004 $arUser[
'LAST_ACTIVITY_DATE'] = $arUser[
'LAST_ACTIVITY_DATE'] instanceof \Bitrix\Main\Type\DateTime? $arUser[
'LAST_ACTIVITY_DATE']:
false;
1006 $userExternalAuthId = $arUser[
'EXTERNAL_AUTH_ID']? $arUser[
'EXTERNAL_AUTH_ID']:
'default';
1008 $userExternalAuthId == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID
1009 && $bots[$arUser[
"ID"]][
'TYPE'] == \
Bitrix\
Im\Bot::TYPE_NETWORK
1011 $bots[$arUser[
"ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\Support24::class
1012 || $bots[$arUser[
"ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\Partner24::class
1013 || $bots[$arUser[
"ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\SaleSupport24::class
1017 $userExternalAuthId =
'support24';
1022 $arUsers[$arUser[
"ID"]] = Array(
1023 'id' => $arUser[
"ID"],
1025 'active' => $arUser[
'ACTIVE'] ==
'Y',
1027 'last_name' => $arUser[
'LAST_NAME'],
1028 'work_position' => $arUser[
'WORK_POSITION'],
1030 'avatar' => CIMChat::GetAvatarImage($arUser[
"PERSONAL_PHOTO"]),
1031 'avatar_id' => $arUser[
"PERSONAL_PHOTO"],
1032 'birthday' => $arUser[
'PERSONAL_BIRTHDAY'],
1033 'gender' => $arUser[
'PERSONAL_GENDER'] ==
'F'?
'F':
'M',
1034 'phone_device' => $bVoximplantEnable && $arUser[
'UF_VI_PHONE'] ==
'Y',
1035 'phones' => $bVoximplantEnable && $arUser[
'UF_VI_PHONE'] ==
'Y',
1036 'extranet' => self::IsExtranet($arUser),
1037 'network' => $arUser[
'EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID || $arUser[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID && $bots[$arUser[
"ID"]][
'TYPE'] == \
Bitrix\
Im\Bot::TYPE_NETWORK,
1038 'bot' => $arUser[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID,
1039 'connector' => $arUser[
'EXTERNAL_AUTH_ID'] ==
"imconnector",
1041 'external_auth_id' => $userExternalAuthId,
1044 'status' =>
'online',
1046 'last_activity_date' => $arUser[
'LAST_ACTIVITY_DATE']?:
false,
1049 'mobile_last_date' =>
false,
1050 'desktop_last_date' =>
false,
1051 'departments' => $getDepartment && !empty($arUser[
"UF_DEPARTMENT"]) && is_array($arUser[
"UF_DEPARTMENT"])? array_values($arUser[
"UF_DEPARTMENT"]): Array(),
1052 'absent' => self::formatAbsentResult($arUser[
"ID"]),
1053 'type' => $userV2->getType()->value,
1057 if (!empty($arUser[
'UF_ZOOM']))
1059 $services[
'zoom'] = $arUser[
'UF_ZOOM'];
1061 if (!empty($arUser[
'UF_SKYPE_LINK']))
1063 $services[
'skype'] = $arUser[
'UF_SKYPE_LINK'];
1065 else if (!empty($arUser[
'UF_SKYPE']))
1067 $services[
'skype'] =
'skype://'.$arUser[
'UF_SKYPE'];
1070 $arUsers[$arUser[
"ID"]][
'services'] = empty($services)?
null: array_change_key_case($services, CASE_LOWER);
1074 $arUsers[$arUser[
"ID"]][
'website'] = $arUser[
'PERSONAL_WWW'];
1075 $arUsers[$arUser[
"ID"]][
'email'] = $arUser[
'EMAIL'];
1078 foreach($arUsers[$arUser[
"ID"]][
"departments"] as $dep_id)
1080 if (isset($arUserInGroup[$dep_id]))
1081 $arUserInGroup[$dep_id][
'users'][] = $arUser[
"ID"];
1083 $arUserInGroup[$dep_id] = Array(
'id' => $dep_id,
'users' => Array($arUser[
"ID"]));
1088 $arHrPhoto[$arUser[
"ID"]] = $arUsers[$arUser[
"ID"]][
'avatar'];
1093 if (CModule::IncludeModule(
'voximplant'))
1095 $result = CVoxImplantPhone::Normalize($arUser[
"WORK_PHONE"]);
1098 $arPhones[$arUser[
"ID"]][
'WORK_PHONE'] = $arUser[
'WORK_PHONE'];
1100 $result = CVoxImplantPhone::Normalize($arUser[
"PERSONAL_MOBILE"]);
1103 $arPhones[$arUser[
"ID"]][
'PERSONAL_MOBILE'] = $arUser[
'PERSONAL_MOBILE'];
1105 $result = CVoxImplantPhone::Normalize($arUser[
"PERSONAL_PHONE"]);
1108 $arPhones[$arUser[
"ID"]][
'PERSONAL_PHONE'] = $arUser[
'PERSONAL_PHONE'];
1110 $result = preg_replace(
"/[^0-9\#\*]/i",
"", $arUser[
"UF_PHONE_INNER"]);
1113 $arPhones[$arUser[
"ID"]][
'INNER_PHONE'] =
$result;
1118 $arPhones[$arUser[
"ID"]][
'WORK_PHONE'] = $arUser[
'WORK_PHONE'];
1119 $arPhones[$arUser[
"ID"]][
'PERSONAL_MOBILE'] = $arUser[
'PERSONAL_MOBILE'];
1120 $arPhones[$arUser[
"ID"]][
'PERSONAL_PHONE'] = $arUser[
'PERSONAL_PHONE'];
1121 $arPhones[$arUser[
"ID"]][
'INNER_PHONE'] = $arUser[
'UF_PHONE_INNER'];
1124 if (isset($arPhones[$arUser[
"ID"]]))
1126 $arUsers[$arUser[
"ID"]][
'phones'] = array_change_key_case($arPhones[$arUser[
"ID"]], CASE_LOWER);
1131 $result =
array(
'users' => $arUsers,
'hrphoto' => $arHrPhoto,
'userInGroup' => $arUserInGroup,
'phones' => $arPhones,
'source' => $arSource);
1135 $cacheTag =
array();
1136 if($obCache->StartDataCache())
1138 if(defined(
"BX_COMP_MANAGED_CACHE"))
1146 $tag =
'USER_NAME_'.intval($id);
1147 if(!in_array($tag, $cacheTag))
1156 $tag =
'USER_NAME_'.intval(
$arParams[
'ID']);
1161 $obCache->EndDataCache(
$result);
1172 $converter =
new Converter(Converter::TO_SNAKE | Converter::TO_LOWER | Converter::KEYS);
1175 $result[
'users'][
$userId][
'bot_data'] = (!empty($botData)) ? $converter->process($botData) :
null;
1567 $bLoadUnreadMessage = isset(
$arParams[
'LOAD_UNREAD_MESSAGE']) &&
$arParams[
'LOAD_UNREAD_MESSAGE'] ==
'Y'?
true:
false;
1568 $bTimeZone = isset(
$arParams[
'USE_TIME_ZONE']) &&
$arParams[
'USE_TIME_ZONE'] ==
'N'?
false:
true;
1569 $bSmiles = isset(
$arParams[
'USE_SMILES']) &&
$arParams[
'USE_SMILES'] ==
'N'?
false:
true;
1576 $arRecent = Array();
1579 $generalChatId = CIMChat::GetGeneralChatId();
1584 CTimeZone::Disable();
1592 M.AUTHOR_ID as M_AUTHOR_ID,
1594 M.CHAT_ID as M_CHAT_ID,
1595 M.MESSAGE as M_MESSAGE,
1596 ".$DB->DatetimeToTimestampFunction(
'R.DATE_UPDATE').
" as M_DATE_CREATE,
1598 C.AUTHOR_ID as C_OWNER_ID,
1599 C.ENTITY_TYPE as CHAT_ENTITY_TYPE,
1600 C.ENTITY_ID as CHAT_ENTITY_ID,
1601 C.ENTITY_DATA_1 as CHAT_ENTITY_DATA_1,
1602 C.ENTITY_DATA_2 as CHAT_ENTITY_DATA_2,
1603 C.ENTITY_DATA_3 as CHAT_ENTITY_DATA_3,
1604 C.AVATAR as C_AVATAR,
1605 C.CALL_NUMBER as C_CALL_NUMBER,
1606 C.EXTRANET as CHAT_EXTRANET,
1607 C.COLOR as CHAT_COLOR,
1608 C.TYPE as CHAT_TYPE,
1614 ".
$DB->DatetimeToTimestampFunction(
'U.PERSONAL_BIRTHDAY').
" as PERSONAL_BIRTHDAY,
1615 ".
$DB->DatetimeToTimestampFunction(
'U.LAST_ACTIVITY_DATE').
" as LAST_ACTIVITY_DATE,
1622 ".
$DB->DatetimeToTimestampFunction(
'ST.IDLE').
" as IDLE,
1623 ".
$DB->DatetimeToTimestampFunction(
'ST.MOBILE_LAST_DATE').
" as MOBILE_LAST_DATE,
1624 ".
$DB->DatetimeToTimestampFunction(
'ST.DESKTOP_LAST_DATE').
" as DESKTOP_LAST_DATE,
1626 C1.NOTIFY_BLOCK as RELATION_NOTIFY_BLOCK,
1627 C1.USER_ID as RELATION_USER_ID
1628 ".($isOperator?
", S.ID as LINES_ID, S.STATUS as LINES_STATUS":
"").
"
1632 LEFT JOIN b_im_status ST ON R.ITEM_TYPE = '".
IM_MESSAGE_PRIVATE.
"' AND R.ITEM_ID = ST.USER_ID
1633 LEFT JOIN b_im_chat C ON R.ITEM_TYPE != '".
IM_MESSAGE_PRIVATE.
"' AND R.ITEM_ID = C.ID
1634 LEFT JOIN b_im_message M ON R.ITEM_MID = M.ID
1635 LEFT JOIN b_im_relation C1 ON C1.CHAT_ID = C.ID AND C1.USER_ID = ".
$userId.
"
1636 ".($isOperator?
"LEFT JOIN b_imopenlines_session S ON R.ITEM_OLID > 0 AND S.ID = R.ITEM_OLID":
"").
"
1639 CTimeZone::Enable();
1641 $enableOpenChat = CIMMessenger::CheckEnableOpenChat();
1642 $bots = \Bitrix\Im\Bot::getListCache();
1644 $arMessageId = Array();
1652 $arRes[
'CHAT_EXTRANET'] = trim(
$arRes[
'CHAT_EXTRANET']);
1656 if (!$enableOpenChat)
1665 else if (in_array(
$arRes[
'ITEM_TYPE'], CIMChat::getGroupTypes()))
1667 if (intval(
$arRes[
'RID']) <= 0)
1673 $arMessageId[] =
$arRes[
'M_ID'];
1675 if (
$arRes[
'M_ID'] > 0 &&
$arRes[
'M_DATE_CREATE']+2592000 < time())
1680 $itemId =
$arRes[
'ITEM_ID'];
1682 'TYPE' =>
$arRes[
'ITEM_TYPE'],
1685 'chatId' =>
$arRes[
'M_CHAT_ID'],
1686 'senderId' =>
$arRes[
'M_AUTHOR_ID'],
1689 'pinned' =>
$arRes[
'PINNED'] ==
'Y',
1693 $item[
'MESSAGE'][
'text'] = preg_replace(
'#\-{54}.+?\-{54}#s',
" [".
GetMessage(
'IM_QUOTE').
"] ", strip_tags(str_replace(
array(
"<br>",
"<br/>",
"<br />",
"#BR#"), Array(
" ",
" ",
" ",
" "), $item[
'MESSAGE'][
'text']),
"<img>"));
1697 $arUsers[] =
$arRes[
'ITEM_ID'];
1703 $userExternalAuthId =
$arRes[
'EXTERNAL_AUTH_ID']?
$arRes[
'EXTERNAL_AUTH_ID']:
'default';
1705 $userExternalAuthId == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID
1706 && $bots[
$arRes[
"ITEM_ID"]][
'TYPE'] == \
Bitrix\
Im\Bot::TYPE_NETWORK
1708 $bots[
$arRes[
"ITEM_ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\Support24::class
1709 || $bots[
$arRes[
"ITEM_ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\Partner24::class
1710 || $bots[
$arRes[
"ITEM_ID"]][
'CLASS'] == \
Bitrix\ImBot\
Bot\SaleSupport24::class
1714 $userExternalAuthId =
'support24';
1717 $item[
'USER'] = Array(
1718 'id' =>
$arRes[
'ITEM_ID'],
1720 'active' =>
$arRes[
'ACTIVE'] ==
'Y',
1722 'last_name' =>
$arRes[
'LAST_NAME'],
1723 'work_position' =>
$arRes[
'WORK_POSITION'],
1724 'color' => self::GetUserColor(
$arRes[
"ID"],
$arRes[
'PERSONAL_GENDER'] ==
'M'?
'M':
'F'),
1725 'avatar' => CIMChat::GetAvatarImage(
$arRes[
"PERSONAL_PHOTO"]),
1726 'birthday' =>
$arRes[
'PERSONAL_BIRTHDAY'],
1727 'gender' =>
$arRes[
'PERSONAL_GENDER'] ==
'F'?
'F':
'M',
1728 'extranet' =>
false,
1729 'network' =>
$arRes[
'EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID ||
$arRes[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID && $bots[
$arRes[
"ITEM_ID"]][
'TYPE'] == \
Bitrix\
Im\Bot::TYPE_NETWORK,
1730 'bot' =>
$arRes[
'EXTERNAL_AUTH_ID'] == \
Bitrix\
Im\Bot::EXTERNAL_AUTH_ID,
1731 'phone_device' =>
false,
1733 'external_auth_id' => $userExternalAuthId,
1734 'status' =>
$arRes[
'STATUS'],
1735 'idle' =>
$arRes[
'IDLE'],
1736 'last_activity_date' =>
$arRes[
'LAST_ACTIVITY_DATE'],
1737 'mobile_last_date' =>
$arRes[
'MOBILE_LAST_DATE'],
1738 'desktop_last_date' =>
$arRes[
'DESKTOP_LAST_DATE'],
1739 'absent' => self::formatAbsentResult(
$arRes[
"ITEM_ID"]),
1741 if (!$item[
'MESSAGE'][
'text'])
1743 $item[
'MESSAGE'][
'text'] =
$arRes[
'WORK_POSITION'];
1751 if (
$arRes[
"CHAT_ENTITY_TYPE"] ==
'LINES')
1755 $item[
'LINES'] = Array(
1756 'ID' =>
$arRes[
'LINES_ID'],
1757 'STATUS' =>
$arRes[
'LINES_STATUS']
1761 else if ($generalChatId ==
$arRes[
'M_CHAT_ID'])
1763 $arRes[
"CHAT_ENTITY_TYPE"] =
'GENERAL';
1766 $muteList = Array();
1767 if (
$arRes[
'RELATION_NOTIFY_BLOCK'] ==
'Y')
1769 $muteList = Array(
$arRes[
'RELATION_USER_ID'] =>
true);
1772 $itemId =
'chat'.$itemId;
1773 $item[
'CHAT'] = Array(
1774 'id' =>
$arRes[
'ITEM_ID'],
1777 'avatar' => CIMChat::GetAvatarImage(
$arRes[
"C_AVATAR"]),
1778 'extranet' =>
$arRes[
"CHAT_EXTRANET"] ==
""?
"": (
$arRes[
"CHAT_EXTRANET"] ==
"Y"?
true:
false),
1779 'owner' =>
$arRes[
"C_OWNER_ID"],
1780 'type' => $chatType,
1781 'entity_type' =>
$arRes[
"CHAT_ENTITY_TYPE"],
1782 'entity_id' =>
$arRes[
"CHAT_ENTITY_ID"],
1783 'entity_data_1' => trim(
$arRes[
"CHAT_ENTITY_DATA_1"]),
1784 'entity_data_2' => trim(
$arRes[
"CHAT_ENTITY_DATA_2"]),
1785 'entity_data_3' => trim(
$arRes[
"CHAT_ENTITY_DATA_3"]),
1786 'mute_list' => $muteList,
1787 'message_type' =>
$arRes[
'CHAT_TYPE'],
1788 'call_number' =>
$arRes[
"C_CALL_NUMBER"]
1791 $arRecent[$itemId] = $item;
1793 $params = CIMMessageParam::Get($arMessageId);
1794 foreach ($arRecent as
$key => $value)
1796 if (isset(
$params[$value[
'MESSAGE'][
'id']]) && is_array(
$params[$value[
'MESSAGE'][
'id']][
'FILE_ID']))
1798 if (
count(
$params[$value[
'MESSAGE'][
'id']][
'FILE_ID']) > 0 && trim($arRecent[
$key][
'MESSAGE'][
'text']) ==
'')
1800 $arRecent[
$key][
'MESSAGE'][
'text'] =
"[".GetMessage(
'IM_FILE').
"]";
1803 $arRecent[
$key][
'MESSAGE'][
'params'] =
$params[$value[
'MESSAGE'][
'id']];
1808 if ($bIntranetEnable || $bVoximplantEnable)
1810 $arUserPhone = Array();
1811 $arUserDepartment = Array();
1813 $arSelectParams = Array();
1814 if ($bIntranetEnable)
1815 $arSelectParams[] =
'UF_DEPARTMENT';
1816 if ($bVoximplantEnable)
1817 $arSelectParams[] =
'UF_VI_PHONE';
1819 $dbUsers = CUser::GetList([
'last_name'=>
'asc'],
'', Array(
'ID' =>
$userId.
"|".implode(
'|', $arUsers)), Array(
'FIELDS' => Array(
"ID"),
'SELECT' => $arSelectParams));
1820 while ($arUser = $dbUsers->GetNext(
true,
false))
1822 $arUserPhone[$arUser[
'ID']] = $arUser[
'UF_VI_PHONE'] ==
'Y';
1826 foreach ($arRecent as
$key => $value)
1828 if (isset($value[
'USER']))
1830 $arRecent[
$key][
'USER'][
'extranet'] = $arUserDepartment[$value[
'USER'][
'id']];
1831 $arRecent[
$key][
'USER'][
'phone_device'] = $arUserPhone[$value[
'USER'][
'id']];
1836 if ($bLoadUnreadMessage)
1842 $ar = $CIMMessage->GetUnreadMessage(Array(
1843 'LOAD_DEPARTMENT' =>
'N',
1845 'GROUP_BY_CHAT' =>
'Y',
1846 'USE_TIME_ZONE' => $bTimeZone?
'Y':
'N',
1847 'USE_SMILES' => $bSmiles?
'Y':
'N'
1851 if (!isset($arRecent[
$data[
'senderId']]))
1853 $arRecent[
$data[
'senderId']] = Array(
1855 'USER' =>
$ar[
'users'][
$data[
'senderId']]
1858 $arRecent[
$data[
'senderId']][
'MESSAGE'] = Array(
1859 'id' =>
$data[
'id'],
1860 'senderId' =>
$data[
'senderId'],
1861 'date' =>
$data[
'date'],
1862 'text' => preg_replace(
'#\-{54}.+?\-{54}#s',
" [".
GetMessage(
'IM_QUOTE').
"] ", strip_tags(str_replace(
array(
"<br>",
"<br/>",
"<br />",
"#BR#"), Array(
" ",
" ",
" ",
" "),
$data[
'text']),
"<img>"))
1865 $arRecent[
$data[
'senderId']][
'COUNTER'] =
$data[
'counter'];
1868 $CIMChat =
new CIMChat(
false, Array(
1872 $ar = $CIMChat->GetUnreadMessage(Array(
1874 'GROUP_BY_CHAT' =>
'Y',
1877 'USE_SMILES' => $bSmiles?
'Y':
'N',
1878 'USE_TIME_ZONE' => $bTimeZone?
'Y':
'N'
1882 if (!isset($arRecent[
'chat'.
$data[
'recipientId']]))
1884 $arRecent[
'chat'.$data[
'recipientId']] = Array(
1886 'CHAT' =>
$ar[
'chat']
1889 $arRecent[
'chat'.$data[
'recipientId']][
'MESSAGE'] = Array(
1890 'id' =>
$data[
'id'],
1891 'senderId' =>
$data[
'senderId'],
1892 'date' =>
$data[
'date'],
1893 'text' =>
$data[
'text']
1895 $arRecent[
'chat'.$data[
'recipientId']][
'COUNTER'] =
$data[
'counter'];
1899 if (!empty($arRecent))
1904 'COUNTER' =>
array(SORT_NUMERIC, SORT_DESC),
1905 'MESSAGE' =>
array(SORT_NUMERIC, SORT_DESC)
1908 'COUNTER' =>
array(__CLASS__,
'GetRecentListSortCounter'),
1909 'MESSAGE' =>
array(__CLASS__,
'GetRecentListSortMessage'),