Browse Source

Merge pull request #16861 from abpframework/timezone

Add timezone settings to `SettingManagement` module.
pull/16946/head
liangshiwei 3 years ago
committed by GitHub
parent
commit
be25d7adbc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowChangingTimeZoneSettingsFeatureSimpleStateChecker.cs
  2. 14
      modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/ITimeZoneSettingsAppService.cs
  3. 3
      modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs
  4. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs
  5. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs
  6. 66
      modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/TimeZoneSettingsAppService.cs
  7. 1
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs
  8. 27
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor
  9. 65
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor.cs
  10. 49
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/TimeZonePageContributor.cs
  11. 1
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/el.json
  12. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json
  13. 3
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fi.json
  14. 1
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hr.json
  15. 3
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hu.json
  16. 1
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pt-BR.json
  17. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json
  18. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json
  19. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json
  20. 8
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs
  21. 2
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs
  22. 40
      modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/EmailSettingsClientProxy.Generated.cs
  23. 7
      modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/EmailSettingsClientProxy.cs
  24. 37
      modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/TimeZoneSettingsClientProxy.Generated.cs
  25. 7
      modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/TimeZoneSettingsClientProxy.cs
  26. 166
      modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/settingManagement-generate-proxy.json
  27. 37
      modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/TimeZoneSettingsController.cs
  28. 1
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs
  29. 21
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/TimeZoneSettingGroup/Default.cshtml
  30. 15
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/TimeZoneSettingGroup/Default.js
  31. 42
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.cs
  32. 3
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs
  33. 36
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/TimeZonePageContributor.cs
  34. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj
  35. 30
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/wwwroot/client-proxies/settingManagement-proxy.js

24
modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AllowChangingTimeZoneSettingsFeatureSimpleStateChecker.cs

@ -0,0 +1,24 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.SettingManagement;
public class AllowChangingTimeZoneSettingsFeatureSimpleStateChecker : ISimpleStateChecker<PermissionDefinition>
{
public async Task<bool> IsEnabledAsync(SimpleStateCheckerContext<PermissionDefinition> context)
{
var currentTenant = context.ServiceProvider.GetRequiredService<ICurrentTenant>();
if (!currentTenant.IsAvailable)
{
return true;
}
var featureChecker = context.ServiceProvider.GetRequiredService<IFeatureChecker>();
return await featureChecker.IsEnabledAsync(SettingManagementFeatures.EnableTimeZone);
}
}

14
modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/ITimeZoneSettingsAppService.cs

@ -0,0 +1,14 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace Volo.Abp.SettingManagement;
public interface ITimeZoneSettingsAppService : IApplicationService
{
Task<string> GetAsync();
Task<List<NameValue>> GetTimezonesAsync();
Task UpdateAsync(string timezone);
}

3
modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs

@ -15,6 +15,9 @@ public class SettingManagementPermissionDefinitionProvider : PermissionDefinitio
emailPermission.StateCheckers.Add(new AllowChangingEmailSettingsFeatureSimpleStateChecker());
emailPermission.AddChild(SettingManagementPermissions.EmailingTest, L("Permission:EmailingTest"));
moduleGroup.AddPermission(SettingManagementPermissions.TimeZone, L("Permission:TimeZone"));
emailPermission.StateCheckers.Add(new AllowChangingTimeZoneSettingsFeatureSimpleStateChecker());
}
private static LocalizableString L(string name)

4
modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs

