- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/ical/mailinvitation/helper.php
- Класс: BitrixCalendarICalMailInvitationHelper
- Вызов: Helper::getExternalUserByEmail
static function getExternalUserByEmail($params, &$errorText): ?int
{
$userId = null;
$user = null;
if (
!is_array($params)
|| empty($params['EMAIL'])
|| !check_email($params['EMAIL'])
|| !Loader::includeModule('mail')
)
{
return $userId;
}
$userEmail = $params['EMAIL'];
if (
empty($userEmail)
|| !check_email($userEmail)
)
{
return $userId;
}
$res = CUser::getList(
$o = "ID",
$b = "ASC",
[
"=EMAIL" => $userEmail,
"!EXTERNAL_AUTH_ID" => BitrixMainUserTable::getExternalUserTypes(),
],
[
"FIELDS" => [ "ID", "EXTERNAL_AUTH_ID", "ACTIVE" ]
]
);
while (($emailUser = $res->fetch()) && !$userId)
{
if (
(int)$emailUser["ID"] > 0
&& (
$emailUser["ACTIVE"] === "Y"
|| $emailUser["EXTERNAL_AUTH_ID"] === "email"
)
)
{
if ($emailUser["ACTIVE"] === "N") // email only
{
$user = new CUser;
$user->update($emailUser["ID"], [
'ACTIVE' => 'Y'
]);
}
$userId = $emailUser['ID'];
}
}
if (!$userId)
{
$userFields = [
'EMAIL' => $userEmail,
'NAME' => $params["NAME"] ?? '',
'LAST_NAME' => $params["LAST_NAME"] ?? ''
];
// create "external" user by email
$user = BitrixMailUser::create($userFields);
$errorMessage = false;
if (is_object($user) && $user->LAST_ERROR !== '')
{
$errorMessage = $user->LAST_ERROR;
}
if (!$errorMessage && (int)$user > 0)
{
$userId = (int)$user;
}
else
{
$errorText = $errorMessage;
}
}
if (!is_object($user) && (int)$userId > 0)
{
BitrixMainUISelectorEntities::save([
'context' => Util::getUserSelectorContext(),
'code' => 'U'.$userId
]);
}
return $userId;
}