• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/Configuration/Manager.php
  • Класс: BitrixImConfigurationManager
  • Вызов: Manager::setUserSetting
static function setUserSetting(int $userId, string $type, array $settings): Result
{
	$result = new Result();
	if (!in_array($type, [self::NOTIFY, self::GENERAL], true))
	{
		$result->addError(new Error('Incorrect data when receiving chat settings', 400));
		return $result;
	}

	$userPresetId =
		BitrixImModelOptionGroupTable::query()
			->addSelect('ID')
			->where('USER_ID', $userId)
			->fetch()
	;
	$userPresetId = $userPresetId['ID'] ?? null;

	if ($type === self::NOTIFY)
	{
		if (!$userPresetId)
		{
			$preset['notify'] = $settings;
			$preset['general'] = [];
			Configuration::createUserPreset($userId, $preset);

			return $result;
		}
		Notification::updateGroupSettings($userPresetId, $settings);
	}

	if ($type === self::GENERAL)
	{
		self::updateUserStatus($userId, $settings);

		self::sendSettingsChangeEvent($userId, $settings);

		self::disableUserSearch($userId, $settings);

		if (!$userPresetId)
		{
			$preset['general'] = array_replace_recursive(General::getDefaultSettings(), $settings);
			$preset['notify'] = [];
			Configuration::createUserPreset($userId, $preset);

			return $result;
		}
		General::updateGroupSettings($userPresetId, $settings);

		self::enableUserSearch($userId, $settings);
	}

	CacheManager::getPresetCache($userPresetId)->clearCache();
	CacheManager::getUserCache($userId)->clearCache();

	return $result;
}