• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connectors/network.php
  • Класс: BitrixImConnectorConnectorsNetwork
  • Вызов: Network::getUserId
public function getUserId($params, bool $createUser = true)
{
	$userId = 0;
	if (empty($params['UUID']))
	{
		return $userId;
	}

	if (Loader::includeModule('im'))
	{
		$orm = UserTable::getList([
			'select' => [
				'ID',
				'NAME',
				'LAST_NAME',
				'PERSONAL_GENDER',
				'PERSONAL_PHOTO',
				'PERSONAL_WWW',
				'EMAIL'
			],
			'filter' => [
				'=EXTERNAL_AUTH_ID' => self::EXTERNAL_AUTH_ID,
				'=XML_ID' => 'network|' . $params['UUID']
			],
			'limit' => 1
		]);

		if ($userFields = $orm->fetch())
		{
			$userId = $userFields['ID'];

			$updateFields = [];
			if (
				!empty($params['NAME'])
				&& $params['NAME'] !== $userFields['NAME']
			)
			{
				$updateFields['NAME'] = $params['NAME'];
			}
			if (
				isset($params['LAST_NAME'])
				&& $params['LAST_NAME'] !== $userFields['LAST_NAME']
			)
			{
				$updateFields['LAST_NAME'] = $params['LAST_NAME'];
			}
			if (
				isset($params['PERSONAL_GENDER'])
				&& $params['PERSONAL_GENDER'] !== $userFields['PERSONAL_GENDER']
			)
			{
				$updateFields['PERSONAL_GENDER'] = $params['PERSONAL_GENDER'];
			}
			if (
				isset($params['PERSONAL_WWW'])
				&& $params['PERSONAL_WWW'] !== $userFields['PERSONAL_WWW']
			)
			{
				$updateFields['PERSONAL_WWW'] = $params['PERSONAL_WWW'];
			}
			if (
				isset($params['EMAIL'])
				&& $params['EMAIL'] !== $userFields['EMAIL']
			)
			{
				$updateFields['EMAIL'] = $params['EMAIL'];
			}

			if (
				isset($params['PERSONAL_PHOTO'])
				&& !empty($params['PERSONAL_PHOTO'])
			)
			{
				$userAvatar = User::uploadAvatar($params['PERSONAL_PHOTO'], $userId);
				if (
					$userAvatar
					&& $userFields['PERSONAL_PHOTO'] != $userAvatar
				)
				{
					$connection = Application::getConnection();
					$connection->query(
						'UPDATE b_user SET PERSONAL_PHOTO = '
						. (int)$userAvatar
						. ' WHERE ID = '
						. (int)$userId
					);
					$updateFields['ID'] = $userId;
				}
			}

			if (!empty($updateFields))
			{
				$cUser = new CUser;
				$cUser->Update($userId, $updateFields);
			}
		}
		elseif ($createUser)
		{
			$userName = $params['NAME'] ?: Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_GUEST_NAME');
			$userLastName = $params['LAST_NAME'];
			$userGender = $params['PERSONAL_GENDER'];
			$userWww = $params['PERSONAL_WWW'];
			$userEmail = $params['EMAIL'];

			$cUser = new CUser;
			$fields = [];
			$fields['LOGIN'] = self::MODULE_ID_IMOPENLINES . '_' . rand(1000,9999) . randString(5);
			$fields['NAME'] = $userName;
			$fields['LAST_NAME'] = $userLastName;

			if ($userEmail)
			{
				$fields['EMAIL'] = $userEmail;
			}

			$fields['PERSONAL_GENDER'] = $userGender;
			$fields['PERSONAL_WWW'] = $userWww;
			$fields['PASSWORD'] = md5($fields['LOGIN'] . '|' . rand(1000,9999) . '|' . time());
			$fields['CONFIRM_PASSWORD'] = $fields['PASSWORD'];
			$fields['EXTERNAL_AUTH_ID'] = self::EXTERNAL_AUTH_ID;
			$fields['XML_ID'] =  'network|'.$params['UUID'];
			$fields['ACTIVE'] = 'Y';

			$userId = $cUser->Add($fields);

			if ($userId && $params['PERSONAL_PHOTO'])
			{
				$userAvatar = User::uploadAvatar($params['PERSONAL_PHOTO'], $userId);

				$connection = Application::getConnection();
				$connection->query(
					'UPDATE b_user SET PERSONAL_PHOTO = '
					. (int)$userAvatar
					. ' WHERE ID = '
					. (int)$userId
				);
			}
		}
	}

	return $userId;
}