• Модуль: 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;
}