static function UserConfirmRequestToBeMember($targetUserID, $relationID, $bAutoSubscribe = true): bool // request from group confirmed by a user
{
global $APPLICATION;
$targetUserID = (int)$targetUserID;
if ($targetUserID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_USERID"), "ERROR_SENDER_USER_ID");
return false;
}
$relationID = (int)$relationID;
if ($relationID <= 0)
{
$APPLICATION->ThrowException(GetMessage("SONET_UR_EMPTY_RELATIONID"), "ERROR_RELATION_ID");
return false;
}
$dbResult = CSocNetUserToGroup::GetList(
array(),
array(
"ID" => $relationID,
"USER_ID" => $targetUserID,
"ROLE" => UserToGroupTable::ROLE_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())
{
if (!empty($arResult['GROUP_NAME']))
{
$arResult['GROUP_NAME'] = Emoji::decode($arResult['GROUP_NAME']);
}
$arFields = array(
"ROLE" => UserToGroupTable::ROLE_USER,
"=DATE_UPDATE" => CDatabase::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 (Loader::includeModule('im'))
{
$groupSiteId = CSocNetGroup::GetDefaultSiteId($arResult["GROUP_ID"], $arResult["GROUP_SITE_ID"]);
CIMNotify::DeleteByTag("SOCNET|INVITE_GROUP|" . (int)$targetUserID . "|" . (int)$relationID);
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", $groupSiteId);
$groupUrlTemplate = Path::get('group_path_template', $groupSiteId);
$groupUrlTemplate = "#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_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 = (
mb_strpos($url, "http://") === 0
|| mb_strpos($url, "https://") === 0
? ""
: $arTmp["SERVER_NAME"]
);
$domainName = (
mb_strpos($url, "http://") === 0
|| mb_strpos($url, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$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|" . (int)$arResult['USER_ID'] . "|". $relationID,
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"".$arResult["GROUP_NAME"]."",
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);
$chatNotificationResult = UserToGroup::addInfoToChat(array(
'group_id' => $arResult["GROUP_ID"],
'user_id' => $arResult["USER_ID"],
'action' => UserToGroup::CHAT_ACTION_IN,
'role' => $arFields['ROLE']
));
if (!$chatNotificationResult)
{
$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|" . (int)$arResult["GROUP_ID"],
"NOTIFY_MESSAGE" => str_replace(
"#NAME#",
"".$arResult["GROUP_NAME"]."",
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);
CSocNetUserToGroup::NotifyImToModerators(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"])
));
}
}
}
else
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if ($errorMessage === '')
{
$errorMessage = Loc::getMessage('SONET_UR_ERROR_CREATE_USER2GROUP');
}
$APPLICATION->ThrowException($errorMessage, "ERROR_CREATE_RELATION");
return false;
}
}
else
{
$APPLICATION->ThrowException(GetMessage("SONET_NO_USER2GROUP"), "ERROR_NO_GROUP_REQUEST");
return false;
}
CSocNetUserToGroup::__SpeedFileCheckMessages($targetUserID);
return true;
}