static function AddNewUser($SITE_ID, $arFields, &$strError)
{
global $APPLICATION, $USER;
$ID_ADDED = 0;
$bitrix24Installed = ModuleManager::isModuleInstalled('bitrix24');
if (
isset($arFields["DEPARTMENT_ID"])
&& !is_array($arFields["DEPARTMENT_ID"])
&& (int)$arFields["DEPARTMENT_ID"] > 0
)
{
$arFields["DEPARTMENT_ID"] = [ $arFields["DEPARTMENT_ID"] ];
}
$siteIdByDepartmentId = self::getUserSiteId(array(
"UF_DEPARTMENT" => isset($arFields["DEPARTMENT_ID"]) && is_array($arFields["DEPARTMENT_ID"])
? $arFields["DEPARTMENT_ID"][0] : "",
"SITE_ID" => $SITE_ID
));
$bExtranet = !isset($arFields["DEPARTMENT_ID"]);
$arGroups = self::getUserGroups($siteIdByDepartmentId, $bExtranet);
$strEmail = trim($arFields["ADD_EMAIL"]);
$strName = trim($arFields["ADD_NAME"]);
$strLastName = trim($arFields["ADD_LAST_NAME"]);
$strPosition = trim($arFields["ADD_POSITION"]);
if ($strEmail !== '')
{
$filter = array(
"=EMAIL"=> $strEmail
);
if (Loader::includeModule('socialnetwork'))
{
$externalAuthIdList = SocialnetworkComponentHelper::checkPredefinedAuthIdList(array_diff(BitrixMainUserTable::getExternalUserTypes(), [ 'email', 'shop' ]));
if (!empty($externalAuthIdList))
{
$filter['!@EXTERNAL_AUTH_ID'] = $externalAuthIdList;
}
}
$rsUser = UserTable::getList(array(
'filter' => $filter,
'select' => array("ID", "EXTERNAL_AUTH_ID", "UF_DEPARTMENT")
));
if ($arUser = $rsUser->Fetch())
{
if ($arUser["EXTERNAL_AUTH_ID"] === 'email' || $arUser["EXTERNAL_AUTH_ID"] === 'shop')
{
if ($arUser["EXTERNAL_AUTH_ID"] === 'shop' && Loader::includeModule("crm"))
{
$arGroups[] = BitrixCrmOrderBuyerGroup::getSystemGroupId();
}
$ID_TRANSFERRED = self::TransferEmailUser($arUser["ID"], array(
"GROUP_ID" => $arGroups,
"UF_DEPARTMENT" => $arFields["DEPARTMENT_ID"],
"SITE_ID" => $siteIdByDepartmentId,
"NAME" => $strName,
"LAST_NAME" => $strLastName,
"POSITION" => $strPosition
));
if (!$ID_TRANSFERRED)
{
if($e = $APPLICATION->GetException())
{
$strError = $e->GetString();
}
return false;
}
return $ID_TRANSFERRED;
}
if (
$bitrix24Installed
&& $arUser["EXTERNAL_AUTH_ID"] === 'socservices'
&& !empty($arFields["DEPARTMENT_ID"])
&& (
!isset($arUser["UF_DEPARTMENT"])
|| (
is_array($arUser["UF_DEPARTMENT"])
&& (int)$arUser["UF_DEPARTMENT"][0] <= 0
)
|| (
!is_array($arUser["UF_DEPARTMENT"])
&& (int)$arUser["UF_DEPARTMENT"] <= 0
)
)
&& !ModuleManager::isModuleInstalled('extranet')
)
{
$ID_TRANSFERRED = self::TransferExtranetUser($arUser["ID"], array(
"GROUP_ID" => $arGroups,
"UF_DEPARTMENT" => $arFields["DEPARTMENT_ID"],
"SITE_ID" => $siteIdByDepartmentId
));
if (!$ID_TRANSFERRED)
{
if($e = $APPLICATION->GetException())
{
$strError = $e->GetString();
}
return false;
}
return $ID_TRANSFERRED;
}
$strError = Loc::getMessage("BX24_INVITE_DIALOG_USER_EXIST_ERROR1", [
'#EMAIL#' => $strEmail,
]);
}
}
if ($strEmail === '')
{
if (
!isset($arFields["ADD_MAILBOX_ACTION"])
|| (string)$arFields['ADD_MAILBOX_USER'] === ''
|| (string)$arFields['ADD_MAILBOX_DOMAIN'] === ''
|| !in_array($arFields["ADD_MAILBOX_ACTION"], array("create", "connect"))
)
{
$strError = Loc::getMessage("BX24_INVITE_DIALOG_ERROR_EMPTY_EMAIL");
}
else
{
// email from mailbox
$strEmail = $arFields['ADD_MAILBOX_USER']."@".$arFields['ADD_MAILBOX_DOMAIN'];
}
}
if (!$strError)
{
$strPassword = self::GeneratePassword($siteIdByDepartmentId, $bExtranet);
self::setSendPassword($arFields["ADD_SEND_PASSWORD"] === "Y");
$site = CSite::GetByID($siteIdByDepartmentId)->Fetch();
$arUser = [
'LOGIN' => $strEmail,
'NAME' => $strName,
'LAST_NAME' => $strLastName,
'EMAIL' => $strEmail,
'PASSWORD' => $strPassword,
'GROUP_ID' => $arGroups,
'WORK_POSITION' => $strPosition,
'LID' => $siteIdByDepartmentId,
'LANGUAGE_ID' => $site['LANGUAGE_ID'],
'UF_DEPARTMENT' => $arFields['DEPARTMENT_ID'],
];
if (!self::getSendPassword())
{
$arUser["CONFIRM_CODE"] = Random::getString(8, true);
}
else
{
$arUser["B24NETWORK_CHECKWORD"] = Random::getString(16, true);
}
$obUser = new CUser;
$ID_ADDED = $obUser->Add($arUser);
if (!$ID_ADDED)
{
if($e = $APPLICATION->GetException())
{
$strError = $e->GetString();
}
else
{
$strError = $obUser->LAST_ERROR;
}
}
else
{
$userFields = $arUser;
$userFields['ID'] = $ID_ADDED;
foreach(GetModuleEvents("intranet", "OnRegisterUser", true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, [ $userFields ]);
}
if (self::getSendPassword())
{
$db_events = GetModuleEvents("main", "OnUserInitialize", true);
foreach($db_events as $arEvent)
{
ExecuteModuleEventEx($arEvent, array($ID_ADDED, $arUser));
}
$event = new Event(
'intranet',
'onUserAdded',
[
'originatorId' => $USER->getId(),
'userId' => [ $ID_ADDED ],
'type' => Invitation::TYPE_EMAIL
]
);
$event->send();
}
else
{
Invitation::add([
'USER_ID' => $ID_ADDED,
'TYPE' => Invitation::TYPE_EMAIL
]);
}
if (
$bExtranet
&& !$bitrix24Installed
&& !ModuleManager::isModuleInstalled('extranet')
)
{
$bExtranet = false;
}
$messageText = self::getInviteMessageText();
if (self::getSendPassword())
{
$serverName = (
(string)$site["SERVER_NAME"] !== ''
? $site["SERVER_NAME"]
: (
defined("SITE_SERVER_NAME") && SITE_SERVER_NAME !== ''
? SITE_SERVER_NAME
: Option::get('main', 'server_name')
)
);
if ($bitrix24Installed && Loader::includeModule('socialservices'))
{
$b24NetworkTransport = new CBitrix24NetOAuthInterface();
$uri = new BitrixMainWebUri(defined('B24NETWORK_NODE') ? B24NETWORK_NODE : 'https://www.bitrix24.net');
$uri->setPath('/invite/');
$uri->addParams([
'user_lang' => LANGUAGE_ID,
'client_id' => $b24NetworkTransport->getAppID(),
'profile_id' => $ID_ADDED,
'checkword' => $arUser["B24NETWORK_CHECKWORD"],
'accepted' => 'yes'
]);
$url = $uri->getLocator();
}
else
{
$url = (CMain::IsHTTPS() ? "https" : "http") . "://" . $serverName . $site["DIR"];
}
CEvent::SendImmediate(
$bitrix24Installed ? "BITRIX24_USER_ADD" : "INTRANET_USER_ADD",
$siteIdByDepartmentId,
array(
"EMAIL_TO" => $arUser["EMAIL"],
"LINK" => $url,
"USER_ID_FROM" => $USER->GetID(),
"PASSWORD" => $strPassword,
"USER_TEXT" => $messageText
)
);
}
else
{
$dbUser = CUser::GetByID($ID_ADDED);
$arUser = $dbUser->Fetch();
if ($bExtranet)
{
CEvent::SendImmediate("EXTRANET_INVITATION", $siteIdByDepartmentId, array(
"USER_ID" => $arUser["ID"],
"CHECKWORD" => $arUser["CONFIRM_CODE"],
"EMAIL" => $arUser["EMAIL"],
"USER_TEXT" => ''
));
}
elseif ($bitrix24Installed)
{
CEvent::SendImmediate("BITRIX24_USER_INVITATION", $siteIdByDepartmentId, array(
"EMAIL_FROM" => $USER->GetEmail(),
"USER_ID_FROM" => $USER->GetID(),
"EMAIL_TO" => $arUser["EMAIL"],
"LINK" => self::getInviteLink($arUser, $siteIdByDepartmentId),
"USER_TEXT" => $messageText
));
}
else
{
CEvent::SendImmediate("INTRANET_USER_INVITATION", $siteIdByDepartmentId, array(
"USER_ID_FROM" => $USER->GetID(),
"EMAIL_TO" => $arUser["EMAIL"],
"LINK" => self::getInviteLink($arUser, $siteIdByDepartmentId),
"USER_TEXT" => $messageText
));
}
}
}
}
return $ID_ADDED;
}