Пример #1
0
 function UserConfirmRequestToBeMember($targetUserID, $relationID, $bAutoSubscribe = true)
 {
     global $APPLICATION;
     $targetUserID = IntVal($targetUserID);
     if ($targetUserID <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_SENDER_USER_ID");
         return false;
     }
     $relationID = IntVal($relationID);
     if ($relationID <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_RELATIONID"), "ERROR_RELATION_ID");
         return false;
     }
     $dbResult = CSocNetUserToGroup::GetList(array(), array("ID" => $relationID, "USER_ID" => $targetUserID, "ROLE" => SONET_ROLES_REQUEST, "INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP), false, false, array("ID", "USER_ID", "INITIATED_BY_USER_ID", "GROUP_ID", "GROUP_VISIBLE", "GROUP_SITE_ID", "GROUP_NAME"));
     if ($arResult = $dbResult->Fetch()) {
         $arFields = array("ROLE" => SONET_ROLES_USER, "=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction());
         if (CSocNetUserToGroup::Update($arResult["ID"], $arFields)) {
             $events = GetModuleEvents("socialnetwork", "OnSocNetUserConfirmRequestToBeMember");
             while ($arEvent = $events->Fetch()) {
                 ExecuteModuleEventEx($arEvent, array($arResult["ID"], $arResult));
             }
             if ($bAutoSubscribe) {
                 CSocNetLogEvents::AutoSubscribe($targetUserID, SONET_ENTITY_GROUP, $arResult["GROUP_ID"]);
             }
             if (CModule::IncludeModule("im")) {
                 $groupSiteId = CSocNetGroup::GetDefaultSiteId($arResult["GROUP_ID"], $arResult["GROUP_SITE_ID"]);
                 CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|" . intval($targetUserID) . "|" . intval($relationID));
                 $workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", $groupSiteId);
                 $groupUrlTemplate = COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $groupSiteId);
                 $groupUrlTemplate = "#GROUPS_PATH#" . substr($groupUrlTemplate, strlen($workgroupsPage), strlen($groupUrlTemplate) - strlen($workgroupsPage));
                 $groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $arResult["GROUP_ID"], $groupUrlTemplate);
                 $arTmp = CSocNetLogTools::ProcessPath(array("GROUP_URL" => $groupUrl), $arResult["INITIATED_BY_USER_ID"], $groupSiteId);
                 $url = $arTmp["URLS"]["GROUP_URL"];
                 $serverName = strpos($url, "http://") === 0 || strpos($url, "https://") === 0 ? "" : $arTmp["SERVER_NAME"];
                 $domainName = strpos($url, "http://") === 0 || strpos($url, "https://") === 0 ? "" : (isset($arTmp["DOMAIN"]) && !empty($arTmp["DOMAIN"]) ? "//" . $arTmp["DOMAIN"] : "");
                 $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $arResult["INITIATED_BY_USER_ID"], "FROM_USER_ID" => $arResult['USER_ID'], "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "socialnetwork", "NOTIFY_EVENT" => "invite_group", "NOTIFY_TAG" => "SOCNET|INVITE_GROUP_SUCCESS|" . intval($arResult["GROUP_ID"]), "NOTIFY_MESSAGE" => str_replace("#NAME#", "<a href=\"" . $domainName . $url . "\" class=\"bx-notifier-item-action\">" . $arResult["GROUP_NAME"] . "</a>", GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE")), "NOTIFY_MESSAGE_OUT" => str_replace("#NAME#", $arResult["GROUP_NAME"], GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE") . " (" . $serverName . $url . ")"));
                 CIMNotify::Add($arMessageFields);
                 $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $arResult['USER_ID'], "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, "NOTIFY_MODULE" => "socialnetwork", "NOTIFY_EVENT" => "invite_group", "NOTIFY_TAG" => "SOCNET|INVITE_GROUP|" . intval($arResult['USER_ID']) . "|" . $relationID, "NOTIFY_MESSAGE" => str_replace("#NAME#", "<a href=\"" . $domainName . $url . "\" class=\"bx-notifier-item-action\">" . $arResult["GROUP_NAME"] . "</a>", GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE_G")), "NOTIFY_MESSAGE_OUT" => str_replace("#NAME#", $arResult["GROUP_NAME"], GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE_G") . " (" . $serverName . $url . ")"));
                 CIMNotify::Add($arMessageFields);
                 $arNotifyParams = array("TYPE" => "join", "RELATION_ID" => $arResult["ID"], "USER_ID" => $arResult["USER_ID"], "GROUP_ID" => $arResult["GROUP_ID"], "GROUP_NAME" => htmlspecialcharsbx($arResult["GROUP_NAME"]), "EXCLUDE_USERS" => array($arResult["INITIATED_BY_USER_ID"]));
                 CSocNetUserToGroup::NotifyImToModerators($arNotifyParams);
             }
         } else {
             $errorMessage = "";
             if ($e = $APPLICATION->GetException()) {
                 $errorMessage = $e->GetString();
             }
             if (StrLen($errorMessage) <= 0) {
                 $errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
             }
             $GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_CREATE_RELATION");
             return false;
         }
     } else {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_GROUP_REQUEST");
         return false;
     }
     CSocNetUserToGroup::__SpeedFileCheckMessages($targetUserID);
     return true;
 }
Пример #2
0
 function CreateGroup($ownerID, $arFields, $bAutoSubscribe = true)
 {
     global $APPLICATION, $DB;
     $ownerID = IntVal($ownerID);
     if ($ownerID <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_OWNERID") . ". ", "ERROR_OWNERID");
         return false;
     }
     if (!isset($arFields) || !is_array($arFields)) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_FIELDS") . ". ", "ERROR_FIELDS");
         return false;
     }
     $DB->StartTransaction();
     $arFields["=DATE_CREATE"] = $GLOBALS["DB"]->CurrentTimeFunction();
     $arFields["=DATE_UPDATE"] = $GLOBALS["DB"]->CurrentTimeFunction();
     $arFields["=DATE_ACTIVITY"] = $GLOBALS["DB"]->CurrentTimeFunction();
     $arFields["ACTIVE"] = "Y";
     $arFields["OWNER_ID"] = $ownerID;
     if (!is_set($arFields, "SPAM_PERMS") || strlen($arFields["SPAM_PERMS"]) <= 0) {
         $arFields["SPAM_PERMS"] = SONET_ROLES_OWNER;
     }
     $groupID = CSocNetGroup::Add($arFields);
     if (!$groupID || IntVal($groupID) <= 0) {
         $errorMessage = "";
         if ($e = $APPLICATION->GetException()) {
             $errorMessage = $e->GetString();
             $errorID = $e->GetID();
             if (StrLen($errorID) <= 0 && isset($e->messages) && is_array($e->messages) && is_array($e->messages[0]) && array_key_exists("id", $e->messages[0])) {
                 $errorID = $e->messages[0]["id"];
             }
         }
         if (StrLen($errorMessage) <= 0) {
             $errorMessage = GetMessage("SONET_UR_ERROR_CREATE_GROUP") . ". ";
         }
         if (StrLen($errorID) <= 0) {
             $errorID = "ERROR_CREATE_GROUP";
         }
         $GLOBALS["APPLICATION"]->ThrowException($errorMessage, $errorID);
         $DB->Rollback();
         return false;
     }
     $arFields1 = array("USER_ID" => $ownerID, "GROUP_ID" => $groupID, "ROLE" => SONET_ROLES_OWNER, "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER, "INITIATED_BY_USER_ID" => $ownerID, "MESSAGE" => false);
     if (!CSocNetUserToGroup::Add($arFields1)) {
         $errorMessage = "";
         if ($e = $APPLICATION->GetException()) {
             $errorMessage = $e->GetString();
         }
         if (StrLen($errorMessage) <= 0) {
             $errorMessage = GetMessage("SONET_UR_ERROR_CREATE_U_GROUP") . ". ";
         }
         $GLOBALS["APPLICATION"]->ThrowException($errorMessage, "ERROR_CREATE_GROUP");
         $DB->Rollback();
         return false;
     }
     if ($bAutoSubscribe) {
         CSocNetLogEvents::AutoSubscribe($ownerID, SONET_ENTITY_GROUP, $groupID);
     }
     CSocNetSubscription::Set($ownerID, "SG" . $groupID, "Y");
     $DB->Commit();
     return $groupID;
 }
Пример #3
0
 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 (StrLen($errorMessage) <= 0) {
                 $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;
 }
Пример #4
0
	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" => "invite_user",
						"NOTIFY_TAG" => "SOCNET|INVITE_USER_CONFIRM",
						"NOTIFY_MESSAGE" => GetMessage("SONET_UR_AGREE_FRIEND_MESSAGE"),
					);
					CIMNotify::Add($arMessageFields);
				}
				else
				{
					$arMessageFields = array(
						"FROM_USER_ID" => $senderUserID,
						"TO_USER_ID" => $arResult["FIRST_USER_ID"],
						"MESSAGE" => GetMessage("SONET_UR_AGREE_FRIEND_MESSAGE"),
						"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
						"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
					);
					CSocNetMessages::Add($arMessageFields);
				}

				$logID = CSocNetLog::Add(
					array(
						"ENTITY_TYPE" => SONET_ENTITY_USER,
						"ENTITY_ID" => $senderUserID,
						"EVENT_ID" => "system_friends",
						"=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
						"TITLE_TEMPLATE" => false,
						"TITLE" => "friend",
						"MESSAGE" => $arResult["FIRST_USER_ID"],
						"URL" => false,
						"MODULE_ID" => false,
						"CALLBACK_FUNC" => false,
						"USER_ID" => $arResult["FIRST_USER_ID"]
					),
					false
				);
				if (intval($logID) > 0)
				{
					CSocNetLog::Update($logID, array("TMP_ID" => $logID));

					$perm = CSocNetUserPerms::GetOperationPerms($senderUserID, "viewfriends");
					if (in_array($perm, array(SONET_RELATIONS_TYPE_FRIENDS2, SONET_RELATIONS_TYPE_FRIENDS)))
						CSocNetLogRights::Add($logID, array("SA", "U".$senderUserID, "S".SONET_ENTITY_USER.$senderUserID."_".$perm));
					elseif ($perm == SONET_RELATIONS_TYPE_NONE)
						CSocNetLogRights::Add($logID, array("SA", "U".$senderUserID));
					elseif ($perm == SONET_RELATIONS_TYPE_AUTHORIZED)
						CSocNetLogRights::Add($logID, array("SA", "AU"));
					elseif ($perm == SONET_RELATIONS_TYPE_ALL)
						CSocNetLogRights::Add($logID, array("SA", "G2"));					

					$tmpID = $logID;
				}

				$logID = CSocNetLog::Add(
					array(
						"ENTITY_TYPE" => SONET_ENTITY_USER,
						"ENTITY_ID" => $arResult["FIRST_USER_ID"],
						"EVENT_ID" => "system_friends",
						"=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
						"TITLE_TEMPLATE" => false,
						"TITLE" => "friend",
						"MESSAGE" => $senderUserID,
						"URL" => false,
						"MODULE_ID" => false,
						"CALLBACK_FUNC" => false,
						"USER_ID" => $senderUserID,
						"TMP_ID" => (intval($tmpID) > 0 ? $tmpID : false),
					),
					false
				);

				if (intval($logID) > 0)
				{
					$perm = CSocNetUserPerms::GetOperationPerms($arResult["FIRST_USER_ID"], "viewfriends");
					if (in_array($perm, array(SONET_RELATIONS_TYPE_FRIENDS2, SONET_RELATIONS_TYPE_FRIENDS)))
						CSocNetLogRights::Add($logID, array("SA", "U".$arResult["FIRST_USER_ID"], "S".SONET_ENTITY_USER.$arResult["FIRST_USER_ID"]."_".$perm));
					elseif ($perm == SONET_RELATIONS_TYPE_NONE)
						CSocNetLogRights::Add($logID, array("SA", "U".$arResult["FIRST_USER_ID"]));
					elseif ($perm == SONET_RELATIONS_TYPE_AUTHORIZED)
						CSocNetLogRights::Add($logID, array("SA", "AU"));
					elseif ($perm == SONET_RELATIONS_TYPE_ALL)
						CSocNetLogRights::Add($logID, array("SA", "G2"));	

					CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $tmpID);						
				}		
			}
			else
			{
				$errorMessage = "";
				if ($e = $APPLICATION->GetException())
					$errorMessage = $e->GetString();
				if (StrLen($errorMessage) <= 0)
					$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;
	}
