• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/Configuration/Notification.php
  • Класс: BitrixImConfigurationNotification
  • Вызов: Notification::updateGroupSettings
static function updateGroupSettings(int $groupId, array $settings): void
{
	if (!$settings)
	{
		return;
	}
	$encodedSettings = self::encodeSettings($settings);
	$defaultSettings = self::encodeSettings(self::getDefaultSettings());

	$query =
		OptionStateTable::query()
			->setSelect(['NAME', 'VALUE'])
			->where('GROUP_ID', $groupId)
			->whereLike('NAME', self::ENTITY . '%')
	;
	$addedSettings = [];
	$enabledSettings = [];
	$disabledSettings = [];
	foreach ($query->exec() as $row)
	{
		if (array_key_exists($row['NAME'], $encodedSettings))
		{
			if ($row['VALUE'] === $encodedSettings[$row['NAME']])
			{
				unset($encodedSettings[$row['NAME']]);
				continue;
			}
			if ($encodedSettings[$row['NAME']] === 'Y')
			{
				$enabledSettings[] = [
					'GROUP_ID' => $groupId,
					'NAME' => $row['NAME']
				];
				unset($encodedSettings[$row['NAME']]);
				continue;
			}
			if ($encodedSettings[$row['NAME']] === 'N')
			{
				$disabledSettings[] = [
					'GROUP_ID' => $groupId,
					'NAME' => $row['NAME']
				];
				unset($encodedSettings[$row['NAME']]);
			}
		}
	}

	foreach ($encodedSettings as $name => $value)
	{
		if (!array_key_exists($name, $defaultSettings))
		{
			continue;
		}

		$addedSettings[] = [
			'GROUP_ID' => $groupId,
			'NAME' => $name,
			'VALUE' => $value
		];
	}
	if (!empty($addedSettings))
	{
		OptionStateTable::addMulti($addedSettings, true);
	}
	if (!empty($enabledSettings))
	{
		OptionStateTable::updateMulti($enabledSettings, ['VALUE' => 'Y'], true);
	}
	if (!empty($disabledSettings))
	{
		OptionStateTable::updateMulti($disabledSettings, ['VALUE' => 'N'], true);
	}

}