• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/invite_dialog.php
  • Класс: CIntranetInviteDialog
  • Вызов: CIntranetInviteDialog::TransferExtranetUser
static function TransferExtranetUser($userId, $arParams = array())
{
	global $APPLICATION;

	$userId = (int)$userId;

	if (!($arUser = self::checkUserId($userId)))
	{
		$APPLICATION->ThrowException(Loc::getMessage("BX24_INVITE_DIALOG_USER_ID_NO_EXIST_ERROR"));
		return false;
	}

	$dbUser = CUser::GetList(
		"ID",
		"ASC",
		array(
			"=EMAIL" => $arUser["EMAIL"],
			"=EXTERNAL_AUTH_ID" => 'socservices',
		),
		array(
			"FIELDS" => array("ID", "ADMIN_NOTES", "EXTERNAL_AUTH_ID"),
			"SELECT" => array("UF_DEPARTMENT")
		)
	);
	if (
		($arUserCheck = $dbUser->Fetch())
		&& isset($arUserCheck["UF_DEPARTMENT"])
		&& (
			(
				is_array($arUserCheck["UF_DEPARTMENT"])
				&& (int)$arUserCheck["UF_DEPARTMENT"][0] > 0
			)
			|| (
				!is_array($arUserCheck["UF_DEPARTMENT"])
				&& (int)$arUserCheck["UF_DEPARTMENT"] > 0
			)
		)
	)
	{
		$APPLICATION->ThrowException(Loc::getMessage("BX24_INVITE_DIALOG_USER_EXIST_ERROR1", [
			"#EMAIL#" => $arUser["EMAIL"],
		]));
		return false;
	}

	if (
		!isset($arParams["SITE_ID"])
		|| empty($arParams["SITE_ID"])
	)
	{
		$arParams["SITE_ID"] = SITE_ID;
	}

	$bExtranetUser = (
		!isset($arParams['UF_DEPARTMENT'])
		|| empty($arParams['UF_DEPARTMENT'])
	);

	if (
		!isset($arParams["GROUP_ID"])
		|| empty($arParams["GROUP_ID"])
	)
	{
		$arParams["GROUP_ID"] = self::getUserGroups($arParams["SITE_ID"], $bExtranetUser);
	}

	self::$bSendPassword = true;
	$arFields = array(
		"EXTERNAL_AUTH_ID" => $arUser["EXTERNAL_AUTH_ID"],
		"GROUP_ID" => $arParams['GROUP_ID'],
		"PASSWORD" => Loc::getMessage('BX24_INVITE_DIALOG_PASSWORD_SAME'),
		"NAME" => $arUser["NAME"],
		"LAST_NAME" => $arUser["LAST_NAME"],
		"EMAIL" => $arUser["EMAIL"],
		"UF_DEPARTMENT" => !is_array($arParams["UF_DEPARTMENT"]) ? array($arParams["UF_DEPARTMENT"]) : $arParams["UF_DEPARTMENT"],
		"ADMIN_NOTES" => str_replace("~deactivated~", "", $arUser["ADMIN_NOTES"]),
		"ACTIVE" => "Y"
	);

	if (
		isset($arParams["POSITION"])
		&& (string)$arParams["POSITION"] !== ''
	)
	{
		$arFields["POSITION"] = $arParams["POSITION"];
	}

	foreach(GetModuleEvents("intranet", "OnTransferExtranetUser", true) as $arEvent)
	{
		if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
		{
			return false;
		}
	}

	$obUser = new CUser;
	if ($obUser->Update($userId, $arFields))
	{
		$dbUser = CUser::GetByID($userId);
		$arUser = $dbUser->Fetch();

		$arFields['ID'] = $userId;
		foreach (GetModuleEvents("intranet", "OnAfterTransferExtranetUser", true) as $arEvent)
		{
			ExecuteModuleEventEx($arEvent, array($arUser));
		}
		foreach (GetModuleEvents("intranet", "OnRegisterUser", true) as $arEvent)
		{
			ExecuteModuleEventEx($arEvent, [ $arFields ]);
		}

		self::sentTransferNotification($arUser, $arFields, $arParams);

		return $userId;
	}

	$APPLICATION->ThrowException(Loc::getMessage("BX24_INVITE_DIALOG_ERROR_EXTRANET_USER_TRANSFER"));
	return false;
}