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 @@
+