@ -7,9 +7,11 @@ public class SettingManagementPermissions
public const string GroupName = "SettingManagement";
public const string Emailing = GroupName + ".Emailing";
public const string EmailingTest = Emailing + ".Test";
public const string TimeZone = GroupName + ".TimeZone";
public static string[] GetAll()
{
return ReflectionHelper.GetPublicConstantsRecursively(typeof(SettingManagementPermissions));

4
modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs

@ -1,6 +1,7 @@
using Volo.Abp.Application;
using Volo.Abp.Emailing;
using Volo.Abp.Modularity;
using Volo.Abp.Timing;
namespace Volo.Abp.SettingManagement;
@ -8,7 +9,8 @@ namespace Volo.Abp.SettingManagement;
typeof(AbpDddApplicationModule),
typeof(AbpSettingManagementDomainModule),
typeof(AbpSettingManagementApplicationContractsModule),
typeof(AbpEmailingModule)
typeof(AbpEmailingModule),
typeof(AbpTimingModule)
)]
public class AbpSettingManagementApplicationModule : AbpModule
{

66
modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/TimeZoneSettingsAppService.cs

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using TimeZoneConverter;
using Volo.Abp.Features;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Settings;
using Volo.Abp.Timing;
namespace Volo.Abp.SettingManagement;
[RequiresFeature(SettingManagementFeatures.EnableTimeZone)]
[Authorize(SettingManagementPermissions.TimeZone)]
public class TimeZoneSettingsAppService : SettingManagementAppServiceBase, ITimeZoneSettingsAppService
{
protected ISettingManager SettingManager { get; }
protected ISettingProvider SettingProvider { get; }
protected ITimezoneProvider TimezoneProvider { get; }
public TimeZoneSettingsAppService(ISettingManager settingManager, ISettingProvider settingProvider, ITimezoneProvider timezoneProvider)
{
SettingManager = settingManager;
SettingProvider = settingProvider;
TimezoneProvider = timezoneProvider;
}
public virtual async Task<string> GetAsync()
{
var timezone = await SettingProvider.GetOrNullAsync(TimingSettingNames.TimeZone);
return timezone ?? "UTC";
}
public virtual Task<List<NameValue>> GetTimezonesAsync()
{
var timezones = TimezoneProvider.GetWindowsTimezones()
.OrderBy(x => x.Name)
.Select(x => new NameValue( $"{x.Name} ({GetTimezoneOffset(TZConvert.GetTimeZoneInfo(x.Name))})", x.Name))
.ToList();
return Task.FromResult(timezones);
}
protected virtual string GetTimezoneOffset(TimeZoneInfo timeZoneInfo)
{
if (timeZoneInfo.BaseUtcOffset < TimeSpan.Zero)
{
return "-" + timeZoneInfo.BaseUtcOffset.ToString(@"hh\:mm");
}
return "+" + timeZoneInfo.BaseUtcOffset.ToString(@"hh\:mm");
}
public virtual async Task UpdateAsync(string timezone)
{
if (CurrentTenant.GetMultiTenancySide() == MultiTenancySides.Host)
{
await SettingManager.SetGlobalAsync(TimingSettingNames.TimeZone, timezone);
}
else
{
await SettingManager.SetForCurrentTenantAsync(TimingSettingNames.TimeZone, timezone);
}
}
}

1
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs

@ -41,6 +41,7 @@ public class AbpSettingManagementBlazorModule : AbpModule
Configure<SettingManagementComponentOptions>(options =>
{
options.Contributors.Add(new EmailingPageContributor());
options.Contributors.Add(new TimeZonePageContributor());
});
Configure<AbpLocalizationOptions>(options =>

27
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor

@ -0,0 +1,27 @@
@using Volo.Abp.SettingManagement.Localization
@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
@inject AbpBlazorMessageLocalizerHelper<AbpSettingManagementResource> LH
@if (TimezoneSettings != null)
{
<Form>
<Row>
<Column>
<Field>
<FieldLabel>@L["DisplayName:Timezone"] *</FieldLabel>
<Select TValue="string" SelectedValue="TimezoneSettings.Timezone" SelectedValueChanged="OnSelectedValueChangedAsync">
@foreach (var item in TimezoneSettings.TimeZoneItems)
{
<SelectItem Value="item.Value">@item.Name</SelectItem>
}
</Select>
</Field>
</Column>
</Row>
<Row>
<Column>
<SubmitButton Clicked="@UpdateSettingsAsync"/>
</Column>
</Row>
</Form>
}

65
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor.cs

@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.Messages;
using Volo.Abp.AspNetCore.Components.Web.Configuration;
using Volo.Abp.SettingManagement.Localization;
namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.TimeZoneSettingGroup;
public partial class TimeZoneSettingGroupViewComponent
{
[Inject]
protected ITimeZoneSettingsAppService TimeZoneSettingsAppService { get; set; }
[Inject]
private ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; }
[Inject]
protected IUiMessageService UiMessageService { get; set; }
protected UpdateTimezoneSettingsViewModel TimezoneSettings;
public TimeZoneSettingGroupViewComponent()
{
ObjectMapperContext = typeof(AbpSettingManagementBlazorModule);
LocalizationResource = typeof(AbpSettingManagementResource);
}
protected async override Task OnInitializedAsync()
{
TimezoneSettings = new UpdateTimezoneSettingsViewModel()
{
Timezone = await TimeZoneSettingsAppService.GetAsync(),
TimeZoneItems = await TimeZoneSettingsAppService.GetTimezonesAsync()
};
}
protected virtual async Task OnSelectedValueChangedAsync(string timezone)
{
TimezoneSettings.Timezone = timezone;
await InvokeAsync(StateHasChanged);
}
protected virtual async Task UpdateSettingsAsync()
{
try
{
await TimeZoneSettingsAppService.UpdateAsync(TimezoneSettings.Timezone);
await CurrentApplicationConfigurationCacheResetService.ResetAsync();
await UiMessageService.Success(L["SuccessfullySaved"]);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
}
public class UpdateTimezoneSettingsViewModel
{
public string Timezone { get; set; }
public List<NameValue> TimeZoneItems { get; set; }
}
}

49
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/TimeZonePageContributor.cs

@ -0,0 +1,49 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Volo.Abp.Features;
using Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.TimeZoneSettingGroup;
using Volo.Abp.SettingManagement.Localization;
using Volo.Abp.Timing;
namespace Volo.Abp.SettingManagement.Blazor.Settings;
public class TimeZonePageContributor : ISettingComponentContributor
{
public async Task ConfigureAsync(SettingComponentCreationContext context)
{
await CheckFeatureAsync(context);
var l = context.ServiceProvider.GetRequiredService<IStringLocalizer<AbpSettingManagementResource>>();
if (context.ServiceProvider.GetRequiredService<IClock>().SupportsMultipleTimezone)
{
context.Groups.Add(
new SettingComponentGroup(
"Volo.Abp.TimeZone",
l["Menu:TimeZone"],
typeof(TimeZoneSettingGroupViewComponent)
)
);
}
}
public async Task<bool> CheckPermissionsAsync(SettingComponentCreationContext context)
{
if (!await CheckFeatureAsync(context))
{
return false;
}
var authorizationService = context.ServiceProvider.GetRequiredService<IAuthorizationService>();
return await authorizationService.IsGrantedAsync(SettingManagementPermissions.TimeZone);
}
private async Task<bool> CheckFeatureAsync(SettingComponentCreationContext context)
{
var featureCheck = context.ServiceProvider.GetRequiredService<IFeatureChecker>();
return await featureCheck.IsEnabledAsync(SettingManagementFeatures.EnableTimeZone);
}
}

1
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/el.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "Διαχείριση ρυθμίσεων",
"Permission:Emailing": "Αποστολή email",
"Permission:EmailingTest": "Αποστολή δοκιμαστικού email",
"Permission:TimeZone": "Ζώνη ώρας",
"SendTestEmail": "Αποστολή δοκιμαστικού email",
"SenderEmailAddress": "Διεύθυνση email αποστολέα",
"TargetEmailAddress": "Διεύθυνση email παραλήπτη",

6
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "Setting Management",
"Permission:Emailing": "Emailing",
"Permission:EmailingTest": "Emailing test",
"Permission:TimeZone": "Time zone",
"SendTestEmail": "Send test email",
"SenderEmailAddress": "Sender email address",
"TargetEmailAddress": "Target email address",
@ -16,6 +17,8 @@
"SuccessfullySent": "Successfully sent",
"Send": "Send",
"Menu:Emailing": "Emailing",
"Menu:TimeZone": "Time zone",
"DisplayName:Timezone": "Time zone",
"SmtpHost": "Host",
"SmtpPort": "Port",
"SmtpUserName": "User name",
@ -29,6 +32,7 @@
"Feature:SettingManagementEnable": "Enable setting management",
"Feature:SettingManagementEnableDescription": "Enable setting management system in the application.",
"Feature:AllowChangingEmailSettings": "Allow changing email settings.",
"Feature:AllowChangingEmailSettingsDescription": "Allow changing email settings."
"Feature:AllowChangingEmailSettingsDescription": "Allow changing email settings.",
"Feature:EnableTimeZone": "Enable time zone"
}
}

