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