/// <summary> /// Gets settings at the specified owner. /// </summary> /// <param name="owner">The owner.</param> /// <param name="entityId">The entity identifier.</param> /// <returns>Settings.</returns> public SettingGroupDto[] Get(SettingOwnerDto owner, long entityId) { var settings = _settingValuesRepository .Get(PluginType.ServerAgent, (int)owner, entityId) .ToDictionary(_ => _.SettingId, _ => _); var settingIds = settings.Keys.ToArray(); // select all settings for the same owner but without value. var settingsWithoutValues = _settingRepository .Get(PluginType.ServerAgent, (int)owner) .Where(_ => settingIds.All(id => id != _.Id)) .ToArray(); if (settingsWithoutValues.Any()) { InitializeEmptySettings(entityId, settingsWithoutValues, settings); } var mainSettings = settings.ToDictionary( _ => _.Key, _ => new EntityDtoMap <SettingValues, SettingValueDto> { Entity = _.Value, Dto = _.Value.ToDto() }); foreach ( var parentSettingGroup in mainSettings.Where(_ => _.Value.Entity.Settings.ParentSettingId.HasValue) .GroupBy(_ => _.Value.Entity.Settings.ParentSettingId.Value)) { var childGroups = new Dictionary <string, SettingGroupDto>(); // ReSharper disable once LoopCanBeConvertedToQuery foreach (var parentSettingGroupItem in parentSettingGroup.GroupBy(_ => _.Value.Entity.Settings.ParentSettingItemKey)) { var items = parentSettingGroupItem.Select(_ => _.Value).ToList(); var childGroup = ArrangeSettings(items); childGroups.Add(parentSettingGroupItem.Key, childGroup); } var listItemGroups = mainSettings[parentSettingGroup.Key] .Dto .DefaultValue .FromJson <SettingSubitem[]>() .Select(_ => _.Key) .Select(_ => childGroups.ContainsKey(_) ? childGroups[_] : null) .ToArray(); mainSettings[parentSettingGroup.Key].Dto.ChildGroups.AddRange(listItemGroups); } var rootSettings = mainSettings.Where(_ => !_.Value.Entity.Settings.ParentSettingId.HasValue).Select(_ => _.Value).ToList(); var rootGroup = ArrangeSettings(rootSettings); return(rootGroup.Groups.ToArray()); }
/// <summary> /// Gets setting value at the specified owner and for the specified setting. /// </summary> /// <param name="owner">The owner.</param> /// <param name="entityId">The entity identifier.</param> /// <param name="settingKey">The setting key.</param> /// <returns>The setting value.</returns> public SettingValueDto Get(SettingOwnerDto owner, long entityId, string settingKey) { var settingValue = _settingValuesRepository .Get(PluginType.ServerAgent, (int)owner, entityId, settingKey); if (settingValue != null) { return(settingValue.ToDto()); } var setting = _settingRepository.Get(PluginType.ServerAgent, (int)owner, settingKey); if (setting == null) { return(null); } var dto = setting.GetDefaultValueDto(); var currentItem = dto.GetCurrentSubitem(); dto.Value = setting.SettingType == (int)SettingType.List ? currentItem.Key : currentItem.Text; settingValue = new SettingValues { EntityId = entityId, SettingId = setting.Id, Value = dto.Value, ProjectId = entityId }; _settingValuesRepository.Insert(settingValue); _settingGroupRepository.Save(); dto.Id = settingValue.Id; return(dto); }
public SettingGroupDto[] GetEntitySettings(SettingOwnerDto owner, long entityId) => _settingsHelper.Get(owner, entityId);