3
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fi.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "Asetusten hallinta",
"Permission:Emailing": "Sähköpostiviestit",
"Permission:EmailingTest": "Sähköpostitesti",
"Permission:TimeZone": "Aikavyöhyke",
"SendTestEmail": "Lähetä testisähköposti",
"SenderEmailAddress": "Lähettäjän sähköpostiosoite",
"TargetEmailAddress": "Kohdesähköpostiosoite",
@ -31,4 +32,4 @@
"Feature:AllowChangingEmailSettings": "Salli sähköpostiasetusten muuttaminen.",
"Feature:AllowChangingEmailSettingsDescription": "Salli sähköpostiasetusten muuttaminen."
}
}
}

1
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hr.json

@ -7,6 +7,7 @@
"Permission:Emailing": "Slanje e-poštom",
"Permission:EmailingTest": "Test slanja e-pošte",
"SendTestEmail": "Po�alji probnu e-poštu",
"Permission:TimeZone": "Vremenska zona",
"SenderEmailAddress": "Adresa e-pošte pošiljatelja",
"TargetEmailAddress": "Ciljana adresa e-pošte",
"Subject": "Predmet",

3
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hu.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "Beállításkezelés",
"Permission:Emailing": "E-mailezés",
"Permission:EmailingTest": "E-mail teszt",
"Permission:TimeZone": "Időzóna",
"SendTestEmail": "Küldj teszt e-mailt",
"SenderEmailAddress": "Feladó e-mail címe",
"TargetEmailAddress": "Cél e-mail cím",
@ -31,4 +32,4 @@
"Feature:AllowChangingEmailSettings": "Az e-mail beállítások módosításának engedélyezése.",
"Feature:AllowChangingEmailSettingsDescription": "Az e-mail beállítások módosításának engedélyezése."
}
}
}

