From 9bc2f26a967ebe7dcbfa4b0256555c8f795a5b64 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 11 Feb 2013 11:39:54 -0800 Subject: [PATCH] Creating "contenttype" rule for layers --HG-- branch : 1.x --- .../Handlers/DisplayedContentItemHandler.cs | 25 +++++++++++++++++++ .../Orchard.Widgets/Orchard.Widgets.csproj | 2 ++ .../ContentDisplayedRuleProvider.cs | 23 +++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Widgets/Handlers/DisplayedContentItemHandler.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/ContentDisplayedRuleProvider.cs diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Handlers/DisplayedContentItemHandler.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Handlers/DisplayedContentItemHandler.cs new file mode 100644 index 000000000..b82fc1494 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Handlers/DisplayedContentItemHandler.cs @@ -0,0 +1,25 @@ +using System.Collections.ObjectModel; +using Orchard.ContentManagement.Handlers; + +namespace Orchard.Widgets.Handlers { + /// + /// Saves references to content items which have been displayed during a request + /// + public class DisplayedContentItemDetailHandler : ContentHandler, IDisplayedContentItemHandler { + private readonly Collection _contentTypes = new Collection(); + + protected override void BuildDisplayShape(BuildDisplayContext context) { + if (context.DisplayType == "Detail") { + _contentTypes.Add(context.ContentItem.ContentType); + } + } + + public bool IsDisplayed(string contentType) { + return _contentTypes.Contains(contentType); + } + } + + public interface IDisplayedContentItemHandler: IDependency { + bool IsDisplayed(string contentType); + } +} \ 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 6b6719ad1..0a4534ae1 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -63,6 +63,7 @@ + @@ -78,6 +79,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/ContentDisplayedRuleProvider.cs b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/ContentDisplayedRuleProvider.cs new file mode 100644 index 000000000..ee79b97de --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/ContentDisplayedRuleProvider.cs @@ -0,0 +1,23 @@ +using System; +using Orchard.Widgets.Handlers; +using Orchard.Widgets.Services; + +namespace Orchard.Widgets.RuleEngine { + public class ContentDisplayedRuleProvider : IRuleProvider { + private readonly IDisplayedContentItemHandler _displayedContentItemHandler; + + public ContentDisplayedRuleProvider(IDisplayedContentItemHandler displayedContentItemHandler) { + _displayedContentItemHandler = displayedContentItemHandler; + } + + public void Process(RuleContext ruleContext) { + if (!String.Equals(ruleContext.FunctionName, "contenttype", StringComparison.OrdinalIgnoreCase)) { + return; + } + + var contentType = Convert.ToString(ruleContext.Arguments[0]); + + ruleContext.Result = _displayedContentItemHandler.IsDisplayed(contentType); + } + } +} \ No newline at end of file