• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/invite_dialog.php
  • Класс: CIntranetInviteDialog
  • Вызов: CIntranetInviteDialog::RequestToSonetGroups
static function RequestToSonetGroups($arUserId, $arGroupCode, $arGroupName, $bExtranetUser = false)
{
	global $APPLICATION, $USER;

	$arGroupToAdd = array();
	$strError = false;

	if (!is_array($arUserId))
	{
		$arUserId = array($arUserId);
	}

	if (
		is_array($arGroupCode)
		&& !empty($arGroupCode)
		&& Loader::includeModule("socialnetwork")
	)
	{
		foreach ($arGroupCode as $group_code)
		{
			if(
				$bExtranetUser
				&& is_array($arGroupName)
				&& preg_match('/^(SGNd+)$/', $group_code, $match)
				&& isset($arGroupName[$match[1]])
				&& (string)$arGroupName[$match[1]] !== ''
				&& Loader::includeModule('extranet')
				&& Loader::includeModule('socialnetwork')
				&& BitrixSocialnetworkHelperWorkgroup::canCreate([
					'siteId' => CExtranet::GetExtranetSiteID(),
					'checkAdminSession' => false,
				])
			)
			{
				// check and create group, for extranet only

				$dbSubjects = CSocNetGroupSubject::GetList(
					array("SORT"=>"ASC", "NAME" => "ASC"),
					array("SITE_ID" => CExtranet::GetExtranetSiteID()),
					false,
					false,
					array("ID")
				);
				if ($arSubject = $dbSubjects->GetNext())
				{
					$arSocNetGroupFields = array(
						"NAME" => $arGroupName[$match[1]],
						"DESCRIPTION" => "",
						"VISIBLE" => "N",
						"OPENED" => "N",
						"CLOSED" => "N",
						"SUBJECT_ID" => $arSubject["ID"],
						"INITIATE_PERMS" => "E",
						"SPAM_PERMS" => "K",
						"SITE_ID" => array(SITE_ID, CExtranet::GetExtranetSiteID())
					);

					if ($group_id = CSocNetGroup::CreateGroup(
						$USER->GetID(),
						$arSocNetGroupFields,
						false
					))
					{
						$arGroupToAdd[] = $group_id;
					}
					elseif ($e = $APPLICATION->GetException())
					{
						$strError = $e->GetString();
					}
				}
			}
			elseif(preg_match('/^SG(d+)$/', $group_code, $match))
			{
				$group_id = $match[1];
				if (
					($arGroup = CSocNetGroup::GetByID($group_id))
					&& ($arCurrentUserPerms = CSocNetUserToGroup::InitUserPerms($USER->GetID(), $arGroup, CSocNetUser::IsCurrentUserModuleAdmin(SITE_ID, false)))
					&& $arCurrentUserPerms["UserCanInitiate"]
					&& $arGroup["CLOSED"] !== "Y"
				)
				{
					$arGroupToAdd[] = $group_id;
				}
			}
		}

		if (!$strError)
		{
			foreach ($arGroupToAdd as $group_id)
			{
				foreach ($arUserId as $user_id)
				{
					if (
						!CSocNetUserToGroup::SendRequestToJoinGroup($USER->GetID(), $user_id, $group_id, "", false)
						&& $e = $APPLICATION->GetException()
					)
					{
						$strError .= $e->GetString();
					}
				}
			}
		}
	}

	return $strError;
}