1
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pt-BR.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "Gestão de Cenários",
"Permission:Emailing": "Enviando por e-mail",
"Permission:EmailingTest": "Teste de e-mail",
"Permission:TimeZone": "Fuso horário",
"SendTestEmail": "Enviar e-mail de teste",
"SenderEmailAddress": "E-mail remetente",
"TargetEmailAddress": "E-mail destinatário",

6
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "Ayarlar yönetimi",
"Permission:Emailing": "Email",
"Permission:EmailingTest": "Email testi",
"Permission:TimeZone": "Zaman dilimi",
"SendTestEmail": "Test emaili gönder",
"SenderEmailAddress": "Gönderen email adresi",
"TargetEmailAddress": "Hedef email adresi",
@ -16,6 +17,8 @@
"SuccessfullySent": "Başarıyla gönderildi",
"Send": "Gönder",
"Menu:Emailing": "Email",
"Menu:TimeZone": "Zaman dilimi",
"DisplayName:Timezone": "Zaman dilimi",
"SmtpHost": "Sunucu",
"SmtpPort": "Port",
"SmtpUserName": "Kullanıcı adı",
@ -29,6 +32,7 @@
"Feature:SettingManagementEnable": "Ayar yönetimini etkinleştir",
"Feature:SettingManagementEnableDescription": "Uygulamada ayar yönetim sistemini etkinleştirin.",
"Feature:AllowChangingEmailSettings": "E-posta ayarlarını değiştirmeye izin verin.",
"Feature:AllowChangingEmailSettingsDescription": "E-posta ayarlarını değiştirmeye izin verin."
"Feature:AllowChangingEmailSettingsDescription": "E-posta ayarlarını değiştirmeye izin verin.",
"Feature:EnableTimeZone": "Zaman dilimini etkinleştir"
}
}

