using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; using Volo.Abp.Emailing; using Volo.Abp.Settings; using Volo.Abp.Timing; using ValueType = Volo.Abp.Settings.ValueType; namespace LY.MicroService.Applications.Single.Settings; public class SystemGroupSettingDefinitionProvider : SettingDefinitionProvider { private const string GroupName = "System"; protected ITimezoneProvider TimezoneProvider { get; } protected AbpLocalizationOptions LocalizationOptions { get; } protected IStringLocalizerFactory StringLocalizerFactory { get; } public SystemGroupSettingDefinitionProvider( ITimezoneProvider timezoneProvider, IStringLocalizerFactory stringLocalizerFactory, IOptions localizationOptions) { TimezoneProvider = timezoneProvider; StringLocalizerFactory = stringLocalizerFactory; LocalizationOptions = localizationOptions.Value; } public override void Define(ISettingDefinitionContext context) { SetSystemSettingGroup(context); SetEmailSettingGroup(context); } private void SetSystemSettingGroup(ISettingDefinitionContext context) { context.GetOrNull(LocalizationSettingNames.DefaultLanguage) ?.WithGroup(GroupName, L("Settings:System"), order: 0) ?.WithParent("Language", L("Settings:System.Language"), order: 0) ?.WithOrder(0) ?.WithOptions(LocalizationOptions.Languages.Select(l => new NameValue(l.DisplayName, l.CultureName))); var timezoneSetting = context.GetOrNull(TimingSettingNames.TimeZone); if (timezoneSetting != null) { var stringLocalizer = StringLocalizerFactory.Create(); var timezones = TimeZoneHelper.GetTimezones(TimezoneProvider.GetIanaTimezones()); timezones.Insert(0, new NameValue { Name = stringLocalizer["DefaultTimeZone"], Value = "Unspecified" }); timezoneSetting .WithGroup( GroupName, L("Settings:System"), order: 0, requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.TimeZone]) .WithParent("Timing", L("Settings:System.Timing"), order: 0) .WithOrder(1) .WithOptions(timezones); } } private static void SetEmailSettingGroup(ISettingDefinitionContext context) { context.GetOrNull(EmailSettingNames.DefaultFromAddress) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Default", L("Settings:Emailing.Default"), order: 0) ?.WithOrder(0) ?.WithValueType(ValueType.String) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.DefaultFromDisplayName) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Default", L("Settings:Emailing.Default"), order: 0) ?.WithOrder(1) ?.WithValueType(ValueType.String) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.Domain) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(0) ?.WithValueType(ValueType.String) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.Host) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(1) ?.WithValueType(ValueType.String) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.Port) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(2) ?.WithValueType(ValueType.Number) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.UserName) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(3) ?.WithValueType(ValueType.String) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.Password) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(4) ?.WithValueType(ValueType.String) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.EnableSsl) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(5) ?.WithValueType(ValueType.Boolean) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); context.GetOrNull(EmailSettingNames.Smtp.UseDefaultCredentials) ?.WithGroup( "Emailing", L("Settings:Emailing"), order: 1, requiredFeatures: [SettingManagementFeatures.Enable, SettingManagementFeatures.AllowChangingEmailSettings], requiredPermissions: [Volo.Abp.SettingManagement.SettingManagementPermissions.Emailing]) ?.WithParent( "Smtp", L("Settings:Emailing.Smtp"), order: 1, requiredPermissions: [AbpSettingManagementPermissions.Settings.Manager]) ?.WithOrder(6) ?.WithValueType(ValueType.Boolean) ?.ReplaceProviders( DefaultValueSettingValueProvider.ProviderName, ConfigurationSettingValueProvider.ProviderName, GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName); } public static LocalizableString L(string name) { return LocalizableString.Create(name); } }