Пример #5
0
	function UserConfirmRequestToBeMember($targetUserID, $relationID, $bAutoSubscribe = true)
	{
		global $APPLICATION;

		$targetUserID = IntVal($targetUserID);
		if ($targetUserID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_SENDER_USER_ID");
			return false;
		}

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

		if (CModule::IncludeModule("extranet"))
			$extranet_site_id = CExtranet::GetExtranetSiteID();

		$dbResult = CSocNetUserToGroup::GetList(
			array(),
			array(
				"ID" => $relationID,
				"USER_ID" => $targetUserID,
				"ROLE" => SONET_ROLES_REQUEST,
				"INITIATED_BY_TYPE" => SONET_INITIATED_BY_GROUP
			),
			false,
			false,
			array("ID", "USER_ID", "INITIATED_BY_USER_ID", "GROUP_ID", "GROUP_VISIBLE", "GROUP_SITE_ID", "GROUP_NAME")
		);

		if ($arResult = $dbResult->Fetch())
		{
			$rsGroupSite = CSocNetGroup::GetSite($arResult["GROUP_ID"]);
			while ($arGroupSite = $rsGroupSite->Fetch())
			{
				$arGroupSites[] = $arGroupSite["LID"];

				//get server name
				$rsSites = CSite::GetByID($arGroupSite["LID"]);
				$arSite = $rsSites->Fetch();
				$serverName = $arSite["SERVER_NAME"];
				if (strlen($serverName) <= 0)
				{
					if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0)
						$serverName = SITE_SERVER_NAME;
					else
						$serverName = COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]);
				}

				if (strlen($serverName) > 0)
				{
					$protocol = (CMain::IsHTTPS() ? "https" : "http");
					$serverName = $protocol."://".$serverName;
				}
			}

			if (!$arGroupSites)
				$arGroupSites = array(SITE_ID);

			$arFields = array(
				"ROLE" => SONET_ROLES_USER,
				"=DATE_UPDATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
			);
			if (CSocNetUserToGroup::Update($arResult["ID"], $arFields))
			{
				$events = GetModuleEvents("socialnetwork", "OnSocNetUserConfirmRequestToBeMember");
				while ($arEvent = $events->Fetch())
					ExecuteModuleEventEx($arEvent, array($arResult["ID"], $arResult));

				if ($bAutoSubscribe)
					CSocNetLogEvents::AutoSubscribe($targetUserID, SONET_ENTITY_GROUP, $arResult["GROUP_ID"]);

				if (CModule::IncludeModule("im"))
				{
					CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|".intval($targetUserID)."|".intval($relationID));

					$arMessageFields = array(
						"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
						"TO_USER_ID" => $arResult["INITIATED_BY_USER_ID"],
						"FROM_USER_ID" => $arResult['USER_ID'],
						"NOTIFY_TYPE" => IM_NOTIFY_FROM,
						"NOTIFY_MODULE" => "socialnetwork",
						"NOTIFY_EVENT" => "invite_group",
						"NOTIFY_TAG" => "SOCNET|INVITE_GROUP_SUCCESS|".intval($arResult["GROUP_ID"]),
						"NOTIFY_MESSAGE" => str_replace("#NAME#", $arResult["GROUP_NAME"], GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE")),
					);
					CIMNotify::Add($arMessageFields);
				}
				else
				{
					$arMessageFields = array(
						"FROM_USER_ID" => $targetUserID,
						"TO_USER_ID" => $arResult["INITIATED_BY_USER_ID"],
						"MESSAGE" => str_replace("#NAME#", $arResult["GROUP_NAME"], GetMessage("SONET_UG_CONFIRM_MEMBER_MESSAGE")),
						"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
						"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
					);
					CSocNetMessages::Add($arMessageFields);
				}

				$site = (in_array($extranet_site_id, $arGroupSites)) ? $extranet_site_id : $arGroupSites["0"];
				$groupUrl = $serverName.str_replace("#group_id#", $arResult["GROUP_ID"], COption::GetOptionString("socialnetwork", "group_path_template", "/workgroups/group/#group_id#/", $site));

				$logID = CSocNetLog::Add(
					array(
						"ENTITY_TYPE" => SONET_ENTITY_GROUP,
						"ENTITY_ID" => $arResult["GROUP_ID"],
						"EVENT_ID" => "system",
						"=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
						"TITLE_TEMPLATE" => false,
						"TITLE" => "join",
						"MESSAGE" => $targetUserID,
						"URL" => $groupUrl,
						"MODULE_ID" => false,
						"CALLBACK_FUNC" => false,
						"SITE_ID" => $arGroupSites,
						"USER_ID" => $targetUserID
					),
					false
				);
				if (intval($logID) > 0)
				{
					$tmpID = $logID;
					CSocNetLog::Update($logID, array("TMP_ID" => $tmpID));
					CSocNetLogRights::Add($logID, array("SA", "U".$targetUserID, "S".SONET_ENTITY_GROUP.$arResult["GROUP_ID"], "S".SONET_ENTITY_GROUP.$arResult["GROUP_ID"]."_".SONET_ROLES_OWNER, "S".SONET_ENTITY_GROUP.$arResult["GROUP_ID"]."_".SONET_ROLES_MODERATOR, "S".SONET_ENTITY_GROUP.$arResult["GROUP_ID"]."_".SONET_ROLES_USER));
					CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $tmpID);
				}
			}
			else
			{
				$errorMessage = "";
				if ($e = $APPLICATION->GetException())
					$errorMessage = $e->GetString();
				if (StrLen($errorMessage) <= 0)
					$errorMessage = GetMessage("SONET_UR_ERROR_CREATE_USER2GROUP");

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

		CSocNetUserToGroup::__SpeedFileCheckMessages($targetUserID);

		return true;
	}