6
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "设置管理",
"Permission:Emailing": "邮件",
"Permission:EmailingTest": "邮件测试",
"Permission:TimeZone": "时区",
"SendTestEmail": "发送测试邮件",
"SenderEmailAddress": "发件人邮箱地址",
"TargetEmailAddress": "收件人邮箱地址",
@ -16,6 +17,8 @@
"SuccessfullySent": "发送成功",
"Send": "发送",
"Menu:Emailing": "邮件",
"Menu:TimeZone": "时区",
"DisplayName:Timezone": "时区",
"SmtpHost": "主机",
"SmtpPort": "端口",
"SmtpUserName": "用户名",
@ -29,6 +32,7 @@
"Feature:SettingManagementEnable": "启用设置管理",
"Feature:SettingManagementEnableDescription": "在应用程序中启用设置管理系统.",
"Feature:AllowChangingEmailSettings": "允许更改邮件设置.",
"Feature:AllowChangingEmailSettingsDescription": "允许更改邮件设置."
"Feature:AllowChangingEmailSettingsDescription": "允许更改邮件设置.",
"Feature:EnableTimeZone": "启用时区",
}
}

6
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json

@ -6,6 +6,7 @@
"Permission:SettingManagement": "設定管理",
"Permission:Emailing": "信箱",
"Permission:EmailingTest": "郵件測試",
"Permission:TimeZone": "時區",
"SendTestEmail": "發送測試郵件",
"SenderEmailAddress": "發送者電子郵件地址",
"TargetEmailAddress": "目標電子郵件地址",
@ -16,6 +17,8 @@
"SuccessfullySent": "成功發送",
"Send": "發送",
"Menu:Emailing": "信箱",
"Menu:TimeZone": "時區",
"DisplayName:Timezone": "時區",
"SmtpHost": "主機",
"SmtpPort": "Port",
"SmtpUserName": "帳號",
@ -29,6 +32,7 @@
"Feature:SettingManagementEnable": "啟用設定管理",
"Feature:SettingManagementEnableDescription": "在應用程序中啟用設定管理系統.",
"Feature:AllowChangingEmailSettings": "允許更改電子郵件設置。",
"Feature:AllowChangingEmailSettingsDescription": "允許更改電子郵件設置。"
"Feature:AllowChangingEmailSettingsDescription": "允許更改電子郵件設置。",
"Feature:EnableTimeZone": "啟用時區"
}
}

8
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatureDefinitionProvider.cs

@ -27,6 +27,14 @@ public class SettingManagementFeatureDefinitionProvider : FeatureDefinitionProvi
null,
new ToggleStringValueType(),
isAvailableToHost: false);
settingEnableFeature.CreateChild(
SettingManagementFeatures.EnableTimeZone,
"false",
L("Feature:EnableTimeZone"),
null,
new ToggleStringValueType(),
isAvailableToHost: true);
}
private static LocalizableString L(string name)

2
modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingManagementFeatures.cs

@ -7,4 +7,6 @@ public class SettingManagementFeatures
public const string Enable = GroupName + ".Enable";
public const string AllowChangingEmailSettings = GroupName + ".AllowChangingEmailSettings";
public const string EnableTimeZone = GroupName + ".EnableTimeZone";
}

40
modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/EmailSettingsClientProxy.Generated.cs

