Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

User Localization settings #13181

Merged
merged 48 commits into from
Feb 13, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
249482d
User Localization settings
Skrypt Jan 31, 2023
78156fd
React to comment
Skrypt Jan 31, 2023
b8974b9
Something that works
Skrypt Jan 31, 2023
4ed3b3b
await NullProviderCultureResult;
Skrypt Jan 31, 2023
2b9b926
return default
Skrypt Feb 1, 2023
4260675
Set the user default culture to the localization default culture if n…
hishamco Jan 12, 2024
619834f
Set the user default time zone to the site settings default time zone…
hishamco Jan 12, 2024
1a9d823
UserLocalizationStartup -> Startup
hishamco Jan 12, 2024
125f7be
Refactoring
hishamco Jan 12, 2024
357fe3a
UserTimeZoneStartup -> Startup
hishamco Jan 12, 2024
e582c31
Refactoring
hishamco Jan 12, 2024
cbb4d6f
Use file-scope namespace
hishamco Jan 12, 2024
15e3a77
Add TimeZones to UserTimeZoneViewModel
hishamco Jan 12, 2024
7a38792
Remove extra whitespace
hishamco Jan 12, 2024
f6f789b
Merge branch 'main' into skrypt/admin-user-localization-setting
Piedone Jan 14, 2024
245bc8b
Add release note
hishamco Jan 15, 2024
a599188
Fix indentation
hishamco Jan 15, 2024
376b00a
Refactoring
hishamco Jan 15, 2024
a103b5f
CultureClaimType as constant
hishamco Jan 15, 2024
2a04a1b
Add comment on ConfigureOrder
hishamco Jan 15, 2024
64102fd
Add GetCulture() extension method
hishamco Jan 15, 2024
362e1a5
Address the feedback
hishamco Jan 15, 2024
6fc7e32
Remove unnecessary Configure() method
hishamco Jan 16, 2024
4d5cd8b
Set the configuration order on OrchardCore.Users.Localization
hishamco Jan 16, 2024
f6da84b
Remove ConfigureOrder from OrchardCore.Users.Localization
hishamco Jan 16, 2024
2b6a88a
Revert changes from OC.Localization
hishamco Jan 16, 2024
98eba6d
Merge branch 'main' into skrypt/admin-user-localization-setting
hishamco Jan 19, 2024
69f1afa
Merge branch 'main' into skrypt/admin-user-localization-setting
hishamco Jan 23, 2024
f7436d5
Set the User Localization feature priority
hishamco Jan 23, 2024
67afc77
Fix issue with default culture not selected
Skrypt Jan 25, 2024
265f94b
Merge branch 'main' into skrypt/admin-user-localization-setting
Skrypt Jan 25, 2024
7df0224
Revert Timezone changes
Skrypt Jan 25, 2024
089b172
Revert changes timezone
Skrypt Jan 25, 2024
a835a88
Simplify
Skrypt Jan 26, 2024
6ace93d
cleanup using
Skrypt Jan 26, 2024
839721b
Try to support Invariant Culture
Skrypt Jan 29, 2024
9d397fb
Merge branch 'main' into skrypt/admin-user-localization-setting
Skrypt Jan 29, 2024
f50d427
Support InvariatCulture
Skrypt Jan 30, 2024
d90704d
Constants
Skrypt Jan 30, 2024
0eb60da
Merge branch 'main' into skrypt/admin-user-localization-setting
Skrypt Jan 30, 2024
6cfc324
Update src/docs/releases/1.9.0.md
Skrypt Feb 1, 2024
98f21f4
Constants => UserLocalizationConstants
Skrypt Feb 1, 2024
2714dc2
Merge branch 'skrypt/admin-user-localization-setting' of https://gith…
Skrypt Feb 1, 2024
979584e
Add doc
Skrypt Feb 1, 2024
f64587c
Merge branch 'main' into skrypt/admin-user-localization-setting
Skrypt Feb 12, 2024
1eff31d
Update src/docs/reference/modules/Users/README.md
Skrypt Feb 12, 2024
3b986b1
Update src/OrchardCore.Modules/OrchardCore.Users/Localization/ViewMod…
Skrypt Feb 12, 2024
bf7246c
Update src/OrchardCore.Modules/OrchardCore.Users/Localization/Drivers…
Skrypt Feb 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public override Task<IDisplayResult> EditAsync(UserLocalizationSettings section,
// If Invariant Culture is installed as a supported culture we bind it to a different culture code than String.Empty.
Skrypt marked this conversation as resolved.
Show resolved Hide resolved
if (cultureList.Where(c => c.Value == "").Any())
{
cultureList.Where(c => c.Value == "").FirstOrDefault().Value = Constants.Invariant;
cultureList.Where(c => c.Value == "").FirstOrDefault().Value = UserLocalizationConstants.Invariant;
}

model.SelectedCulture = section.Culture;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public Task GenerateAsync(IUser user, ClaimsIdentity claims)

if (localizationSetting.Culture != "none")
{
claims.AddClaim(new Claim(CultureClaimType, localizationSetting.Culture == Constants.Invariant ? "" : localizationSetting.Culture));
claims.AddClaim(new Claim(CultureClaimType, localizationSetting.Culture == UserLocalizationConstants.Invariant ? "" : localizationSetting.Culture));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpC
return NullProviderCultureResult;
}

return Task.FromResult(new ProviderCultureResult(userCulture == Constants.Invariant ? "" : userCulture));
return Task.FromResult(new ProviderCultureResult(userCulture == UserLocalizationConstants.Invariant ? "" : userCulture));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace OrchardCore.Users.Localization
{
public static class Constants
public static class UserLocalizationConstants
{
public const string Invariant = "invariant";
}
Expand Down
5 changes: 5 additions & 0 deletions src/docs/reference/modules/Users/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@ The module contains the following features apart from the base feature:
- Two-Factor Authentication Services: Provices Two-factor core services. This feature cannot be manually enabled or disable as it is enabled by dependency on demand.
- Two-Factor Email Method: Allows users to two-factor authenticate using an email.
- Two-Factor Authenticator App Method: Allows users to two-factor authenticate using any Authenticator App.
- User Localization: Allows ability to configure user culture per user from admin UI.

## Two-factor Authentication

Starting with version 1.7, OrchardCore is shipped with everything you need to secure your app with two-factor authentication. To use two-factor authentication, simply enable "Two-Factor Email Method" and/or "Two-Factor Authenticator App Method" features. You can configure the process based on your need by navigating to `Security` >> `Settings` >> `User Login`. Click on the "Two-Factor Authentication" tab and update the settings as needed.

## User Localization

This feature adds a `RequestCultureProvider` that will retrieve the current user culture from it's claims. This feature will set a new user claim with a `CultureClaimType` named "culture". The feature adds the ability to configure the culture per user from the admin UI. It also have a culture option to fallback to other ASP.NET Request Culture Providers by simply setting the user culture to "Use site's culture" which will also be the selected default value.
Skrypt marked this conversation as resolved.
Show resolved Hide resolved

## Custom Paths

If you want to specify custom paths to access the authentication related urls, you can change them by using this option in the appsettings.json:
Expand Down
21 changes: 20 additions & 1 deletion src/docs/releases/1.9.0.md
Skrypt marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,26 @@ public class AdminMenu : INavigationProvider
}
```

### Admin Routes

The `[Admin]` attribute now has optional parameters for a custom route template and route name. It works just like the `[Route(template, name)]` attribute, except it prepends the configured admin prefix. You can apply it to the controller or the action; if both are specified then the action's template takes precedence. The route name can contain `{area}`, `{controller}`, and `{action}`, which are substituted during mapping so the names can be unique for each action. This means you don't have to define these admin routes in your module's `Startup` class anymore, but that option is still available and supported. Take a look at this example:

```csharp
[Admin("Person/{action}/{id?}", "Person{action}")]
public class PersonController : Controller
{
[Admin("Person", "Person")]
public IActionResult Index() { ... }

public IActionResult Create() { ... }

public IActionResult Edit(string id) { ... }
}
```

In this example, (if the admin prefix remains the default "Admin") you can reach the Index action at `~/Admin/Person` (or by the route name `Person`), because its own action-level attribute took precedence. You can reach Create at `~/Admin/Person/Create` (route name `PersonCreate`) and Edit for the person whose identifier string is "john-doe" at `~/Admin/Person/john-doe` (route name `PersonEdit`).

## Users Module

Added new user localization feature that allows to set default culture per user in the admin UI.
Added a new User Localization feature that allows to be able to configure the culture per user from the admin UI.

Loading