From 91fdba1e2c80ad62894b47c89f7cb588d7cb38b2 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 28 Jan 2016 23:15:13 +0100 Subject: [PATCH] Added LegacyRulesEvaluator. This will handle third-party modules that still implement the deprecated IRuleProvider. --- .../Providers/UrlRuleConditionTest.cs | 2 +- .../Providers/UrlCondition.cs | 3 +- .../CultureConditionProvider.cs} | 31 +++-------------- .../Orchard.Localization.csproj | 2 +- .../Orchard.Roles/Conditions/RoleCondition.cs | 6 ++-- .../Conditions/LegacyRulesEvaluator.cs | 33 +++++++++++++++++++ .../Orchard.Widgets/Orchard.Widgets.csproj | 1 + 7 files changed, 44 insertions(+), 34 deletions(-) rename src/Orchard.Web/Modules/Orchard.Localization/{RuleEngine/CultureRuleProvider.cs => Conditions/CultureConditionProvider.cs} (72%) create mode 100644 src/Orchard.Web/Modules/Orchard.Widgets/Conditions/LegacyRulesEvaluator.cs diff --git a/src/Orchard.Tests.Modules/Conditions/Providers/UrlRuleConditionTest.cs b/src/Orchard.Tests.Modules/Conditions/Providers/UrlRuleConditionTest.cs index f77b7e790..a3424d113 100644 --- a/src/Orchard.Tests.Modules/Conditions/Providers/UrlRuleConditionTest.cs +++ b/src/Orchard.Tests.Modules/Conditions/Providers/UrlRuleConditionTest.cs @@ -1,11 +1,11 @@ using System; using Autofac; using NUnit.Framework; +using Orchard.Conditions.Providers; using Orchard.Conditions.Services; using Orchard.Environment.Configuration; using Orchard.Mvc; using Orchard.Tests.Stubs; -using Orchard.Widgets.RuleEngine; namespace Orchard.Tests.Modules.Conditions.Providers { [TestFixture] diff --git a/src/Orchard.Web/Modules/Orchard.Conditions/Providers/UrlCondition.cs b/src/Orchard.Web/Modules/Orchard.Conditions/Providers/UrlCondition.cs index e861fc3f2..5a7e0b9d2 100644 --- a/src/Orchard.Web/Modules/Orchard.Conditions/Providers/UrlCondition.cs +++ b/src/Orchard.Web/Modules/Orchard.Conditions/Providers/UrlCondition.cs @@ -1,10 +1,9 @@ using System; -using System.Web; using Orchard.Conditions.Services; using Orchard.Environment.Configuration; using Orchard.Mvc; -namespace Orchard.Widgets.RuleEngine { +namespace Orchard.Conditions.Providers { public class UrlCondition : IConditionProvider { private readonly IHttpContextAccessor _httpContextAccessor; private readonly ShellSettings _shellSettings; diff --git a/src/Orchard.Web/Modules/Orchard.Localization/RuleEngine/CultureRuleProvider.cs b/src/Orchard.Web/Modules/Orchard.Localization/Conditions/CultureConditionProvider.cs similarity index 72% rename from src/Orchard.Web/Modules/Orchard.Localization/RuleEngine/CultureRuleProvider.cs rename to src/Orchard.Web/Modules/Orchard.Localization/Conditions/CultureConditionProvider.cs index 646f646a3..2aebd51b3 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/RuleEngine/CultureRuleProvider.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Conditions/CultureConditionProvider.cs @@ -3,41 +3,20 @@ using System.Globalization; using System.Linq; using Orchard.Events; -namespace Orchard.Localization.RuleEngine { - public interface IRuleProvider : IEventHandler { - void Process(dynamic ruleContext); - } +namespace Orchard.Localization.Conditions { public interface IConditionProvider : IEventHandler { void Evaluate(dynamic evaluationContext); } - public class CultureRuleProvider : IRuleProvider, IConditionProvider + public class CultureConditionProvider : IConditionProvider { private readonly WorkContext _workContext; - public CultureRuleProvider(WorkContext workContext) { + public CultureConditionProvider(WorkContext workContext) { _workContext = workContext; } - - public void Process(dynamic ruleContext) { - if (String.Equals(ruleContext.FunctionName, "culturecode", StringComparison.OrdinalIgnoreCase)) { - ProcessCultureCode(ruleContext); - } - - if (String.Equals(ruleContext.FunctionName, "culturelcid", StringComparison.OrdinalIgnoreCase)) { - ProcessCultureId(ruleContext); - } - - if (String.Equals(ruleContext.FunctionName, "cultureisrtl", StringComparison.OrdinalIgnoreCase)) { - ProcessCurrentCultureIsRtl(ruleContext); - } - - if (String.Equals(ruleContext.FunctionName, "culturelang", StringComparison.OrdinalIgnoreCase)) { - ProcessLanguageCode(ruleContext); - } - } - + public void Evaluate(dynamic evaluationContext) { if (String.Equals(evaluationContext.FunctionName, "culturecode", StringComparison.OrdinalIgnoreCase)) { @@ -93,7 +72,5 @@ namespace Orchard.Localization.RuleEngine { .Select(CultureInfo.GetCultureInfo) .Any(c => c.Name == currentUserCulture.Name); } - - } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj index d8e7b2415..1506d935a 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj +++ b/src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj @@ -101,7 +101,7 @@ - + diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Conditions/RoleCondition.cs b/src/Orchard.Web/Modules/Orchard.Roles/Conditions/RoleCondition.cs index 3bbe5497e..e5cfffd9c 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Conditions/RoleCondition.cs +++ b/src/Orchard.Web/Modules/Orchard.Roles/Conditions/RoleCondition.cs @@ -10,10 +10,10 @@ namespace Orchard.Roles.Conditions { void Evaluate(dynamic evaluationContext); } - public class RoleRuleProvider : IConditionProvider { + public class RoleConditionProvider : IConditionProvider { private readonly IAuthenticationService _authenticationService; - public RoleRuleProvider(IAuthenticationService authenticationService) { + public RoleConditionProvider(IAuthenticationService authenticationService) { _authenticationService = authenticationService; } @@ -30,7 +30,7 @@ namespace Orchard.Roles.Conditions { var roles = ((object[])evaluationContext.Arguments).Cast(); var userRoles = user.As(); - evaluationContext.Result = userRoles != null ? userRoles.Roles.Intersect(roles).Count() > 0 : false; + evaluationContext.Result = userRoles != null && userRoles.Roles.Intersect(roles).Any(); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Conditions/LegacyRulesEvaluator.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Conditions/LegacyRulesEvaluator.cs new file mode 100644 index 000000000..874b010fb --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Conditions/LegacyRulesEvaluator.cs @@ -0,0 +1,33 @@ +using System; +using Orchard.Conditions.Services; +using Orchard.Localization; +using Orchard.Widgets.Services; + +namespace Orchard.Widgets.Conditions { + /// + /// Evaluates rules implementing the deprecated IRuleProvider (third party modules). + /// + [Obsolete("This is here for backwards compatibility during the deprecation period.")] + public class LegacyRulesEvaluator : IConditionProvider { + private readonly IRuleProvider _ruleProviders; + + public LegacyRulesEvaluator(IRuleProvider ruleProviders) + { + _ruleProviders = ruleProviders; + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + public void Evaluate(ConditionEvaluationContext evaluationContext) { + var ruleContext = new RuleContext { + FunctionName = evaluationContext.FunctionName, + Arguments = evaluationContext.Arguments, + Result = evaluationContext.Result + }; + + _ruleProviders.Process(ruleContext); + evaluationContext.Result = ruleContext.Result; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index d2b1f1319..743ef8bd9 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -93,6 +93,7 @@ +