@ -0,0 +1,40 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.Abp.SettingManagement;
// ReSharper disable once CheckNamespace
namespace Volo.Abp.SettingManagement;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IEmailSettingsAppService), typeof(EmailSettingsClientProxy))]
public partial class EmailSettingsClientProxy : ClientProxyBase<IEmailSettingsAppService>, IEmailSettingsAppService
{
public virtual async Task<EmailSettingsDto> GetAsync()
{
return await RequestAsync<EmailSettingsDto>(nameof(GetAsync));
}
public virtual async Task UpdateAsync(UpdateEmailSettingsDto input)
{
await RequestAsync(nameof(UpdateAsync), new ClientProxyRequestTypeValue
{
{ typeof(UpdateEmailSettingsDto), input }
});
}
public virtual async Task SendTestEmailAsync(SendTestEmailInput input)
{
await RequestAsync(nameof(SendTestEmailAsync), new ClientProxyRequestTypeValue
{
{ typeof(SendTestEmailInput), input }
});
}
}

7
modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/EmailSettingsClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of EmailSettingsClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.Abp.SettingManagement;
public partial class EmailSettingsClientProxy
{
}

37
modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/TimeZoneSettingsClientProxy.Generated.cs

@ -0,0 +1,37 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.Abp.SettingManagement;
// ReSharper disable once CheckNamespace
namespace Volo.Abp.SettingManagement;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ITimeZoneSettingsAppService), typeof(TimeZoneSettingsClientProxy))]
public partial class TimeZoneSettingsClientProxy : ClientProxyBase<ITimeZoneSettingsAppService>, ITimeZoneSettingsAppService
{
public virtual async Task<string> GetAsync()
{
return await RequestAsync<string>(nameof(GetAsync));
}
public virtual async Task<List<NameValue>> GetTimezonesAsync()
{
return await RequestAsync<List<NameValue>>(nameof(GetTimezonesAsync));
}
public virtual async Task UpdateAsync(string timezone)
{
await RequestAsync(nameof(UpdateAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), timezone }
});
}
}

7
modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/Volo/Abp/SettingManagement/TimeZoneSettingsClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of TimeZoneSettingsClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.Abp.SettingManagement;
public partial class TimeZoneSettingsClientProxy
{
}

166
modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/ClientProxies/settingManagement-generate-proxy.json

