• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_settings.php
  • Класс: CIMSettings
  • Вызов: CIMSettings::Set
static function Set($type, $value, $userId = false)
{
	if (!in_array($type, [self::SETTINGS, self::NOTIFY], true))
	{
		return false;
	}

	global $USER_FIELD_MANAGER;

	$userId = $userId === false ? null : $userId;
	$userId = Common::getUserId($userId);
	if (!$userId)
	{
		return null;
	}

	if (Manager::isSettingsMigrated() || Manager::isUserMigrated($userId))
	{
		$newFormatSettings['notify'] =
			$type === self::NOTIFY
				? self::convertNotifySettingsToNewFormat($value)
				: []
		;

		$newFormatSettings['general'] =
			$type === self::SETTINGS
				? array_replace_recursive(General::getDefaultSettings(), $value)
				: []
		;
		return Manager::setUserSettings($userId, $newFormatSettings)->isSuccess();
	}

	if (isset($value[self::STATUS]))
	{
		CIMStatus::Set($userId, ['STATUS' => $value[self::STATUS]]);
	}
	if (isset($value['openDesktopFromPanel']) && CModule::IncludeModule('pull'))
	{
		Event::add($userId, [
			'module_id' => 'im',
			'command' => 'settingsUpdate',
			'expiry' => 5,
			'params' => [
				'openDesktopFromPanel' => $value['openDesktopFromPanel'],
			],
			'extra' => Common::getPullExtra()
		]);
	}

	$arDefault = self::GetDefaultSettings($type);
	foreach ($value as $key => $val)
	{
		if (isset($arDefault[$key]) && $arDefault[$key] == $val)
		{
			if ($key === self::PRIVACY_SEARCH)
			{
				$USER_FIELD_MANAGER->Update("USER", $userId, ['UF_IM_SEARCH' => '']);
			}
			unset($value[$key]);
		}
	}
	CUserOptions::SetOption('im', $type, $value, false, $userId);

	if (isset($value[self::PRIVACY_SEARCH]))
	{
		$USER_FIELD_MANAGER->Update("USER", $userId, ['UF_IM_SEARCH' => $value[self::PRIVACY_SEARCH]]);
	}

	return true;
}