- Модуль: 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);
}
}