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