• Модуль: 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; }