• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/user_group.php
  • Класс: CAllSocNetUserToGroup
  • Вызов: CAllSocNetUserToGroup::RejectRequestToBeMember
static function RejectRequestToBeMember($userId, $groupId, $relationIdList): bool
{
	global $APPLICATION, $USER;

	$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;
	}

	if (!is_array($relationIdList))
	{
		return true;
	}

	$groupFields = CSocNetGroup::GetByID($groupId);
	if (!$groupFields || !is_array($groupFields))
	{
		$APPLICATION->ThrowException(Loc::getMessage("SONET_UG_ERROR_NO_GROUP_ID"), "ERROR_NO_GROUP");
		return false;
	}

	$groupSiteIdList = [];
	$rsGroupSite = CSocNetGroup::GetSite($groupId);
	while ($groupSiteFields = $rsGroupSite->fetch())
	{
		$groupSiteIdList[] = $groupSiteFields["LID"];
	}

	$userRole = CSocNetUserToGroup::GetUserRole($userId, $groupId);
	$userIsMember = ($userRole && in_array($userRole, UserToGroupTable::getRolesMember(), true));
	$bCanInitiate = (
		$USER->IsAdmin()
		|| CSocNetUser::IsCurrentUserModuleAdmin($groupSiteIdList)
		|| (
			$userRole
			&& (
				(
					$groupFields["INITIATE_PERMS"] === UserToGroupTable::ROLE_OWNER
					&& $userId === (int)$groupFields["OWNER_ID"]
				)
				|| (
					$groupFields["INITIATE_PERMS"] === UserToGroupTable::ROLE_MODERATOR
					&& in_array($userRole, [ UserToGroupTable::ROLE_OWNER, UserToGroupTable::ROLE_MODERATOR ], true)
				)
				|| (
					$groupFields["INITIATE_PERMS"] === UserToGroupTable::ROLE_USER
					&& $userIsMember
				)
			)
		)
	);

	if (!$bCanInitiate)
	{
		$APPLICATION->ThrowException(GetMessage("SONET_UG_ERROR_NO_PERMS"), "ERROR_NO_PERMS");
		return false;
	}

	$bSuccess = true;
	foreach ($relationIdList as $relationId)
	{
		$relationId = (int)$relationId;
		if ($relationId <= 0)
		{
			continue;
		}

		$arRelation = CSocNetUserToGroup::GetByID($relationId);
		if (!$arRelation)
		{
			continue;
		}

		if (
			(int)$arRelation["GROUP_ID"] !== $groupId
			|| $arRelation["INITIATED_BY_TYPE"] !== SONET_INITIATED_BY_USER
			|| $arRelation["ROLE"] !== UserToGroupTable::ROLE_REQUEST
		)
		{
			continue;
		}

		if (CSocNetUserToGroup::Delete($arRelation["ID"]))
		{
			$arMessageFields = array(
				"FROM_USER_ID" => $userId,
				"TO_USER_ID" => $arRelation["USER_ID"],
				"MESSAGE" => str_replace(
					'#NAME#',
					$groupFields['NAME'],
					Loc::getMessage('SONET_UG_REJECT_MEMBER_MESSAGE_G')
				),
				"=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
				"MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM
			);
			CSocNetMessages::Add($arMessageFields);

			BitrixSocialnetworkHelperUserToGroupRequestPopup::unsetHideRequestPopup([
				'groupId' => (int)$groupId,
				'userId' => (int)$arRelation['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_CONFIRM_MEMBER");
			$bSuccess = false;
		}
	}

	return $bSuccess;
}