public static function GetFormatMessage($arParams) { $arParams['ID'] = intval($arParams['ID']); $arParams['TO_USER_ID'] = isset($arParams['TO_CHAT_ID'])? intval($arParams['TO_CHAT_ID']): intval($arParams['TO_USER_ID']); $arParams['FROM_USER_ID'] = intval($arParams['FROM_USER_ID']); $arParams['MESSAGE'] = trim($arParams['MESSAGE']); $arParams['DATE_CREATE'] = intval($arParams['DATE_CREATE']); $arParams['PARAMS'] = empty($arParams['PARAMS'])? Array(): $arParams['PARAMS']; $arUsers = CIMContactList::GetUserData(Array('ID' => isset($arParams['TO_CHAT_ID'])? $arParams['FROM_USER_ID']: Array($arParams['TO_USER_ID'], $arParams['FROM_USER_ID']))); $arChat = Array(); if (isset($arParams['TO_CHAT_ID'])) { $arChat = CIMChat::GetChatData(array( 'ID' => $arParams['TO_USER_ID'], 'USE_CACHE' => 'N' )); } $CCTP = new CTextParser(); $CCTP->MaxStringLen = 200; $CCTP->allow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "Y", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N"); $text = $CCTP->convertText(htmlspecialcharsbx($arParams['MESSAGE'])); $text_mobile = strip_tags(preg_replace("/<img.*?data-code=\"([^\"]*)\".*?>/i", "$1", $CCTP->convertText(htmlspecialcharsbx(preg_replace("/\[s\].*?\[\/s\]/i", "", $arParams['MESSAGE'])))) , '<br>'); return Array( 'CHAT_ID' => $arParams['CHAT_ID'], 'CHAT' => isset($arChat['chat'])? $arChat['chat']: Array(), 'USER_IN_CHAT' => isset($arChat['userInChat'])? $arChat['userInChat']: Array(), 'USER_BLOCK_CHAT' => $arChat['userChatBlockStatus'], 'USERS' => $arUsers['users'], 'MESSAGE' => Array( 'id' => $arParams['ID'], 'chatId' => $arParams['CHAT_ID'], 'senderId' => $arParams['FROM_USER_ID'], 'recipientId' => isset($arParams['TO_CHAT_ID'])? 'chat'.$arParams['TO_USER_ID']: $arParams['TO_USER_ID'], 'system' => $arParams['SYSTEM'] == 'Y'? 'Y': 'N', 'date' => $arParams['DATE_CREATE'], 'text' => $text, 'text_mobile' => $text_mobile, 'params' => $arParams['PARAMS'] ), 'FILES' => isset($arParams['FILES'])? $arParams['FILES']: Array(), ); }
public function OnImFileUpload($arFields) { if (!CModule::IncludeModule("im")) { return false; } $chatId = $arFields['CHAT_ID']; $arChat = CIMChat::GetChatData(array('ID' => $chatId)); if ($arChat['chat'][$chatId]['type'] == IM_MESSAGE_PRIVATE) { $arFields["FROM_USER_ID"] = $arFields['FILE']['authorId']; foreach ($arChat['userInChat'][$chatId] as $userId) { if ($userId != $arFields["FROM_USER_ID"]) { $arFields["TO_USER_ID"] = $userId; } } $domain = CXMPPServer::GetDomain(); if (CXMPPUtility::IsBitrix24Mode()) { $domain = $_SERVER["HTTP_HOST"]; } $factory = CXMPPFactory::GetFactory(); return $factory->__SendMessage($arFields["FROM_USER_ID"], $arFields["TO_USER_ID"], $arFields["MESSAGE_ID"] > 1 ? $arFields["MESSAGE_ID"] : 1, IM_MESSAGE_PRIVATE, htmlspecialcharsbx(CTextParser::convert4mail(str_replace("#BR#", "\n", $arFields["MESSAGE_OUT"]))), $domain); } return true; }
public static function UploadFileFromDisk($chatId, $files) { if (intval($chatId) <= 0) { return false; } $chatRelation = CIMChat::GetRelationById($chatId); if (!$chatRelation[self::GetUserId()]) { return false; } $result['FILES'] = array(); $messageFileId = array(); foreach ($files as $fileId) { $newFile = self::SaveFromLocalDisk($chatId, substr($fileId, 4)); if ($newFile) { $result['FILES'][$fileId] = self::GetFileParams($chatId, $newFile); $messageFileId[] = $newFile->getId(); foreach ($chatRelation as $relation) { if ($relation['MESSAGE_TYPE'] != IM_MESSAGE_PRIVATE) { break; } if (self::GetUserId() == $relation['USER_ID']) { continue; } \Bitrix\Disk\Driver::getInstance()->getRecentlyUsedManager()->push($relation['USER_ID'], $newFile->getId()); } } else { $result['FILES'][$fileId]['id'] = 0; } } if (empty($messageFileId)) { return false; } $result['MESSAGE_ID'] = 0; $arChat = CIMChat::GetChatData(array('ID' => $chatId)); $ar = array("TO_CHAT_ID" => $chatId, "FROM_USER_ID" => self::GetUserId(), "MESSAGE_TYPE" => $arChat['chat'][$chatId]['messageType'], "PARAMS" => array('FILE_ID' => $messageFileId)); $messageId = CIMMessage::Add($ar); if ($messageId) { $result['MESSAGE_ID'] = $messageId; } return $result; }
public static function Signaling($arParams) { $arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']); if ($arConfig['CHAT_ID'] <= 0) return false; global $DB, $USER; $arConfig['USER_ID'] = intval($arParams['USER_ID']) > 0? intval($arParams['USER_ID']): IntVal($USER->GetID()); $arConfig['COMMAND'] = isset($arParams['COMMAND'])? $arParams['COMMAND']: 'signaling'; $arConfig['PARAMS'] = isset($arParams['PARAMS'])? $arParams['PARAMS']: Array(); $arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID'])); if (empty($arChat['chat'])) return false; foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus) { if ($userId != $arConfig['USER_ID']) self::Command($arConfig['CHAT_ID'], $userId, $arConfig['COMMAND'], $arConfig['PARAMS']); } return true; }
$CIMChat = new CIMChat(); $CIMChat->Rename($_POST['CHAT_ID'], $_POST['CHAT_TITLE']); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => intval($_POST['CHAT_ID']), 'CHAT_TITLE' => $_POST['CHAT_TITLE'], 'ERROR' => '' )); } else if ($_POST['IM_CHAT_DATA_LOAD'] == 'Y') { CUtil::decodeURIComponent($_POST); $arChat = CIMChat::GetChatData(array( 'ID' => $_POST['CHAT_ID'], 'USE_CACHE' => 'Y', 'USER_ID' => $USER->GetId() )); echo CUtil::PhpToJsObject(Array( 'CHAT' => $arChat['chat'], 'CHAT_ID' => $_POST['CHAT_ID'], 'USER_IN_CHAT' => $arChat['userInChat'], 'USER_BLOCK_CHAT' => $arChat['userChatBlockStatus'], 'ERROR' => '' )); } else if ($_POST['IM_GET_EXTERNAL_DATA'] == 'Y') { $error = ''; $arResult = Array(
public static function GetList($arParams = array()) { global $USER, $CACHE_MANAGER; $bLoadUsers = isset($arParams['LOAD_USERS']) && $arParams['LOAD_USERS'] == 'N' ? false : true; $bLoadChats = isset($arParams['LOAD_CHATS']) && $arParams['LOAD_CHATS'] == 'N' ? false : true; $arGroups = array(); if (defined("BX_COMP_MANAGED_CACHE")) { $ttl = 2592000; } else { $ttl = 600; } $bVoximplantEnable = IsModuleInstalled('voximplant'); $bBusShowAll = !IsModuleInstalled('intranet') && COption::GetOptionInt('im', 'contact_list_show_all_bus'); $bIntranetEnable = false; $arGroupStatus = CUserOptions::GetOption('IM', 'groupStatus'); if (CModule::IncludeModule('intranet') && CModule::IncludeModule('iblock')) { $bIntranetEnable = true; if (!(CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())) { if (($iblock_id = COption::GetOptionInt('intranet', 'iblock_structure', 0)) > 0) { $cache_id = 'im_structure_' . $iblock_id; $obIMCache = new CPHPCache(); $cache_dir = '/bx/imc/structure'; if ($obIMCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obIMCache->GetVars(); $arStructureName = $tmpVal['STRUCTURE_NAME']; unset($tmpVal); } else { if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->StartTagCache($cache_dir); } $arResult["Structure"] = array(); $sec = CIBlockSection::GetList(array("left_margin" => "asc", "SORT" => "ASC"), array("ACTIVE" => "Y", "IBLOCK_ID" => $iblock_id), false, array('ID', 'NAME', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID')); $arStructureName = array(); while ($ar = $sec->GetNext(true, false)) { if ($ar['DEPTH_LEVEL'] > 1) { $ar['NAME'] .= ' / ' . $arStructureName[$ar['IBLOCK_SECTION_ID']]; } $arStructureName[$ar['ID']] = $ar['NAME']; } if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->RegisterTag('iblock_id_' . $iblock_id); $CACHE_MANAGER->EndTagCache(); } if ($obIMCache->StartDataCache()) { $obIMCache->EndDataCache(array('STRUCTURE_NAME' => $arStructureName)); } } unset($obIMCache); foreach ($arStructureName as $key => $value) { if (strlen($value) > 0) { $arGroups[$key] = array('id' => $key, 'status' => isset($arGroupStatus[$key]) && $arGroupStatus[$key] == 'open' ? 'open' : 'close', 'name' => $value); } } } } } else { if ($bBusShowAll) { $arGroups['all'] = array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL')); } } $arGroups['chat'] = array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS')); $arGroups['other'] = array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_OTHER_2')); $arGroups['search'] = array('id' => 'search', 'status' => isset($arGroupStatus['search']) && $arGroupStatus['search'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SEARCH')); $arWoGroups = array('all' => array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL')), 'chat' => array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS')), 'other' => array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => $bIntranetEnable ? GetMessage('IM_CL_GROUP_OTHER') : GetMessage('IM_CL_GROUP_OTHER_2')), 'search' => array('id' => 'search', 'status' => isset($arGroupStatus['search']) && $arGroupStatus['search'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SEARCH'))); $arUserSG = array(); $arUsers = array(); $arUserInGroup = array(); $arWoUserInGroup = array(); $arExtranetUsers = array(); if (CModule::IncludeModule('extranet') && CModule::IncludeModule("socialnetwork")) { $cache_id = 'im_user_sg_' . $USER->GetID(); $obSGCache = new CPHPCache(); $cache_dir = '/bx/imc/sonet'; if ($obSGCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obSGCache->GetVars(); $arUserSG = $tmpVal['USER_SG']; $arExtranetUsers = $tmpVal['EXTRANET_USERS']; $arUserInGroup = $tmpVal['USER_IN_GROUP']; $arWoUserInGroup = $tmpVal['WO_USER_IN_GROUP']; unset($tmpVal); } else { if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->StartTagCache($cache_dir); } $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $USER->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(), "GROUP_ACTIVE" => "Y", "GROUP_CLOSED" => "N"), false, false, array("ID", "GROUP_ID", "GROUP_NAME")); $arUserSocNetGroups = array(); while ($ar = $dbUsersInGroup->GetNext(true, false)) { $arUserSocNetGroups[] = $ar["GROUP_ID"]; $arUserSG['SG' . $ar['GROUP_ID']] = array('id' => 'SG' . $ar['GROUP_ID'], 'status' => isset($arGroupStatus['SG' . $ar['GROUP_ID']]) && $arGroupStatus['SG' . $ar['GROUP_ID']] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SG') . $ar['GROUP_NAME']); if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->RegisterTag('sonet_group_' . $ar['GROUP_ID']); $CACHE_MANAGER->RegisterTag('sonet_user2group_G' . $ar['GROUP_ID']); } } if (count($arUserSocNetGroups) > 0) { $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $arUserSocNetGroups, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y", "USER_CONFIRM_CODE" => false), false, false, array("ID", "USER_ID", "GROUP_ID")); while ($ar = $dbUsersInGroup->GetNext(true, false)) { if ($ar["USER_ID"] == $USER->GetID()) { continue; } $arExtranetUsers[$ar["USER_ID"]] = $ar["USER_ID"]; if (isset($arUserInGroup["SG" . $ar["GROUP_ID"]])) { $arUserInGroup["SG" . $ar["GROUP_ID"]]['users'][] = $ar["USER_ID"]; } else { $arUserInGroup["SG" . $ar["GROUP_ID"]] = array('id' => "SG" . $ar["GROUP_ID"], 'users' => array($ar["USER_ID"])); } if (isset($arWoUserInGroup["extranet"])) { $arWoUserInGroup["extranet"]['users'][] = $ar["USER_ID"]; } else { $arWoUserInGroup["extranet"] = array('id' => "extranet", 'users' => array($ar["USER_ID"])); } } if (isset($arWoUserInGroup['extranet']) && isset($arWoUserInGroup['extranet']['users'])) { $arWoUserInGroup['extranet']['users'] = array_values(array_unique($arWoUserInGroup['extranet']['users'])); } } if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->EndTagCache(); } if ($obSGCache->StartDataCache()) { $obSGCache->EndDataCache(array('USER_SG' => $arUserSG, 'EXTRANET_USERS' => $arExtranetUsers, 'USER_IN_GROUP' => $arUserInGroup, 'WO_USER_IN_GROUP' => $arWoUserInGroup)); } } unset($obSGCache); if (is_array($arUserSG)) { $arGroups = $arGroups + $arUserSG; } } $bFriendEnable = false; if ((!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite()) && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) { $bFriendEnable = true; $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")); if ($dbFriends) { while ($arFriends = $dbFriends->GetNext(true, false)) { $friendId = $pref = IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"]; $arFriendUsers[$friendId] = $friendId; if (isset($arUserInGroup["friends"])) { $arUserInGroup["friends"]['users'][] = $friendId; } else { $arUserInGroup["friends"] = array('id' => "friends", 'users' => array($friendId)); } if (isset($arWoUserInGroup["all"])) { $arWoUserInGroup["all"]['users'][] = $friendId; } else { $arWoUserInGroup["all"] = array('id' => "all", 'users' => array($friendId)); } } } $arGroups['friends'] = array('id' => 'friends', 'status' => isset($arGroupStatus['friends']) && $arGroupStatus['friends'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_FRIENDS')); } $arFilter = array('=ACTIVE' => 'Y', '=CONFIRM_CODE' => false); if (CModule::IncludeModule('extranet')) { if (!CExtranet::IsIntranetUser()) { $arFilter['=ID'] = array_merge(array($USER->GetId()), $arExtranetUsers); } $arWoGroups['extranet'] = array('id' => 'extranet', 'status' => isset($arGroupStatus['extranet']) && $arGroupStatus['extranet'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_EXTRANET')); } if ($bLoadUsers) { if ($bFriendEnable) { if (!$bIntranetEnable && !$bBusShowAll) { $arFilter['=ID'][] = $USER->GetId(); if (!empty($arFriendUsers)) { $arFilter['=ID'] = array_merge($arFilter['=ID'], $arFriendUsers); } if (!empty($arExtranetUsers)) { $arFilter['=ID'] = array_merge($arFilter['=ID'], $arExtranetUsers); } } } $bCLCacheEnable = false; if ($bIntranetEnable && (!$bFriendEnable || $bBusShowAll)) { $bCLCacheEnable = true; } if ($bCLCacheEnable && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()) { $bCLCacheEnable = false; } $bVoximplantEnable = IsModuleInstalled('voximplant'); $bColorEnabled = IM\Color::isEnabled(); $nameTemplate = self::GetUserNameTemplate(SITE_ID); $nameTemplateSite = CSite::GetNameFormat(false); $cache_id = 'im_contact_list_v11_' . $nameTemplate . '_' . $nameTemplateSite . (!empty($arExtranetUsers) ? '_' . $USER->GetID() : '') . $bVoximplantEnable . $bColorEnabled; $obCLCache = new CPHPCache(); $cache_dir = '/bx/imc/contact'; $arUsersToGroup = array(); $arUserInGroupStructure = array(); if ($bCLCacheEnable && $obCLCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obCLCache->GetVars(); $arUsers = $tmpVal['USERS']; $arWoUserInGroup['all'] = $tmpVal['WO_USER_IN_GROUP_ALL']; $arUsersToGroup = $tmpVal['USER_TO_GROUP']; $arUserInGroupStructure = $tmpVal['USER_IN_GROUP']; unset($tmpVal); $arOnline = CIMStatus::GetList(); foreach ($arUsers as $userId => $value) { $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false; $arUsers[$userId]['status'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['status'] : 'offline'; $arUsers[$userId]['idle'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['idle'] : 0; $arUsers[$userId]['mobileLastDate'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['mobileLastDate'] : 0; if ($arOnline['users'][$userId]['color']) { $arUsers[$userId]['color'] = $arOnline['users'][$userId]['color']; } } } else { $arSelect = array("ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "EXTERNAL_AUTH_ID"); if ($bIntranetEnable) { $arSelect[] = 'UF_DEPARTMENT'; } if ($bVoximplantEnable) { $arSelect[] = 'UF_VI_PHONE'; } $query = new \Bitrix\Main\Entity\Query(\Bitrix\Main\UserTable::getEntity()); $query->registerRuntimeField('', new \Bitrix\Main\Entity\ReferenceField('ref', 'Bitrix\\Im\\StatusTable', array('=this.ID' => 'ref.USER_ID'))); $query->addSelect('ref.COLOR', 'COLOR')->addSelect('ref.STATUS', 'STATUS')->addSelect('ref.IDLE', 'IDLE')->addSelect('ref.MOBILE_LAST_DATE', 'MOBILE_LAST_DATE'); $sago = Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180'); $query->registerRuntimeField('', new \Bitrix\Main\Entity\ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN LAST_ACTIVITY_DATE > ' . $sago . ' THEN \'Y\' ELSE \'N\' END')); $query->addSelect('IS_ONLINE_CUSTOM'); foreach ($arSelect as $value) { $query->addSelect($value); } foreach ($arFilter as $key => $value) { $query->addFilter($key, $value); } $resultQuery = $query->exec(); $arExtraUser = array(); while ($arUser = $resultQuery->fetch()) { $skipUser = false; if (is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"])) { foreach ($arUser["UF_DEPARTMENT"] as $dep_id) { if (isset($arUserInGroupStructure[$dep_id])) { $arUserInGroupStructure[$dep_id]['users'][] = $arUser["ID"]; } else { $arUserInGroupStructure[$dep_id] = array('id' => $dep_id, 'users' => array($arUser["ID"])); } } if (isset($arWoUserInGroup['all'])) { $arWoUserInGroup['all']['users'][] = $arUser["ID"]; } else { $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"])); } } else { if ($bBusShowAll) { $skipUser = false; if (isset($arWoUserInGroup['all'])) { $arWoUserInGroup['all']['users'][] = $arUser["ID"]; } else { $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"])); } if (isset($arUserInGroup['all'])) { $arUserInGroup['all']['users'][] = $arUser["ID"]; } else { $arUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"])); } } else { $skipUser = true; if (isset($arExtranetUsers[$arUser["ID"]])) { $skipUser = false; } elseif (isset($arFriendUsers[$arUser["ID"]])) { $skipUser = false; } elseif ($arUser["ID"] == $USER->GetID()) { $skipUser = false; } } } if (!$skipUser) { foreach ($arUser as $key => $value) { $arUser[$key] = !is_array($value) && !is_object($value) ? htmlspecialcharsEx($value) : $value; } $arExtraUser[$arUser["ID"]] = $arUser; $arFileTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width' => 58, 'height' => 58), BX_RESIZE_IMAGE_EXACT, false, false, true); $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F'); if (isset($arUser['COLOR']) && strlen($arUser['COLOR']) > 0) { $color = IM\Color::getColor($arUser['COLOR']); } if (!$color) { $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F'); } $arUsersToGroup[$arUser['ID']] = $arUser["UF_DEPARTMENT"]; $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false), 'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false), 'workPosition' => $arUser['WORK_POSITION'], 'color' => $color, 'avatar' => empty($arFileTmp['src']) ? '/bitrix/js/im/images/blank.gif' : $arFileTmp['src'], 'status' => 'offline', 'birthday' => $arUser['PERSONAL_BIRTHDAY'], 'gender' => $arUser['PERSONAL_GENDER'] == 'F' ? 'F' : 'M', 'phoneDevice' => $bVoximplantEnable && $arUser['UF_VI_PHONE'] == 'Y', 'extranet' => self::IsExtranet($arUser), 'network' => $arUser['EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID, 'profile' => CIMContactList::GetUserPath($arUser["ID"])); } } if (isset($arWoUserInGroup['all']) && isset($arWoUserInGroup['all']['users'])) { $arWoUserInGroup['all']['users'] = array_values(array_unique($arWoUserInGroup['all']['users'])); } if ($bCLCacheEnable) { if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->StartTagCache($cache_dir); $CACHE_MANAGER->RegisterTag("IM_CONTACT_LIST"); $CACHE_MANAGER->RegisterTag($bVoximplantEnable ? "USER_CARD" : "USER_NAME"); $CACHE_MANAGER->EndTagCache(); } if ($obCLCache->StartDataCache()) { $obCLCache->EndDataCache(array('USERS' => $arUsers, 'WO_USER_IN_GROUP_ALL' => $arWoUserInGroup['all'], 'USER_TO_GROUP' => $arUsersToGroup, 'USER_IN_GROUP' => $arUserInGroupStructure)); } } foreach ($arUsers as $userId => $arUser) { $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false; $arUsers[$userId]['status'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' ? $arExtraUser[$userId]['STATUS'] : 'offline'; $arUsers[$userId]['idle'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['IDLE']) ? $arExtraUser[$userId]['IDLE']->getTimestamp() : 0; $arUsers[$userId]['mobileLastDate'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['MOBILE_LAST_DATE']) ? $arExtraUser[$userId]['MOBILE_LAST_DATE']->getTimestamp() : 0; } } //uasort($ar, create_function('$a, $b', 'if($a["stamp"] < $b["stamp"]) return 1; elseif($a["stamp"] > $b["stamp"]) return -1; else return 0;')); if (is_array($arUsersToGroup[$USER->GetID()])) { foreach ($arUsersToGroup[$USER->GetID()] as $dep_id) { if (isset($arGroups[$dep_id])) { $arGroups[$dep_id]['status'] = isset($arGroupStatus[$dep_id]) && $arGroupStatus[$dep_id] == 'close' ? 'close' : 'open'; } } } foreach ($arUserInGroupStructure as $key => $val) { $arUserInGroup[$key] = $val; } unset($arUsersToGroup, $arUserInGroupStructure); } $arChats = array(); if ($bLoadChats) { $bColorEnabled = IM\Color::isEnabled(); $cache_id = 'im_chats_v4_' . $USER->GetID() . '_' . $bColorEnabled; $obCLCache = new CPHPCache(); $cache_dir = '/bx/imc/chats'; $arUsersToGroup = array(); $arUserInGroupStructure = array(); if ($obCLCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obCLCache->GetVars(); $arChats = $tmpVal['CHATS']; unset($tmpVal); } else { $chats = CIMChat::GetChatData(array('SKIP_PRIVATE' => 'Y', 'GET_LIST' => 'Y', 'USER_ID' => $USER->GetID())); $arChats = $chats['chat']; if ($obCLCache->StartDataCache()) { $obCLCache->EndDataCache(array('CHATS' => $arChats)); } } } $arContactList = array('users' => $arUsers, 'groups' => $arGroups, 'chats' => $arChats, 'woGroups' => $arWoGroups, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup); foreach (GetModuleEvents("im", "OnAfterContactListGetList", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arContactList)); } return $arContactList; }
die; } if (isset($_REQUEST['AJAX_CALL']) && $_REQUEST['AJAX_CALL'] == 'Y') { return; } if (intval($USER->GetID()) <= 0) { return; } if (!CModule::IncludeModule('im')) { return; } $chatId = intval($_GET['chat_id']); if ($chatId <= 0) { return; } $arChat = CIMChat::GetChatData(array('ID' => $chatId, 'USE_CACHE' => 'N')); $arResult['CHAT_ID'] = $chatId; $arResult['CHAT'] = $arChat['chat']; $arResult['USERS'] = array(); if (!empty($arChat['userInChat'][$chatId])) { $ar = CIMContactList::GetUserData(array('ID' => $arChat['userInChat'][$chatId], 'DEPARTMENT' => 'N', 'USE_CACHE' => 'Y')); $arResult['USERS'] = $ar['users']; } if (!$arResult['USERS'][$USER->GetId()]) { return; } $GLOBALS["APPLICATION"]->SetPageProperty("Viewport", "user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=290"); $GLOBALS["APPLICATION"]->SetPageProperty("BodyClass", "chat-profile-page"); if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) { $this->IncludeComponentTemplate(); }
public static function GetFormatMessage($arParams) { $arParams['ID'] = intval($arParams['ID']); $arParams['TO_USER_ID'] = isset($arParams['TO_CHAT_ID']) ? intval($arParams['TO_CHAT_ID']) : intval($arParams['TO_USER_ID']); $arParams['FROM_USER_ID'] = intval($arParams['FROM_USER_ID']); $arParams['MESSAGE'] = trim($arParams['MESSAGE']); $arParams['DATE_CREATE'] = intval($arParams['DATE_CREATE']); $arUsers = CIMContactList::GetUserData(array('ID' => isset($arParams['TO_CHAT_ID']) ? $arParams['FROM_USER_ID'] : array($arParams['TO_USER_ID'], $arParams['FROM_USER_ID']))); $arChat = array(); if (isset($arParams['TO_CHAT_ID'])) { $arChat = CIMChat::GetChatData(array('ID' => $arParams['TO_USER_ID'], 'USE_CACHE' => 'N')); } $CCTP = new CTextParser(); $CCTP->MaxStringLen = 200; $CCTP->allow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N"); $CCTPM = new CTextParser(); $CCTPM->MaxStringLen = 200; $CCTPM->allow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N"); return array('CHAT' => isset($arChat['chat']) ? $arChat['chat'] : array(), 'USER_IN_CHAT' => isset($arChat['userInChat']) ? $arChat['userInChat'] : array(), 'USERS' => $arUsers['users'], 'MESSAGE' => array('id' => $arParams['ID'], 'senderId' => $arParams['FROM_USER_ID'], 'recipientId' => isset($arParams['TO_CHAT_ID']) ? 'chat' . $arParams['TO_USER_ID'] : $arParams['TO_USER_ID'], 'date' => $arParams['DATE_CREATE'], 'text' => $CCTP->convertText(htmlspecialcharsbx($arParams['MESSAGE'])), 'text_mobile' => $CCTPM->convertText(htmlspecialcharsbx($arParams['MESSAGE'])))); }
$errorMessage = GetMessage('IM_ACCESS_ERROR'); } else { $chat = new CIMChat(); $chat->SetColor($_POST['CHAT_ID'], $_POST['COLOR']); } } else { CIMStatus::SetColor($USER->GetId(), $_POST['COLOR']); } echo CUtil::PhpToJsObject(array('COLOR' => $_POST['COLOR'], 'CHAT_ID' => $_POST['CHAT_ID'], 'ERROR' => $errorMessage)); } else { if ($_POST['IM_GET_MOBILE_CHAT_AVATAR'] == 'Y') { $avatar = ""; $errorMessage = ""; if ($_POST['CHAT_ID'] > 0) { $chat = new CIMChat(); $arChat = CIMChat::GetChatData(array('ID' => $_POST['CHAT_ID'], 'USE_CACHE' => 'N', 'PHOTO_SIZE' => '500', 'USER_ID' => intval($USER->GetId()))); $arResult['CHAT'] = $arChat['chat'][$_POST['CHAT_ID']]; if ($arResult['CHAT']) { $avatar = $arResult['CHAT']['avatar'] == '/bitrix/js/im/images/blank.gif' ? '' : $arResult['CHAT']['avatar']; } } echo CUtil::PhpToJsObject(array('AVATAR' => $avatar, 'ERROR' => $errorMessage)); } else { if ($_POST['IM_SETTING_SAVE'] == 'Y') { $errorMessage = ""; $arSettings = CUtil::JsObjectToPhp($_POST['SETTINGS']); CIMSettings::SetSetting(CIMSettings::SETTINGS, $arSettings); echo CUtil::PhpToJsObject(array('ERROR' => $errorMessage)); } else { if ($_POST['IM_SETTINGS_SAVE'] == 'Y') { $errorMessage = "";
public static function UploadFileFromDisk($chatId, $files) { if (intval($chatId) <= 0) return false; $chatRelation = CIMChat::GetRelationById($chatId); if (!$chatRelation[self::GetUserId()]) return false; $result['FILES'] = Array(); $messageFileId = Array(); foreach ($files as $fileId) { $newFile = self::SaveFromLocalDisk($chatId, substr($fileId, 4)); if ($newFile) { $result['FILES'][$fileId] = self::GetFileParams($chatId, $newFile); $messageFileId[] = $newFile->getId(); } else { $result['FILES'][$fileId]['id'] = 0; } } if (empty($messageFileId)) { return false; } $result['MESSAGE_ID'] = 0; $arChat = CIMChat::GetChatData(Array('ID' => $chatId)); $ar = Array( "TO_CHAT_ID" => $chatId, "FROM_USER_ID" => self::GetUserId(), "MESSAGE_TYPE" => $arChat['chat'][$chatId]['type'] == IM_MESSAGE_PRIVATE? IM_MESSAGE_PRIVATE: IM_MESSAGE_GROUP, "PARAMS" => Array( 'FILE_ID' => $messageFileId ) ); $messageId = CIMMessage::Add($ar); if ($messageId) { $result['MESSAGE_ID'] = $messageId; } return $result; }
function GetList($arParams = array()) { global $USER, $CACHE_MANAGER; $bLoadUsers = isset($arParams['LOAD_USERS']) && $arParams['LOAD_USERS'] == 'N' ? false : true; $bLoadChats = isset($arParams['LOAD_CHATS']) && $arParams['LOAD_CHATS'] == 'N' ? false : true; $arGroups = array(); if (defined("BX_COMP_MANAGED_CACHE")) { $ttl = 2592000; } else { $ttl = 600; } $bVoximplantEnable = IsModuleInstalled('voximplant'); $bIntranetEnable = false; $arGroupStatus = CUserOptions::GetOption('IM', 'groupStatus'); if (IsModuleInstalled('intranet') && CModule::IncludeModule('intranet') && CModule::IncludeModule('iblock')) { $bIntranetEnable = true; if (!(CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())) { if (($iblock_id = COption::GetOptionInt('intranet', 'iblock_structure', 0)) > 0) { $cache_id = 'im_structure_' . $iblock_id; $obIMCache = new CPHPCache(); $cache_dir = '/bx/imc/structure'; if ($obIMCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obIMCache->GetVars(); $arStructureName = $tmpVal['STRUCTURE_NAME']; unset($tmpVal); } else { if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->StartTagCache($cache_dir); } $arResult["Structure"] = array(); $sec = CIBlockSection::GetList(array("left_margin" => "asc", "SORT" => "ASC"), array("ACTIVE" => "Y", "IBLOCK_ID" => $iblock_id), false, array('ID', 'NAME', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID')); $arStructureName = array(); while ($ar = $sec->GetNext(true, false)) { if ($ar['DEPTH_LEVEL'] > 1) { $ar['NAME'] .= ' / ' . $arStructureName[$ar['IBLOCK_SECTION_ID']]; } $arStructureName[$ar['ID']] = $ar['NAME']; } if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->RegisterTag('iblock_id_' . $iblock_id); $CACHE_MANAGER->EndTagCache(); } if ($obIMCache->StartDataCache()) { $obIMCache->EndDataCache(array('STRUCTURE_NAME' => $arStructureName)); } } unset($obIMCache); foreach ($arStructureName as $key => $value) { if (strlen($value) > 0) { $arGroups[$key] = array('id' => $key, 'status' => isset($arGroupStatus[$key]) && $arGroupStatus[$key] == 'open' ? 'open' : 'close', 'name' => $value); } } } $arGroups['other'] = array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_OTHER')); } } else { $arGroups['other'] = array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_OTHER_2')); } $arGroups['chat'] = array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS')); $arWoGroups = array('all' => array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL')), 'chat' => array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS')), 'other' => array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => $bIntranetEnable ? GetMessage('IM_CL_GROUP_OTHER') : GetMessage('IM_CL_GROUP_OTHER_2'))); $arUserSG = array(); $arUsers = array(); $arUserInGroup = array(); $arWoUserInGroup = array(); $arExtranetUsers = array(); if (CModule::IncludeModule('extranet') && CModule::IncludeModule("socialnetwork")) { $cache_id = 'im_user_sg_' . $USER->GetID(); $obSGCache = new CPHPCache(); $cache_dir = '/bx/imc/sonet'; if ($obSGCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obSGCache->GetVars(); $arUserSG = $tmpVal['USER_SG']; $arExtranetUsers = $tmpVal['EXTRANET_USERS']; $arUserInGroup = $tmpVal['USER_IN_GROUP']; $arWoUserInGroup = $tmpVal['WO_USER_IN_GROUP']; unset($tmpVal); } else { if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->StartTagCache($cache_dir); } $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $USER->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(), "GROUP_ACTIVE" => "Y", "GROUP_CLOSED" => "N"), false, false, array("ID", "GROUP_ID", "GROUP_NAME")); $arUserSocNetGroups = array(); while ($ar = $dbUsersInGroup->GetNext(true, false)) { $arUserSocNetGroups[] = $ar["GROUP_ID"]; $arUserSG['SG' . $ar['GROUP_ID']] = array('id' => 'SG' . $ar['GROUP_ID'], 'status' => isset($arGroupStatus['SG' . $ar['GROUP_ID']]) && $arGroupStatus['SG' . $ar['GROUP_ID']] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SG') . $ar['GROUP_NAME']); if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->RegisterTag('sonet_group_' . $ar['GROUP_ID']); $CACHE_MANAGER->RegisterTag('sonet_user2group_G' . $ar['GROUP_ID']); } } if (count($arUserSocNetGroups) > 0) { $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $arUserSocNetGroups, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y", "USER_CONFIRM_CODE" => false), false, false, array("ID", "USER_ID", "GROUP_ID")); while ($ar = $dbUsersInGroup->GetNext(true, false)) { if ($USER->GetID() != $ar["USER_ID"]) { $arExtranetUsers[$ar["USER_ID"]] = $ar["USER_ID"]; if (isset($arUserInGroup["SG" . $ar["GROUP_ID"]])) { $arUserInGroup["SG" . $ar["GROUP_ID"]]['users'][] = $ar["USER_ID"]; } else { $arUserInGroup["SG" . $ar["GROUP_ID"]] = array('id' => "SG" . $ar["GROUP_ID"], 'users' => array($ar["USER_ID"])); } if (isset($arWoUserInGroup["extranet"])) { $arWoUserInGroup["extranet"]['users'][] = $ar["USER_ID"]; } else { $arWoUserInGroup["extranet"] = array('id' => "extranet", 'users' => array($ar["USER_ID"])); } } } if (isset($arWoUserInGroup['extranet']) && isset($arWoUserInGroup['extranet']['users'])) { $arWoUserInGroup['extranet']['users'] = array_values(array_unique($arWoUserInGroup['extranet']['users'])); } } if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->EndTagCache(); } if ($obSGCache->StartDataCache()) { $obSGCache->EndDataCache(array('USER_SG' => $arUserSG, 'EXTRANET_USERS' => $arExtranetUsers, 'USER_IN_GROUP' => $arUserInGroup, 'WO_USER_IN_GROUP' => $arWoUserInGroup)); } } unset($obSGCache); if (is_array($arUserSG)) { $arGroups = $arGroups + $arUserSG; } } $bFriendEnable = false; if ((!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite()) && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) { $bFriendEnable = true; $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")); if ($dbFriends) { while ($arFriends = $dbFriends->GetNext(true, false)) { $friendId = $pref = IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"]; $arFriendUsers[$friendId] = $friendId; if (isset($arUserInGroup["friends"])) { $arUserInGroup["friends"]['users'][] = $friendId; } else { $arUserInGroup["friends"] = array('id' => "friends", 'users' => array($friendId)); } if (isset($arWoUserInGroup["all"])) { $arWoUserInGroup["all"]['users'][] = $friendId; } else { $arWoUserInGroup["all"] = array('id' => "all", 'users' => array($friendId)); } } } $arGroups['friends'] = array('id' => 'friends', 'status' => isset($arGroupStatus['friends']) && $arGroupStatus['friends'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_FRIENDS')); } $arFilter = array('ACTIVE' => 'Y', 'CONFIRM_CODE' => false); if (CModule::IncludeModule('extranet')) { if (!CExtranet::IsIntranetUser()) { $arFilter['ID'] = $USER->GetID() . "|" . implode('|', $arExtranetUsers); } $arWoGroups['extranet'] = array('id' => 'extranet', 'status' => isset($arGroupStatus['extranet']) && $arGroupStatus['extranet'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_EXTRANET')); } if ($bLoadUsers) { if ($bFriendEnable) { if (!$bIntranetEnable) { $arFilter['ID'] = $USER->GetID(); if (!empty($arFriendUsers)) { $arFilter['ID'] .= "|" . implode('|', $arFriendUsers); } if (!empty($arExtranetUsers)) { $arFilter['ID'] .= "|" . implode('|', $arExtranetUsers); } } } $bCLCacheEnable = false; if ($bIntranetEnable && !$bFriendEnable) { $bCLCacheEnable = true; } if ($bCLCacheEnable && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()) { $bCLCacheEnable = false; } $bVoximplantEnable = IsModuleInstalled('voximplant'); $nameTemplate = self::GetUserNameTemplate(SITE_ID); $nameTemplateSite = CSite::GetNameFormat(false); $cache_id = 'im_contact_list_' . $nameTemplate . '_' . $nameTemplateSite . (!empty($arExtranetUsers) ? '_' . $USER->GetID() : '') . $bVoximplantEnable . '_v4'; $obCLCache = new CPHPCache(); $cache_dir = '/bx/imc/contact'; $arUsersToGroup = array(); $arUserInGroupStructure = array(); if ($bCLCacheEnable && $obCLCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obCLCache->GetVars(); $arUsers = $tmpVal['USERS']; $arWoUserInGroup['all'] = $tmpVal['WO_USER_IN_GROUP_ALL']; $arUsersToGroup = $tmpVal['USER_TO_GROUP']; $arUserInGroupStructure = $tmpVal['USER_IN_GROUP']; unset($tmpVal); } else { $arExtParams = array('FIELDS' => array("ID", "LAST_NAME", "NAME", "SECOND_NAME", "LOGIN", "PERSONAL_PHOTO", "PERSONAL_BIRTHDAY", "PERSONAL_GENDER", "WORK_POSITION")); if ($bIntranetEnable) { $arExtParams['SELECT'][] = 'UF_DEPARTMENT'; } if ($bVoximplantEnable) { $arExtParams['SELECT'][] = 'UF_VI_PHONE'; } $dbUsers = CUser::GetList($sort_by = array('last_name' => 'asc'), $dummy = '', $arFilter, $arExtParams); while ($arUser = $dbUsers->GetNext(true, false)) { $skipUser = false; if (is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"])) { foreach ($arUser["UF_DEPARTMENT"] as $dep_id) { if (isset($arUserInGroupStructure[$dep_id])) { $arUserInGroupStructure[$dep_id]['users'][] = $arUser["ID"]; } else { $arUserInGroupStructure[$dep_id] = array('id' => $dep_id, 'users' => array($arUser["ID"])); } } if (isset($arWoUserInGroup['all'])) { $arWoUserInGroup['all']['users'][] = $arUser["ID"]; } else { $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"])); } } else { $skipUser = true; if (isset($arExtranetUsers[$arUser["ID"]])) { $skipUser = false; } elseif (isset($arFriendUsers[$arUser["ID"]])) { $skipUser = false; } elseif ($arUser["ID"] == $USER->GetID()) { $skipUser = false; } } if (!$skipUser) { $arFileTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width' => 58, 'height' => 58), BX_RESIZE_IMAGE_EXACT, false, false, true); $arUsersToGroup[$arUser['ID']] = $arUser["UF_DEPARTMENT"]; $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false), 'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false), 'workPosition' => $arUser['WORK_POSITION'], 'avatar' => empty($arFileTmp['src']) ? '/bitrix/js/im/images/blank.gif' : $arFileTmp['src'], 'status' => 'offline', 'birthday' => $arUser['PERSONAL_BIRTHDAY'], 'gender' => $arUser['PERSONAL_GENDER'] == 'F' ? 'F' : 'M', 'phoneDevice' => $bVoximplantEnable && $arUser['UF_VI_PHONE'] == 'Y', 'extranet' => self::IsExtranet($arUser), 'profile' => CIMContactList::GetUserPath($arUser["ID"])); } } if (isset($arWoUserInGroup['all']) && isset($arWoUserInGroup['all']['users'])) { $arWoUserInGroup['all']['users'] = array_values(array_unique($arWoUserInGroup['all']['users'])); } if ($bCLCacheEnable) { if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->StartTagCache($cache_dir); $CACHE_MANAGER->RegisterTag($bVoximplantEnable ? "USER_CARD" : "USER_NAME"); $CACHE_MANAGER->EndTagCache(); } if ($obCLCache->StartDataCache()) { $obCLCache->EndDataCache(array('USERS' => $arUsers, 'WO_USER_IN_GROUP_ALL' => $arWoUserInGroup['all'], 'USER_TO_GROUP' => $arUsersToGroup, 'USER_IN_GROUP' => $arUserInGroupStructure)); } } } $arOnline = CIMStatus::GetList(); foreach ($arUsers as $userId => $value) { $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false; $arUsers[$userId]['status'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['status'] : 'offline'; $arUsers[$userId]['idle'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['idle'] : 0; $arUsers[$userId]['mobileLastDate'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['mobileLastDate'] : 0; } //uasort($ar, create_function('$a, $b', 'if($a["stamp"] < $b["stamp"]) return 1; elseif($a["stamp"] > $b["stamp"]) return -1; else return 0;')); if (is_array($arUsersToGroup[$USER->GetID()])) { foreach ($arUsersToGroup[$USER->GetID()] as $dep_id) { if (isset($arGroups[$dep_id])) { $arGroups[$dep_id]['status'] = isset($arGroupStatus[$dep_id]) && $arGroupStatus[$dep_id] == 'close' ? 'close' : 'open'; } } } foreach ($arUserInGroupStructure as $key => $val) { $arUserInGroup[$key] = $val; } unset($arUsersToGroup, $arUserInGroupStructure); } $arChats = array(); if ($bLoadChats) { $cache_id = 'im_contact_list_chats_' . $USER->GetID() . '_v1'; $obCLCache = new CPHPCache(); $cache_dir = '/bx/imc/chats'; $arUsersToGroup = array(); $arUserInGroupStructure = array(); if ($obCLCache->InitCache($ttl, $cache_id, $cache_dir)) { $tmpVal = $obCLCache->GetVars(); $arChats = $tmpVal['CHATS']; unset($tmpVal); } else { $chats = CIMChat::GetChatData(array('ONLY_CHAT' => 'Y', 'GET_USER_CHATS' => 'Y', 'USER_ID' => $USER->GetID())); $arChats = $chats['chat']; if ($obCLCache->StartDataCache()) { $obCLCache->EndDataCache(array('CHATS' => $arChats)); } } } $arContactList = array('users' => $arUsers, 'groups' => $arGroups, 'chats' => $arChats, 'woGroups' => $arWoGroups, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup); foreach (GetModuleEvents("im", "OnAfterContactListGetList", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arContactList)); } return $arContactList; }