From eb58f33b3272dbbeb4f58e119a36750f8929a54f Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Tue, 26 Nov 2024 11:19:53 +0300 Subject: [PATCH 1/3] Fix site handing after enabling user time zone feature --- .../OrchardCore.Users/Drivers/UserDisplayDriver.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Drivers/UserDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Users/Drivers/UserDisplayDriver.cs index ad0064b3699..11d0ac851d7 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Drivers/UserDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Drivers/UserDisplayDriver.cs @@ -126,7 +126,7 @@ public override async Task UpdateAsync(User user, UpdateEditorCo var userContext = new UserContext(user); // TODO This handler should be invoked through the create or update methods. // otherwise it will not be invoked when a workflow, or other operation, changes this value. - await _userEventHandlers.InvokeAsync((handler, context) => handler.DisabledAsync(userContext), userContext, _logger); + await _userEventHandlers.InvokeAsync((handler, context) => handler.DisabledAsync(context), userContext, _logger); } } else if (!isEditingDisabled && model.IsEnabled && !user.IsEnabled) @@ -135,7 +135,7 @@ public override async Task UpdateAsync(User user, UpdateEditorCo var userContext = new UserContext(user); // TODO This handler should be invoked through the create or update methods. // otherwise it will not be invoked when a workflow, or other operation, changes this value. - await _userEventHandlers.InvokeAsync((handler, context) => handler.EnabledAsync(userContext), userContext, _logger); + await _userEventHandlers.InvokeAsync((handler, context) => handler.EnabledAsync(context), userContext, _logger); } if (context.Updater.ModelState.IsValid) From 8ca9116252b6c7d96284c25083d8d08f52ee432c Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Tue, 26 Nov 2024 12:13:22 +0300 Subject: [PATCH 2/3] Separate the UserEventHandler & order the service registration --- .../TimeZone/Handlers/UserEventHandler.cs | 35 +++++++++++++++++++ .../TimeZone/Services/UserTimeZoneService.cs | 12 +------ .../OrchardCore.Users/TimeZone/Startup.cs | 6 ++-- 3 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs diff --git a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs new file mode 100644 index 00000000000..3a1bcc4be4b --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Caching.Distributed; +using OrchardCore.Users.Handlers; + +namespace OrchardCore.Users.TimeZone.Handlers; + +public class UserEventHandler : UserEventHandlerBase +{ + private const string CacheKey = "UserTimeZone/"; + + private readonly IDistributedCache _distributedCache; + + public UserEventHandler(IDistributedCache distributedCache) + { + _distributedCache = distributedCache; + } + + public override Task DeletedAsync(UserDeleteContext context) + => ForgetCacheAsync(context.User.UserName); + + public override Task UpdatedAsync(UserUpdateContext context) + => ForgetCacheAsync(context.User.UserName); + + public override Task DisabledAsync(UserContext context) + => ForgetCacheAsync(context.User.UserName); + + private Task ForgetCacheAsync(string userName) + { + var key = GetCacheKey(userName); + + return _distributedCache.RemoveAsync(key); + } + + private static string GetCacheKey(string userName) + => CacheKey + userName; +} diff --git a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs index 4077e66d1db..12ea8f60ba9 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs @@ -2,13 +2,12 @@ using Microsoft.Extensions.Caching.Distributed; using OrchardCore.Entities; using OrchardCore.Modules; -using OrchardCore.Users.Handlers; using OrchardCore.Users.Models; using OrchardCore.Users.TimeZone.Models; namespace OrchardCore.Users.TimeZone.Services; -public class UserTimeZoneService : UserEventHandlerBase, IUserTimeZoneService +public class UserTimeZoneService : IUserTimeZoneService { private const string CacheKey = "UserTimeZone/"; private const string EmptyTimeZone = "NoTimeZoneFound"; @@ -95,15 +94,6 @@ private async ValueTask GetTimeZoneIdAsync(string userName) return timeZoneId; } - public override Task DeletedAsync(UserDeleteContext context) - => ForgetCacheAsync(context.User.UserName); - - public override Task UpdatedAsync(UserUpdateContext context) - => ForgetCacheAsync(context.User.UserName); - - public override Task DisabledAsync(UserContext context) - => ForgetCacheAsync(context.User.UserName); - private Task ForgetCacheAsync(string userName) { var key = GetCacheKey(userName); diff --git a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Startup.cs index b43ff481c09..983456a04d4 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Startup.cs @@ -4,6 +4,7 @@ using OrchardCore.Users.Handlers; using OrchardCore.Users.Models; using OrchardCore.Users.TimeZone.Drivers; +using OrchardCore.Users.TimeZone.Handlers; using OrchardCore.Users.TimeZone.Services; namespace OrchardCore.Users.TimeZone; @@ -13,10 +14,9 @@ public sealed class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { + services.AddScoped(); + services.AddScoped(); services.AddScoped(); - services.AddScoped(); - services.AddScoped(sp => sp.GetRequiredService()); - services.AddScoped(sp => sp.GetRequiredService()); services.AddDisplayDriver(); } } From 25c2288514e0f1312d44690f0a48d704c2256880 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Tue, 26 Nov 2024 10:43:19 -0800 Subject: [PATCH 3/3] use internal method --- .../TimeZone/Handlers/UserEventHandler.cs | 2 +- .../TimeZone/Services/UserTimeZoneService.cs | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs index 3a1bcc4be4b..46a4cb0f059 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Handlers/UserEventHandler.cs @@ -30,6 +30,6 @@ private Task ForgetCacheAsync(string userName) return _distributedCache.RemoveAsync(key); } - private static string GetCacheKey(string userName) + internal static string GetCacheKey(string userName) => CacheKey + userName; } diff --git a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs index 12ea8f60ba9..e351ff8c5a6 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/TimeZone/Services/UserTimeZoneService.cs @@ -3,13 +3,13 @@ using OrchardCore.Entities; using OrchardCore.Modules; using OrchardCore.Users.Models; +using OrchardCore.Users.TimeZone.Handlers; using OrchardCore.Users.TimeZone.Models; namespace OrchardCore.Users.TimeZone.Services; public class UserTimeZoneService : IUserTimeZoneService { - private const string CacheKey = "UserTimeZone/"; private const string EmptyTimeZone = "NoTimeZoneFound"; private static readonly DistributedCacheEntryOptions _slidingExpiration = new() @@ -46,7 +46,6 @@ public async ValueTask GetAsync(string userName) return _clock.GetTimeZone(currentTimeZoneId); } - /// public ValueTask GetAsync(IUser user) => GetAsync(user?.UserName); @@ -58,7 +57,7 @@ public async ValueTask UpdateAsync(IUser user) /// private async ValueTask GetTimeZoneIdAsync(string userName) { - var key = GetCacheKey(userName); + var key = UserEventHandler.GetCacheKey(userName); var timeZoneId = await _distributedCache.GetStringAsync(key); @@ -96,11 +95,8 @@ private async ValueTask GetTimeZoneIdAsync(string userName) private Task ForgetCacheAsync(string userName) { - var key = GetCacheKey(userName); + var key = UserEventHandler.GetCacheKey(userName); return _distributedCache.RemoveAsync(key); } - - private static string GetCacheKey(string userName) - => CacheKey + userName; }