- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_contact_list.php
- Класс: CAllIMContactList
- Вызов: CAllIMContactList::AllowToSend
static function AllowToSend($arParams)
{
$bResult = false;
if (isset($arParams['TO_USER_ID']))
{
global $USER;
$toUserId = intval($arParams['TO_USER_ID']);
$bResult = true;
if(IsModuleInstalled('intranet') && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())
{
$bResult = false;
if (CModule::IncludeModule("socialnetwork"))
{
global $USER, $CACHE_MANAGER;
if(defined("BX_COMP_MANAGED_CACHE"))
$ttl = 2592000;
else
$ttl = 600;
$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();
$bResult = in_array($toUserId, $tmpVal['EXTRANET_USERS']);
}
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();
$arUserSG = Array();
while ($ar = $dbUsersInGroup->GetNext(true, false))
{
$arUserSocNetGroups[] = $ar["GROUP_ID"];
$arUserSG['SG'.$ar['GROUP_ID']] = array(
'id' => 'SG'.$ar['GROUP_ID'],
'status' => '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']);
}
}
$arExtranetUsers = Array();
$arUserInGroup = Array();
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(defined("BX_COMP_MANAGED_CACHE"))
$CACHE_MANAGER->EndTagCache();
if($obSGCache->StartDataCache())
{
$obSGCache->EndDataCache(array(
'USER_SG' => $arUserSG,
'EXTRANET_USERS' => $arExtranetUsers,
'USER_IN_GROUP' => $arUserInGroup
));
}
$bResult = in_array($toUserId, $arExtranetUsers);
}
unset($obSGCache);
}
}
else if (!IsModuleInstalled('intranet'))
{
if (CIMSettings::GetPrivacy(CIMSettings::PRIVACY_MESSAGE) == CIMSettings::PRIVACY_RESULT_CONTACT && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed() && !CSocNetUserRelations::IsFriends($USER->GetID(), $arParams['TO_USER_ID']))
{
$bResult = false;
}
else if (CIMSettings::GetPrivacy(CIMSettings::PRIVACY_MESSAGE, $arParams['TO_USER_ID']) == CIMSettings::PRIVACY_RESULT_CONTACT && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed() && !CSocNetUserRelations::IsFriends($USER->GetID(), $arParams['TO_USER_ID']))
{
$bResult = false;
}
}
}
else if (isset($arParams['TO_CHAT_ID']))
{
global $DB, $USER;
$toChatId = intval($arParams['TO_CHAT_ID']);
$fromUserId = intval($USER->GetID());
$strSql = "
SELECT R.CHAT_ID
FROM b_im_relation R
WHERE R.USER_ID = ".$fromUserId."
AND R.MESSAGE_TYPE IN ('".IM_MESSAGE_CHAT."', '".IM_MESSAGE_OPEN."', '".IM_MESSAGE_OPEN_LINE."')
AND R.CHAT_ID = ".$toChatId."";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
$bResult = true;
else
$bResult = false;
}
return $bResult;
}