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

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

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

	$arFields = array(
		"FIRST_USER_ID" => $senderUserID,
		"SECOND_USER_ID" => $targetUserID,
		"RELATION" => SONET_RELATIONS_REQUEST,
		"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
		"=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
		"MESSAGE" => $message,
		"INITIATED_BY" => "F",
	);

	//check if relation already exists to overwrite it
	//if user is banned but im is installed and black-list isn't used anymore
	$dbResult = CSocNetUserRelations::GetList(
		array(),
		array(
			"FIRST_USER_ID" => $senderUserID,
			"SECOND_USER_ID" => $targetUserID
		)
	);

	$ID = false;
	if ($arResult = $dbResult->GetNext())
	{
		if ($arResult["RELATION"] == SONET_RELATIONS_BAN && IsModuleInstalled("im"))
			$ID = CSocNetUserRelations::Update($arResult["ID"], $arFields);
	}
	else
		$ID = CSocNetUserRelations::Add($arFields);

	if (!$ID)
	{
		$errorMessage = "";
		if ($e = $APPLICATION->GetException())
			$errorMessage = $e->GetString();
		if ($errorMessage == '')
			$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_RELATION");

		$GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_CREATE_RELATION");
		return false;
	}

	if (CModule::IncludeModule("im"))
	{
		$dbSenderUser = CUser::GetByID($senderUserID);
		$arSenderUser = $dbSenderUser->Fetch();
		$senderUser = CUser::FormatName(CSite::GetNameFormat(), $arSenderUser, true);	

		$arMessageFields = array(
			"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
			"TO_USER_ID" => intval($targetUserID),
			"FROM_USER_ID" => intval($senderUserID),
			"NOTIFY_TYPE" => IM_NOTIFY_CONFIRM,
			"NOTIFY_MODULE" => "socialnetwork",
			"NOTIFY_EVENT" => "invite_user_btn",
			"NOTIFY_TAG" => "SOCNET|INVITE_USER|".intval($targetUserID)."|".intval($ID),
			"NOTIFY_TITLE" => str_replace("#USER#", $senderUser, GetMessage("SONET_U_INVITE_CONFIRM_TITLE")),
			"NOTIFY_MESSAGE" => str_replace("#TEXT#", $message, GetMessage("SONET_U_INVITE_CONFIRM_TEXT")),
			"NOTIFY_BUTTONS" => Array(
				Array('TITLE' => GetMessage('SONET_U_INVITE_CONFIRM'), 'VALUE' => 'Y', 'TYPE' => 'accept'),
				Array('TITLE' => GetMessage('SONET_U_INVITE_REJECT'), 'VALUE' => 'N', 'TYPE' => 'cancel'),
			)
		);

		$dbSite = CSite::GetByID(SITE_ID);
		$arSite = $dbSite->Fetch();
		$serverName = htmlspecialcharsEx($arSite["SERVER_NAME"]);
		if ($serverName == '')
		{
			if (defined("SITE_SERVER_NAME") && SITE_SERVER_NAME <> '')
				$serverName = SITE_SERVER_NAME;
			else
				$serverName = COption::GetOptionString("main", "server_name", "");
			if ($serverName == '')
				$serverName = $_SERVER["SERVER_NAME"];
		}
		$serverName = (CMain::IsHTTPS() ? "https" : "http")."://".$serverName;

		$requestUrl = COption::GetOptionString("socialnetwork", "user_request_page", 
			(IsModuleInstalled("intranet")) ? "/company/personal/user/#USER_ID#/requests/" : "/club/user/#USER_ID#/requests/", SITE_ID);

		$requestUrl = $serverName.str_replace(array("#USER_ID#", "#user_id#"), $targetUserID, $requestUrl);

		$arMessageFields['NOTIFY_MESSAGE_OUT'] = $arMessageFields['NOTIFY_MESSAGE'];
		$arMessageFields['NOTIFY_MESSAGE_OUT'] .= "nn".GetMessage('SONET_U_INVITE_CONFIRM').": ".$requestUrl.'?INVITE_USER='.$ID.'&CONFIRM=Y';
		$arMessageFields['NOTIFY_MESSAGE_OUT'] .= "nn".GetMessage('SONET_U_INVITE_REJECT').": ".$requestUrl.'?INVITE_USER='.$ID.'&CONFIRM=N';

		CIMNotify::Add($arMessageFields);
	}

	CSocNetUserRelations::__SpeedFileCreate($targetUserID);

	return true;
}