mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Adding Culture Rule Provider. this required a change to the IRuleProvider to be an IEventHandler rather than a direct IDependency
This commit is contained in:
@@ -75,6 +75,7 @@
|
||||
<Compile Include="Controllers\CutlureSelectorController.cs" />
|
||||
<Compile Include="Models\TransliterationSpecificationRecord.cs" />
|
||||
<Compile Include="Providers\CultureSelectorSelector.cs" />
|
||||
<Compile Include="RuleEngine\ContentDisplayedRuleProvider.cs" />
|
||||
<Compile Include="Services\AdminDirectionalityFactory.cs" />
|
||||
<Compile Include="Services\CultureSelectorFactory.cs" />
|
||||
<Compile Include="Services\LocalizationCultureFilter.cs" />
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using Orchard.Events;
|
||||
using Orchard.Localization.Services;
|
||||
using Orchard.Mvc;
|
||||
|
||||
namespace Orchard.Localization.RuleEngine {
|
||||
public interface IRuleProvider : IEventHandler {
|
||||
void Process(dynamic ruleContext);
|
||||
}
|
||||
|
||||
public class CultureRuleProvider : IRuleProvider {
|
||||
private readonly ICultureManager _cultureManager;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public CultureRuleProvider(ICultureManager cultureManager, IHttpContextAccessor httpContextAccessor) {
|
||||
_cultureManager = cultureManager;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
public void Process(dynamic ruleContext) {
|
||||
if (!String.Equals(ruleContext.FunctionName, "culture-code", StringComparison.OrdinalIgnoreCase)) {
|
||||
ProcessCultureCode(ruleContext);
|
||||
}
|
||||
|
||||
if (!String.Equals(ruleContext.FunctionName, "culture-lcid", StringComparison.OrdinalIgnoreCase)) {
|
||||
ProcessCultureId(ruleContext);
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessCultureCode(dynamic ruleContext) {
|
||||
var httpContext = _httpContextAccessor.Current();
|
||||
var currentUserCulture = CultureInfo.GetCultureInfo(_cultureManager.GetCurrentCulture(httpContext));
|
||||
|
||||
ruleContext.Result = ((object[])ruleContext.Arguments)
|
||||
.Cast<string>()
|
||||
.Select(CultureInfo.GetCultureInfo)
|
||||
.Any(c => c.Name == currentUserCulture.Name);
|
||||
}
|
||||
|
||||
private void ProcessCultureId(dynamic ruleContext) {
|
||||
var httpContext = _httpContextAccessor.Current();
|
||||
var currentUserCulture = CultureInfo.GetCultureInfo(_cultureManager.GetCurrentCulture(httpContext));
|
||||
|
||||
ruleContext.Result = ((object[])ruleContext.Arguments)
|
||||
.Cast<int>()
|
||||
.Select(CultureInfo.GetCultureInfo)
|
||||
.Any(c => c.Name == currentUserCulture.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,16 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Scripting;
|
||||
using Orchard.Widgets.Services;
|
||||
|
||||
namespace Orchard.Widgets.RuleEngine {
|
||||
public class RuleManager : IRuleManager {
|
||||
private readonly IEnumerable<IRuleProvider> _ruleProviders;
|
||||
private readonly IRuleProvider _ruleProviders;
|
||||
private readonly IEnumerable<IScriptExpressionEvaluator> _evaluators;
|
||||
|
||||
public RuleManager(IEnumerable<IRuleProvider> ruleProviders, IEnumerable<IScriptExpressionEvaluator> evaluators) {
|
||||
public RuleManager(IRuleProvider ruleProviders, IEnumerable<IScriptExpressionEvaluator> evaluators) {
|
||||
_ruleProviders = ruleProviders;
|
||||
_evaluators = evaluators;
|
||||
T = NullLocalizer.Instance;
|
||||
@@ -44,9 +45,7 @@ namespace Orchard.Widgets.RuleEngine {
|
||||
Result = context.Result
|
||||
};
|
||||
|
||||
foreach(var ruleProvider in _ruleManager._ruleProviders) {
|
||||
ruleProvider.Process(ruleContext);
|
||||
}
|
||||
_ruleManager._ruleProviders.Process(ruleContext);
|
||||
|
||||
context.Result = ruleContext.Result;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
namespace Orchard.Widgets.Services {
|
||||
public interface IRuleProvider : IDependency {
|
||||
using Orchard.Events;
|
||||
|
||||
namespace Orchard.Widgets.Services {
|
||||
public interface IRuleProvider : IEventHandler {
|
||||
void Process(RuleContext ruleContext);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user