• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/user_relations.php
  • Класс: CAllSocNetUserRelations
  • Вызов: CAllSocNetUserRelations::ConfirmRequestToBeFriend
static function ConfirmRequestToBeFriend($senderUserID, $relationID, $bAutoSubscribe = true)
{
	global $APPLICATION;

	$senderUserID = intval($senderUserID);
	if ($senderUserID <= 0)
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_SENDER_USER_ID"), "ERROR_SENDER_USER_ID");
		return false;
	}

	$relationID = intval($relationID);
	if ($relationID <= 0)
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_TARGET_USER_ID"), "ERROR_RELATION_ID");
		return false;
	}

	$dbResult = CSocNetUserRelations::GetList(
		array(),
		array(
			"ID" => $relationID,
			"SECOND_USER_ID" => $senderUserID,
			"RELATION" => SONET_RELATIONS_REQUEST
		),
		false,
		false,
		array("ID", "FIRST_USER_ID", "SECOND_USER_ID")
	);

	if ($arResult = $dbResult->Fetch())
	{
		$rsUser = CUser::GetByID(intval($arResult["FIRST_USER_ID"]));
		$arUser = $rsUser->Fetch();
		if (!is_array($arUser) || $arUser["ACTIVE"] != "Y")
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_INVALID_TARGET_USER_ID"), "ERROR_INVALID_TARGET_USER_ID");
			return false;
		}

		$arFields = array(
			"RELATION" => SONET_RELATIONS_FRIEND,
			"=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
			"INITIATED_BY" => "S",
		);

		if (CSocNetUserRelations::Update($arResult["ID"], $arFields))
		{
			if ($bAutoSubscribe)
			{
				CSocNetLogEvents::AutoSubscribe($senderUserID, SONET_ENTITY_USER, $arResult["FIRST_USER_ID"]);
				CSocNetLogEvents::AutoSubscribe($arResult["FIRST_USER_ID"], SONET_ENTITY_USER, $senderUserID);
			}

			if (CModule::IncludeModule("im"))
			{
				CIMNotify::DeleteByTag("SOCNET|INVITE_USER|".intval($senderUserID)."|".intval($arResult["ID"]));
				$arMessageFields = array(
					"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
					"TO_USER_ID" => $arResult["FIRST_USER_ID"],
					"FROM_USER_ID" => $senderUserID,
					"NOTIFY_TYPE" => IM_NOTIFY_FROM,
					"NOTIFY_MODULE" => "socialnetwork",
					"NOTIFY_EVENT" => "inout_user",
					"NOTIFY_TAG" => "SOCNET|INVITE_USER_CONFIRM",
					"NOTIFY_MESSAGE" => GetMessage("SONET_UR_AGREE_FRIEND_MESSAGE"),
				);
				CIMNotify::Add($arMessageFields);
			}
		}
		else
		{
			$errorMessage = "";
			if ($e = $APPLICATION->GetException())
				$errorMessage = $e->GetString();
			if ($errorMessage == '')
				$errorMessage = GetMessage("SONET_UR_ERROR_UPDATE_RELATION");

			$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_CREATE_RELATION");
			return false;
		}
	}
	else
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_NO_FRIEND_REQUEST"), "ERROR_NO_FRIEND_REQUEST");
		return false;
	}

	$arUserID = array(
		$arResult["FIRST_USER_ID"],
		$arResult["SECOND_USER_ID"]
	);

	$dbFriends = CSocNetUserRelations::GetRelatedUsers($arResult["FIRST_USER_ID"], SONET_RELATIONS_FRIEND);
	while ($arFriends = $dbFriends->Fetch())
	{
		$pref = (($arResult["FIRST_USER_ID"] == $arFriends["FIRST_USER_ID"]) ? "SECOND" : "FIRST");
		$arUserID[] = $arResult[$pref."_USER_ID"];
	}

	$dbFriends = CSocNetUserRelations::GetRelatedUsers($arResult["SECOND_USER_ID"], SONET_RELATIONS_FRIEND);
	while ($arFriends = $dbFriends->Fetch())
	{
		$pref = (($arResult["FIRST_USER_ID"] == $arFriends["FIRST_USER_ID"]) ? "SECOND" : "FIRST");
		$arUserID[] = $arResult[$pref."_USER_ID"];
	}

	$arUserID = array_unique($arUserID);

	CSocNetUserRelations::__SpeedFileCheckMessages($senderUserID);

	return true;
}