static function SendRequestToBeMember($userId, $groupId, $message, $requestConfirmUrl = "", $autoSubscribe = true): bool
{
global $APPLICATION;
$userId = (int)$userId;
if ($userId <= 0)
{
$APPLICATION->ThrowException(Loc::getMessage('SONET_UR_EMPTY_USERID'), 'ERROR_USERID');
return false;
}
$groupId = (int)$groupId;
if ($groupId <= 0)
{
$APPLICATION->ThrowException(Loc::getMessage('SONET_UR_EMPTY_GROUPID'), 'ERROR_GROUPID');
return false;
}
$groupFields = CSocNetGroup::GetByID($groupId);
if (
!$groupFields
|| !is_array($groupFields)
|| $groupFields["ACTIVE"] !== "Y"
/* || $arGroup["VISIBLE"] != "Y"*/)
{
$APPLICATION->ThrowException(Loc::getMessage('SONET_UG_ERROR_NO_GROUP_ID'), 'ERROR_NO_GROUP');
return false;
}
$relationFields = [
"USER_ID" => $userId,
"GROUP_ID" => $groupId,
"ROLE" => UserToGroupTable::ROLE_REQUEST,
"=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
"=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
"MESSAGE" => $message,
"INITIATED_BY_TYPE" => SONET_INITIATED_BY_USER,
"INITIATED_BY_USER_ID" => $userId
];
if ($groupFields["OPENED"] === "Y")
{
$relationFields["ROLE"] = UserToGroupTable::ROLE_USER;
}
$ID = CSocNetUserToGroup::Add($relationFields);
if (!$ID)
{
$errorMessage = "";
if ($e = $APPLICATION->GetException())
{
$errorMessage = $e->GetString();
}
if ($errorMessage === '')
{
$errorMessage = Loc::getMessage("SONET_UR_ERROR_CREATE_USER2GROUP");
}
$APPLICATION->ThrowException($errorMessage, "ERROR_CREATE_USER2GROUP");
return false;
}
BitrixSocialnetworkHelperUserToGroupRequestPopup::unsetHideRequestPopup([
'groupId' => $groupId,
'userId' => $userId,
]);
if ($groupFields["OPENED"] === "Y")
{
if ($autoSubscribe)
{
CSocNetLogEvents::AutoSubscribe($userId, SONET_ENTITY_GROUP, $groupId);
}
if (ModuleManager::isModuleInstalled('im'))
{
$chatNotificationResult = UserToGroup::addInfoToChat([
'group_id' => $groupId,
'user_id' => $userId,
'action' => UserToGroup::CHAT_ACTION_IN,
'role' => $relationFields['ROLE'],
]);
if (!$chatNotificationResult)
{
CSocNetUserToGroup::notifyImToModerators([
"TYPE" => "join",
"RELATION_ID" => $ID,
"USER_ID" => $userId,
"GROUP_ID" => $groupId,
"GROUP_NAME" => $groupFields["NAME"],
]);
}
}
}
elseif (
trim($requestConfirmUrl) !== ''
&& Loader::includeModule('im')
)
{
static $serverName;
if (!$serverName)
{
$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 = Option::get("main", "server_name");
}
if ($serverName === '')
{
$serverName = $_SERVER["SERVER_NAME"];
}
}
$serverName = (CMain::IsHTTPS() ? "https" : "http")."://".$serverName;
}
// send sonet system messages to owner and (may be) moderators to accept or refuse request
$FilterRole = (
$groupFields['INITIATE_PERMS'] === UserToGroupTable::ROLE_OWNER
? UserToGroupTable::ROLE_OWNER
: UserToGroupTable::ROLE_MODERATOR
);
$res = CSocNetUserToGroup::GetList(
array("USER_ID" => "ASC"),
array(
"GROUP_ID" => $groupId,
"<=ROLE" => $FilterRole,
"USER_ACTIVE" => "Y"
),
false,
false,
array("ID", "USER_ID", "USER_NAME", "USER_LAST_NAME", "USER_EMAIL")
);
if ($res)
{
$groupSiteId = CSocNetGroup::GetDefaultSiteId($groupId, $groupFields["SITE_ID"]);
$workgroupsPage = COption::GetOptionString("socialnetwork", "workgroups_page", "/workgroups/", SITE_ID);
$groupUrlTemplate = Path::get('group_path_template');
$groupUrlTemplate = "#GROUPS_PATH#" . mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
$groupUrl = str_replace(array("#group_id#", "#GROUP_ID#"), $groupId, $groupUrlTemplate);
while ($recipientRelationFields = $res->fetch())
{
$arTmp = CSocNetLogTools::ProcessPath(
[
"GROUP_URL" => $groupUrl,
],
$recipientRelationFields["USER_ID"],
$groupSiteId
);
$groupUrl = $arTmp["URLS"]["GROUP_URL"];
$domainName = (
mb_strpos($groupUrl, "http://") === 0
|| mb_strpos($groupUrl, "https://") === 0
? ""
: (
isset($arTmp["DOMAIN"])
&& !empty($arTmp["DOMAIN"])
? "//".$arTmp["DOMAIN"]
: ""
)
);
$messageFields = array(
"TO_USER_ID" => $recipientRelationFields["USER_ID"],
"FROM_USER_ID" => $userId,
"NOTIFY_TYPE" => IM_NOTIFY_CONFIRM,
"NOTIFY_MODULE" => "socialnetwork",
"NOTIFY_EVENT" => "invite_group_btn",
"NOTIFY_TAG" => "SOCNET|REQUEST_GROUP|" . $userId . "|" . $groupId . "|" . $ID . "|" . $recipientRelationFields["USER_ID"],
"NOTIFY_SUB_TAG" => "SOCNET|REQUEST_GROUP|" . $userId."|" . $groupId . "|" . $ID,
"NOTIFY_TITLE" => str_replace(
"#GROUP_NAME#",
truncateText($groupFields["NAME"], 150),
Loc::getMessage('SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY')
),
"NOTIFY_MESSAGE" => str_replace(
[
"#TEXT#",
"#GROUP_NAME#",
],
[
$message,
"".$groupFields["NAME"].""
],
(empty($message)
? Loc::getMessage('SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY')
: Loc::getMessage('SONET_UG_REQUEST_CONFIRM_TEXT')
)
),
"NOTIFY_BUTTONS" => [
[
"TITLE" => Loc::getMessage('SONET_UG_REQUEST_CONFIRM'),
"VALUE" => "Y",
"TYPE" => "accept",
],
[
"TITLE" => Loc::getMessage('SONET_UG_REQUEST_REJECT'),
"VALUE" => "N",
"TYPE" => "cancel",
],
],
);
$groupUrl = $serverName.str_replace("#group_id#", $groupId, Path::get('group_path_template'));
$messageFields["NOTIFY_MESSAGE_OUT"] = $messageFields["NOTIFY_MESSAGE"];
$messageFields["NOTIFY_MESSAGE_OUT"] .= "nn".GetMessage("SONET_UG_GROUP_LINK").$groupUrl;
$messageFields['NOTIFY_MESSAGE_OUT'] .= "nn".GetMessage("SONET_UG_REQUEST_CONFIRM_REJECT").": ".$requestConfirmUrl;
CIMNotify::Add($messageFields);
}
}
}
return true;
}