@ -8,11 +8,57 @@
"controllerName": "EmailSettings",
"controllerGroupName": "EmailSettings",
"isRemoteService": true,
"isIntegrationService": false,
"apiVersion": null,
"type": "Volo.Abp.SettingManagement.EmailSettingsController",
"interfaces": [
{
"type": "Volo.Abp.SettingManagement.IEmailSettingsAppService"
"type": "Volo.Abp.SettingManagement.IEmailSettingsAppService",
"name": "IEmailSettingsAppService",
"methods": [
{
"name": "GetAsync",
"parametersOnMethod": [],
"returnValue": {
"type": "Volo.Abp.SettingManagement.EmailSettingsDto",
"typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto"
}
},
{
"name": "UpdateAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts",
"type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto",
"typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
}
},
{
"name": "SendTestEmailAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Abp.SettingManagement.SendTestEmailInput, Volo.Abp.SettingManagement.Application.Contracts",
"type": "Volo.Abp.SettingManagement.SendTestEmailInput",
"typeSimple": "Volo.Abp.SettingManagement.SendTestEmailInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
}
}
]
}
],
"actions": {
@ -106,6 +152,124 @@
"implementFrom": "Volo.Abp.SettingManagement.IEmailSettingsAppService"
}
}
},
"Volo.Abp.SettingManagement.TimeZoneSettingsController": {
"controllerName": "TimeZoneSettings",
"controllerGroupName": "TimeZoneSettings",
"isRemoteService": true,
"isIntegrationService": false,
"apiVersion": null,
"type": "Volo.Abp.SettingManagement.TimeZoneSettingsController",
"interfaces": [
{
"type": "Volo.Abp.SettingManagement.ITimeZoneSettingsAppService",
"name": "ITimeZoneSettingsAppService",
"methods": [
{
"name": "GetAsync",
"parametersOnMethod": [],
"returnValue": {
"type": "System.String",
"typeSimple": "string"
}
},
{
"name": "GetTimezonesAsync",
"parametersOnMethod": [],
"returnValue": {
"type": "System.Collections.Generic.List<Volo.Abp.NameValue>",
"typeSimple": "[Volo.Abp.NameValue]"
}
},
{
"name": "UpdateAsync",
"parametersOnMethod": [
{
"name": "timezone",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
}
}
]
}
],
"actions": {
"GetAsync": {
"uniqueName": "GetAsync",
"name": "GetAsync",
"httpMethod": "GET",
"url": "api/setting-management/timezone",
"supportedVersions": [],
"parametersOnMethod": [],
"parameters": [],
"returnValue": {
"type": "System.String",
"typeSimple": "string"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.SettingManagement.ITimeZoneSettingsAppService"
},
"GetTimezonesAsync": {
"uniqueName": "GetTimezonesAsync",
"name": "GetTimezonesAsync",
"httpMethod": "GET",
"url": "api/setting-management/timezone",
"supportedVersions": [],
"parametersOnMethod": [],
"parameters": [],
"returnValue": {
"type": "System.Collections.Generic.List<Volo.Abp.NameValue>",
"typeSimple": "[Volo.Abp.NameValue]"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.SettingManagement.ITimeZoneSettingsAppService"
},
"UpdateAsyncByTimezone": {
"uniqueName": "UpdateAsyncByTimezone",
"name": "UpdateAsync",
"httpMethod": "POST",
"url": "api/setting-management/timezone",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "timezone",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "timezone",
"name": "timezone",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.SettingManagement.ITimeZoneSettingsAppService"
}
}
}
}
}

37
modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/TimeZoneSettingsController.cs

@ -0,0 +1,37 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
namespace Volo.Abp.SettingManagement;
[RemoteService(Name = SettingManagementRemoteServiceConsts.RemoteServiceName)]
[Area(SettingManagementRemoteServiceConsts.ModuleName)]
[Route("api/setting-management/timezone")]
public class TimeZoneSettingsController : AbpControllerBase, ITimeZoneSettingsAppService
{
private readonly ITimeZoneSettingsAppService _timeZoneSettingsAppService;
public TimeZoneSettingsController(ITimeZoneSettingsAppService timeZoneSettingsAppService)
{
_timeZoneSettingsAppService = timeZoneSettingsAppService;
}
[HttpGet]
public Task<string> GetAsync()
{
return _timeZoneSettingsAppService.GetAsync();
}
[HttpGet]
public Task<List<NameValue>> GetTimezonesAsync()
{
return _timeZoneSettingsAppService.GetTimezonesAsync();
}
[HttpPost]
public Task UpdateAsync(string timezone)
{
return _timeZoneSettingsAppService.UpdateAsync(timezone);
}
}

1
modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs

@ -45,6 +45,7 @@ public class AbpSettingManagementWebModule : AbpModule
Configure<SettingManagementPageOptions>(options =>
{
options.Contributors.Add(new EmailingPageContributor());
options.Contributors.Add(new TimeZonePageContributor());
});
Configure<AbpVirtualFileSystemOptions>(options =>

21
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/TimeZoneSettingGroup/Default.cshtml

@ -0,0 +1,21 @@
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.SettingManagement.Localization
@inject IHtmlLocalizer<AbpSettingManagementResource> L
@model Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.TimeZoneSettingGroup.TimeZoneSettingGroupViewComponent.UpdateTimezoneSettingsViewModel
<abp-script src="/Pages/SettingManagement/Components/TimeZoneSettingGroup/Default.js" />
<form id="TimeZoneSettingsForm" method="post">
<abp-row>
<abp-column size-md="_12">
<div>
<abp-select asp-for="Timezone" asp-items="@Model.TimeZoneItems"/>
</div>
<div>
<abp-button button-type="Primary" type="submit">
<i class="fa fa-save"></i> @L["Save"]
</abp-button>
</div>
</abp-column>
</abp-row>
</form>

15
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/TimeZoneSettingGroup/Default.js

@ -0,0 +1,15 @@
(function ($) {
$(function () {
var l = abp.localization.getResource('AbpSettingManagement');
$("#TimeZoneSettingsForm").on('submit', function (event) {
event.preventDefault();
volo.abp.settingManagement.timeZoneSettings.update($("#Timezone").val()).then(function (result) {
$(document).trigger("AbpSettingSaved");
});
});
});
})(jQuery);

42
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.cs

@ -0,0 +1,42 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Auditing;
using Volo.Abp.Timing.Localization.Resources.AbpTiming;
namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.TimeZoneSettingGroup;
public class TimeZoneSettingGroupViewComponent : AbpViewComponent
{
protected ITimeZoneSettingsAppService TimeZoneSettingsAppService { get; }
public TimeZoneSettingGroupViewComponent(ITimeZoneSettingsAppService timeZoneSettingsAppService)
{
ObjectMapperContext = typeof(AbpSettingManagementWebModule);
TimeZoneSettingsAppService = timeZoneSettingsAppService;
}
public virtual async Task<IViewComponentResult> InvokeAsync()
{
var timezone = await TimeZoneSettingsAppService.GetAsync();
var timezones = await TimeZoneSettingsAppService.GetTimezonesAsync();
var model = new UpdateTimezoneSettingsViewModel()
{
Timezone = timezone,
TimeZoneItems = new List<SelectListItem>()
};
model.TimeZoneItems.AddRange(timezones.Select(x => new SelectListItem(x.Name, x.Value)).ToList());
return View("~/Pages/SettingManagement/Components/TimeZoneSettingGroup/Default.cshtml", model);
}
public class UpdateTimezoneSettingsViewModel
{
public string Timezone { get; set; }
public List<SelectListItem> TimeZoneItems { get; set; }
}
}

3
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Volo.Abp.SettingManagement.Localization;

36
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/TimeZonePageContributor.cs

@ -0,0 +1,36 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Volo.Abp.SettingManagement.Localization;
using Volo.Abp.SettingManagement.Web.Pages.SettingManagement;
using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup;
using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.TimeZoneSettingGroup;
using Volo.Abp.Timing;
namespace Volo.Abp.SettingManagement.Web.Settings;
public class TimeZonePageContributor : SettingPageContributorBase
{
public TimeZonePageContributor()
{
RequiredFeatures(SettingManagementFeatures.EnableTimeZone);
}
public override Task ConfigureAsync(SettingPageCreationContext context)
{
var l = context.ServiceProvider.GetRequiredService<IStringLocalizer<AbpSettingManagementResource>>();
if (context.ServiceProvider.GetRequiredService<IClock>().SupportsMultipleTimezone)
{
context.Groups.Add(
new SettingPageGroup(
"Volo.Abp.TimeZone",
l["Menu:TimeZone"],
typeof(TimeZoneSettingGroupViewComponent)
)
);
}
return Task.CompletedTask;
}
}

4
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj

@ -41,8 +41,4 @@
<Content Remove="wwwroot\**\*.css" />
</ItemGroup>
<ItemGroup>
<Folder Include="Pages\SettingManagement\Components" />
</ItemGroup>
</Project>

30
modules/setting-management/src/Volo.Abp.SettingManagement.Web/wwwroot/client-proxies/settingManagement-proxy.js

@ -38,6 +38,36 @@
})();
// controller volo.abp.settingManagement.timeZoneSettings
(function(){
abp.utils.createNamespace(window, 'volo.abp.settingManagement.timeZoneSettings');
volo.abp.settingManagement.timeZoneSettings.get = function(ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/setting-management/timezone',
type: 'GET'
}, { dataType: 'text' }, ajaxParams));
};
volo.abp.settingManagement.timeZoneSettings.getTimezones = function(ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/setting-management/timezone',
type: 'GET'
}, ajaxParams));
};
volo.abp.settingManagement.timeZoneSettings.update = function(timezone, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/setting-management/timezone' + abp.utils.buildQueryString([{ name: 'timezone', value: timezone }]) + '',
type: 'POST',
dataType: null
}, ajaxParams));
};
})();
})();

Loading…
Cancel
Save