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