Esempio n. 1
0
        /// <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());
        }
Esempio n. 2
0
        /// <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);