• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/Configuration/Configuration.php
  • Класс: BitrixImConfigurationConfiguration
  • Вызов: Configuration::getUserPreset
static function getUserPreset(int $userId): array
{
	$preset = self::getUserPresetFromCache($userId);

	if (!empty($preset))
	{
		$preset['notify']['settings'] =
			array_replace_recursive(
				Notification::getDefaultSettings(),
				($preset['notify']['settings'] ?? [])
			)
		;

		$preset['general']['settings'] =
			array_replace_recursive(
				General::getDefaultSettings(),
				($preset['general']['settings'] ?? [])
			)
		;

		return $preset;
	}

	$query = OptionGroupTable::query()
		->setSelect([
			'ID',
			'NAME',
			'SORT',
			'USER_ID',
			'NOTIFY_GROUP_ID' => 'OPTION_USER.NOTIFY_GROUP_ID',
			'GENERAL_GROUP_ID' => 'OPTION_USER.GENERAL_GROUP_ID'
		])
		->registerRuntimeField(
			'OPTION_USER',
			new Reference(
				'OPTION_USER',
				OptionUserTable::class,
				Join::on('this.ID', 'ref.NOTIFY_GROUP_ID')
					->logic('or')
					->whereColumn('this.ID', 'ref.GENERAL_GROUP_ID'),
				['join_type' => Join::TYPE_INNER]
			)
		)
		->where('OPTION_USER.USER_ID', $userId)
		->setLimit(2)
	;

	$rows = $query->fetchAll();

	if (empty($rows))
	{
		$presetId = self::restoreBindings($userId);

		if ($presetId === self::getDefaultPresetId())
		{
			$userPreset =  self::getDefaultUserPreset();
		}
		else
		{
			$preset = self::getPreset($presetId);
			$userPreset = [
				'notify' => $preset,
				'general' => $preset,
			];
		}

		self::setUserPresetInCache($userId, $userPreset);

		return $userPreset;
	}

	$notifyPreset = [];
	$generalPreset = [];
	foreach ($rows as $preset)
	{
		if ((int)$preset['ID'] === (int)$preset['NOTIFY_GROUP_ID'])
		{
			$notifyPreset = [
				'id' => $preset['ID'],
				'name' => self::getPresetName($preset),
				'sort' => $preset['SORT'],
				'userId' => $preset['USER_ID'],
				'settings' => Notification::getGroupSettings((int)$preset['ID'])
			];
		}

		if ((int)$preset['ID'] === (int)$preset['GENERAL_GROUP_ID'])
		{
			$generalPreset = [
				'id' => $preset['ID'],
				'name' => self::getPresetName($preset),
				'sort' => $preset['SORT'],
				'userId' => $preset['USER_ID'],
				'settings' => General::getGroupSettings((int)$preset['ID'])
			];
		}
	}

	//TODO extraordinary bag with not existing group from database
	if (empty($notifyPreset))
	{
		$notifyPreset = self::getDefaultUserPreset()['notify'];
	}
	if (empty($generalPreset))
	{
		$generalPreset = self::getDefaultUserPreset()['general'];
	}

	$userPreset = [
		'notify' => $notifyPreset,
		'general' => $generalPreset
	];
	self::setUserPresetInCache($userId, $userPreset);

	return $userPreset;
}