From e8c5addc2d52be5c96f409b77f61511daae3e5eb Mon Sep 17 00:00:00 2001 From: Suha Can Date: Tue, 22 Jun 2010 13:00:42 -0700 Subject: [PATCH] - Adding an item reference content field. - Moving text content field editor from parts to fields folder. --HG-- branch : dev --- .../ItemReferenceContentFieldDriver.cs | 46 +++++++++++++++++++ .../Fields/ItemReferenceContentField.cs | 8 ++++ .../ItemReferenceContentFieldHandler.cs | 9 ++++ .../ItemReferenceContentFieldDisplayModel.cs | 12 +++++ ...temReferenceContentFieldEditorViewModel.cs | 12 +++++ .../Common.ItemReferenceContentField.ascx | 3 ++ .../Common.ItemReferenceContentField.ascx | 3 ++ .../Common.TextContentField.ascx | 0 src/Orchard.Web/Core/Orchard.Core.csproj | 9 +++- 9 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/Orchard.Web/Core/Common/Drivers/ItemReferenceContentFieldDriver.cs create mode 100644 src/Orchard.Web/Core/Common/Fields/ItemReferenceContentField.cs create mode 100644 src/Orchard.Web/Core/Common/Handlers/ItemReferenceContentFieldHandler.cs create mode 100644 src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldDisplayModel.cs create mode 100644 src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldEditorViewModel.cs create mode 100644 src/Orchard.Web/Core/Common/Views/DisplayTemplates/Fields/Common.ItemReferenceContentField.ascx create mode 100644 src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields/Common.ItemReferenceContentField.ascx rename src/Orchard.Web/Core/Common/Views/EditorTemplates/{Parts => Fields}/Common.TextContentField.ascx (100%) diff --git a/src/Orchard.Web/Core/Common/Drivers/ItemReferenceContentFieldDriver.cs b/src/Orchard.Web/Core/Common/Drivers/ItemReferenceContentFieldDriver.cs new file mode 100644 index 000000000..2c2b3c8ba --- /dev/null +++ b/src/Orchard.Web/Core/Common/Drivers/ItemReferenceContentFieldDriver.cs @@ -0,0 +1,46 @@ +using JetBrains.Annotations; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Core.Common.Fields; +using Orchard.Core.Common.ViewModels; + +namespace Orchard.Core.Common.Drivers { + [UsedImplicitly] + public class ItemReferenceContentFieldDriver : ContentFieldDriver { + public IOrchardServices Services { get; set; } + private const string TemplateName = "Fields/Common.ItemReferenceContentField"; + + public ItemReferenceContentFieldDriver(IOrchardServices services) { + Services = services; + } + + protected override string Prefix { + get { return "ItemReferenceContentField"; } + } + + protected override DriverResult Display(ItemReferenceContentField field, string displayType) { + var model = new ItemReferenceContentFieldDisplayViewModel { + Item = Services.ContentManager.Get(field.ContentItemReference.Id) + }; + + return ContentFieldTemplate(model, TemplateName, Prefix); + } + + protected override DriverResult Editor(ItemReferenceContentField field) { + var model = BuildEditorViewModel(field); + return ContentFieldTemplate(model, TemplateName, Prefix).Location("primary", "6"); + } + + protected override DriverResult Editor(ItemReferenceContentField field, IUpdateModel updater) { + var model = BuildEditorViewModel(field); + updater.TryUpdateModel(model, Prefix, null, null); + return ContentFieldTemplate(model, TemplateName, Prefix).Location("primary", "6"); + } + + private ItemReferenceContentFieldEditorViewModel BuildEditorViewModel(ItemReferenceContentField field) { + return new ItemReferenceContentFieldEditorViewModel { + Item = Services.ContentManager.Get(field.ContentItemReference.Id) + }; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Fields/ItemReferenceContentField.cs b/src/Orchard.Web/Core/Common/Fields/ItemReferenceContentField.cs new file mode 100644 index 000000000..bd3e9b62b --- /dev/null +++ b/src/Orchard.Web/Core/Common/Fields/ItemReferenceContentField.cs @@ -0,0 +1,8 @@ +using Orchard.ContentManagement; +using Orchard.ContentManagement.Records; + +namespace Orchard.Core.Common.Fields { + public class ItemReferenceContentField : ContentField { + public ContentItemRecord ContentItemReference { get; set; } + } +} diff --git a/src/Orchard.Web/Core/Common/Handlers/ItemReferenceContentFieldHandler.cs b/src/Orchard.Web/Core/Common/Handlers/ItemReferenceContentFieldHandler.cs new file mode 100644 index 000000000..0e2afb3bd --- /dev/null +++ b/src/Orchard.Web/Core/Common/Handlers/ItemReferenceContentFieldHandler.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using Orchard.ContentManagement.Drivers; +using Orchard.ContentManagement.Handlers; + +namespace Orchard.Core.Common.Handlers { + public class ItemReferenceContentFieldHandler : ContentFieldHandler { + public ItemReferenceContentFieldHandler(IEnumerable contentFieldDrivers) : base(contentFieldDrivers) { } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldDisplayModel.cs b/src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldDisplayModel.cs new file mode 100644 index 000000000..5344396c8 --- /dev/null +++ b/src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldDisplayModel.cs @@ -0,0 +1,12 @@ +using Orchard.ContentManagement; + +namespace Orchard.Core.Common.ViewModels { + public class ItemReferenceContentFieldDisplayViewModel { + private ContentItem _item; + + public ContentItem Item { + get { return _item; } + set { _item = value; } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldEditorViewModel.cs b/src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldEditorViewModel.cs new file mode 100644 index 000000000..dd0249005 --- /dev/null +++ b/src/Orchard.Web/Core/Common/ViewModels/ItemReferenceContentFieldEditorViewModel.cs @@ -0,0 +1,12 @@ +using Orchard.ContentManagement; + +namespace Orchard.Core.Common.ViewModels { + public class ItemReferenceContentFieldEditorViewModel { + private ContentItem _item; + + public ContentItem Item { + get { return _item; } + set { _item = value; } + } + } +} diff --git a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Fields/Common.ItemReferenceContentField.ascx b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Fields/Common.ItemReferenceContentField.ascx new file mode 100644 index 000000000..ef1af1f37 --- /dev/null +++ b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Fields/Common.ItemReferenceContentField.ascx @@ -0,0 +1,3 @@ +<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Common.ViewModels"%> +<%= Html.ItemDisplayLink(Model.Item) %> \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields/Common.ItemReferenceContentField.ascx b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields/Common.ItemReferenceContentField.ascx new file mode 100644 index 000000000..ab522e34e --- /dev/null +++ b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields/Common.ItemReferenceContentField.ascx @@ -0,0 +1,3 @@ +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Common.ViewModels"%> +<%= Html.ItemEditLink(Model.Item) %> \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/EditorTemplates/Parts/Common.TextContentField.ascx b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields/Common.TextContentField.ascx similarity index 100% rename from src/Orchard.Web/Core/Common/Views/EditorTemplates/Parts/Common.TextContentField.ascx rename to src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields/Common.TextContentField.ascx diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index ca9327177..4b986156e 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -63,13 +63,18 @@ + + + + + @@ -203,9 +208,11 @@ + + - +