From 4db45c2050e9aece3af4b567ebeec802114f8e63 Mon Sep 17 00:00:00 2001 From: loudej Date: Tue, 5 Jan 2010 02:28:47 +0000 Subject: [PATCH] Changing item editor model from templates array to zones paradigm --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4044983 --- .../PartDriverHandlerTests.cs | 8 ++-- .../Common/Providers/BodyAspectHandler.cs | 4 +- .../Common/Providers/CommonAspectHandler.cs | 4 +- src/Orchard.Web/Core/Orchard.Core.csproj | 4 +- .../Controllers/SiteSettingsDriver.cs | 22 ++++++++++ .../Settings/Models/SiteSettingsHandler.cs | 4 -- .../Views/Admin/{Index.aspx => Index.ascx} | 13 +++--- .../EditorTemplates/Items/Settings.Site.ascx | 5 +++ .../EditorTemplates/Items/Blogs.Blog.ascx | 4 +- .../EditorTemplates/Items/Blogs.BlogPost.ascx | 6 +-- .../ViewModels/ContentDetailsViewModel.cs | 15 ++++++- .../Controllers/AdminController.cs | 28 ++++++------ .../Models/SandboxSettingsRecord.cs | 3 -- .../EditorTemplates/Items/Sandbox.Page.ascx | 2 +- .../Parts/Sandbox.SiteSettings.ascx | 4 -- .../EditorTemplates/Items/Users.User.ascx | 2 +- .../DefaultContentManager.cs | 26 ++++------- .../Drivers/PartTemplateResult.cs | 7 +-- .../Handlers/BuildEditorModelContext.cs | 10 ++++- .../Handlers/TemplateFilterForRecord.cs | 11 ++++- .../ViewModels/ItemDisplayModel.cs | 27 +++--------- .../ViewModels/ItemEditorModel.cs | 18 ++++++-- src/Orchard/Mvc/Html/ItemDisplayExtensions.cs | 5 --- src/Orchard/Mvc/Html/ItemEditorExtensions.cs | 44 ------------------- .../Mvc/ViewEngines/LayoutViewEngine.cs | 6 +-- src/Orchard/Orchard.csproj | 1 + src/Orchard/UI/Zones/PartEditorZoneItem.cs | 15 +++++++ src/Orchard/UI/Zones/ZoneCollection.cs | 9 ++-- 28 files changed, 155 insertions(+), 152 deletions(-) create mode 100644 src/Orchard.Web/Core/Settings/Controllers/SiteSettingsDriver.cs rename src/Orchard.Web/Core/Settings/Views/Admin/{Index.aspx => Index.ascx} (69%) create mode 100644 src/Orchard.Web/Core/Settings/Views/EditorTemplates/Items/Settings.Site.ascx create mode 100644 src/Orchard/UI/Zones/PartEditorZoneItem.cs diff --git a/src/Orchard.Tests/ContentManagement/PartDriverHandlerTests.cs b/src/Orchard.Tests/ContentManagement/PartDriverHandlerTests.cs index 7e454fcf5..24fd2fbd3 100644 --- a/src/Orchard.Tests/ContentManagement/PartDriverHandlerTests.cs +++ b/src/Orchard.Tests/ContentManagement/PartDriverHandlerTests.cs @@ -12,6 +12,7 @@ using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.ViewModels; +using Orchard.UI.Zones; namespace Orchard.Tests.ContentManagement { [TestFixture] @@ -60,10 +61,11 @@ namespace Orchard.Tests.ContentManagement { item.Weld(new StubPart { Foo = new[] { "a", "b", "c" } }); var ctx = new BuildDisplayModelContext(new ItemDisplayModel(item), ""); - Assert.That(ctx.DisplayModel.Displays.Count(), Is.EqualTo(0)); + Assert.That(ctx.DisplayModel.Zones.Count(), Is.EqualTo(0)); contentHandler.BuildDisplayModel(ctx); - Assert.That(ctx.DisplayModel.Displays.Count(), Is.EqualTo(1)); - Assert.That(ctx.DisplayModel.Displays.Single().Prefix, Is.EqualTo("Stub")); + Assert.That(ctx.DisplayModel.Zones.Count(), Is.EqualTo(1)); + Assert.That(ctx.DisplayModel.Zones.Single().Key, Is.EqualTo("topmeta")); + Assert.That(ctx.DisplayModel.Zones.Single().Value.Items.OfType().Single().Prefix, Is.EqualTo("Stub")); } diff --git a/src/Orchard.Web/Core/Common/Providers/BodyAspectHandler.cs b/src/Orchard.Web/Core/Common/Providers/BodyAspectHandler.cs index 2f6003afa..6bdd0da12 100644 --- a/src/Orchard.Web/Core/Common/Providers/BodyAspectHandler.cs +++ b/src/Orchard.Web/Core/Common/Providers/BodyAspectHandler.cs @@ -21,13 +21,13 @@ namespace Orchard.Core.Common.Providers { OnGetEditorViewModel((context, body) => { var model = new BodyEditorViewModel { BodyAspect = body, TextEditorTemplate = DefaultTextEditorTemplate }; - context.AddEditor(new TemplateViewModel(model, TemplatePrefix) { TemplateName = TemplateName, ZoneName = "primary" }); + context.AddEditor(new TemplateViewModel(model, TemplatePrefix) { TemplateName = TemplateName, ZoneName = "primary", Position = "5" }); }); OnUpdateEditorViewModel((context, body) => { var model = new BodyEditorViewModel { BodyAspect = body, TextEditorTemplate = DefaultTextEditorTemplate }; context.Updater.TryUpdateModel(model, TemplatePrefix, null, null); - context.AddEditor(new TemplateViewModel(model, TemplatePrefix) { TemplateName = TemplateName, ZoneName = "primary" }); + context.AddEditor(new TemplateViewModel(model, TemplatePrefix) { TemplateName = TemplateName, ZoneName = "primary", Position = "5" }); }); } } diff --git a/src/Orchard.Web/Core/Common/Providers/CommonAspectHandler.cs b/src/Orchard.Web/Core/Common/Providers/CommonAspectHandler.cs index 0fa7aee86..3fe520355 100644 --- a/src/Orchard.Web/Core/Common/Providers/CommonAspectHandler.cs +++ b/src/Orchard.Web/Core/Common/Providers/CommonAspectHandler.cs @@ -102,7 +102,7 @@ namespace Orchard.Core.Common.Providers { if (instance.Owner != null) viewModel.Owner = instance.Owner.UserName; - context.AddEditor(new TemplateViewModel(viewModel, "CommonAspect") { TemplateName = "Parts/Common.Owner", ZoneName = "primary", Position = "999" }); + context.AddEditor(new TemplateViewModel(viewModel, "CommonAspect") { TemplateName = "Parts/Common.Owner", ZoneName = "primary", Position = "9" }); } @@ -132,7 +132,7 @@ namespace Orchard.Core.Common.Providers { instance.Owner = newOwner; } } - context.AddEditor(new TemplateViewModel(viewModel, "CommonAspect") { TemplateName = "Parts/Common.Owner", ZoneName = "primary", Position = "999" }); + context.AddEditor(new TemplateViewModel(viewModel, "CommonAspect") { TemplateName = "Parts/Common.Owner", ZoneName = "primary", Position = "9" }); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index 9302a628a..510182d02 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -76,6 +76,7 @@ + @@ -112,7 +113,7 @@ - + @@ -138,6 +139,7 @@ + diff --git a/src/Orchard.Web/Core/Settings/Controllers/SiteSettingsDriver.cs b/src/Orchard.Web/Core/Settings/Controllers/SiteSettingsDriver.cs new file mode 100644 index 000000000..82f757e61 --- /dev/null +++ b/src/Orchard.Web/Core/Settings/Controllers/SiteSettingsDriver.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Core.Settings.Models; + +namespace Orchard.Core.Settings.Controllers { + public class SiteSettingsDriver : ItemDriver { + protected override ContentType GetContentType() { + return SiteSettings.ContentType; + } + + protected override DriverResult Editor(SiteSettings part) { + return ItemTemplate("Items/Settings.Site"); + } + protected override DriverResult Editor(SiteSettings part, IUpdateModel updater) { + return ItemTemplate("Items/Settings.Site"); + } + } +} diff --git a/src/Orchard.Web/Core/Settings/Models/SiteSettingsHandler.cs b/src/Orchard.Web/Core/Settings/Models/SiteSettingsHandler.cs index 6f7dd0b25..ae2c3d75a 100644 --- a/src/Orchard.Web/Core/Settings/Models/SiteSettingsHandler.cs +++ b/src/Orchard.Web/Core/Settings/Models/SiteSettingsHandler.cs @@ -7,10 +7,6 @@ using Orchard.ContentManagement.Handlers; namespace Orchard.Core.Settings.Models { public class SiteSettingsHandler : ContentHandler { - public override IEnumerable GetContentTypes() { - return new[] {SiteSettings.ContentType}; - } - public SiteSettingsHandler(IRepository repository){ Filters.Add(new ActivatingFilter("site")); Filters.Add(new StorageFilter(repository)); diff --git a/src/Orchard.Web/Core/Settings/Views/Admin/Index.aspx b/src/Orchard.Web/Core/Settings/Views/Admin/Index.ascx similarity index 69% rename from src/Orchard.Web/Core/Settings/Views/Admin/Index.aspx rename to src/Orchard.Web/Core/Settings/Views/Admin/Index.ascx index 68c67195a..2591cb05e 100644 --- a/src/Orchard.Web/Core/Settings/Views/Admin/Index.aspx +++ b/src/Orchard.Web/Core/Settings/Views/Admin/Index.ascx @@ -1,5 +1,7 @@ -<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> -

<%=Html.TitleForPage("Edit Settings")%>

+<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> + +

+ <%=Html.TitleForPage("Edit Settings")%>

<%using (Html.BeginFormAntiForgeryPost()) { %> <%= Html.ValidationSummary() %>
@@ -21,10 +23,9 @@
<%=Html.EditorFor(s=>s.Id) %> -<% foreach (var e in Model.EditorModel.Editors) { - var editor = e; - %><%=Html.EditorFor(m => editor.Model, editor.TemplateName, editor.Prefix)%> -<% } %> + +<%= Html.EditorForItem(Model.EditorModel) %> +
diff --git a/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Items/Settings.Site.ascx b/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Items/Settings.Site.ascx new file mode 100644 index 000000000..21f0739b0 --- /dev/null +++ b/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Items/Settings.Site.ascx @@ -0,0 +1,5 @@ +<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl>" %> +<%@ Import Namespace="Orchard.Core.Settings.Models"%> +<%@ Import Namespace="Orchard.ContentManagement.ViewModels"%> +<% Html.Zone("primary"); %> +<% Html.ZonesAny(); %> diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx index d7ace1d49..17280578f 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx @@ -2,5 +2,5 @@ <%@ Import Namespace="Orchard.ContentManagement.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Models"%> <% Html.AddTitleParts(Model.Item.Name); %> -<%=Html.EditorZone("primary") %> -<%=Html.EditorZonesAny() %> \ No newline at end of file +<% Html.Zone("primary"); %> +<% Html.ZonesAny(); %> \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx index a16f1eda5..e2df804ee 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx @@ -4,11 +4,11 @@ <% Html.AddTitleParts(Model.Item.Title); %>
- <%=Html.EditorZone("primary") %> - <%=Html.EditorZonesExcept("secondary") %> + <% Html.Zone("primary"); %> + <% Html.ZonesExcept("secondary"); %>
- <%=Html.EditorZone("secondary")%> + <% Html.Zone("secondary");%>
diff --git a/src/Orchard.Web/Packages/Orchard.DevTools/ViewModels/ContentDetailsViewModel.cs b/src/Orchard.Web/Packages/Orchard.DevTools/ViewModels/ContentDetailsViewModel.cs index 522466038..254ba69e8 100644 --- a/src/Orchard.Web/Packages/Orchard.DevTools/ViewModels/ContentDetailsViewModel.cs +++ b/src/Orchard.Web/Packages/Orchard.DevTools/ViewModels/ContentDetailsViewModel.cs @@ -33,7 +33,20 @@ namespace Orchard.DevTools.ViewModels { } } - public IEnumerable Editors { get { return EditorModel.Editors; } } + public IEnumerable Editors { + get { + return EditorModel.Zones + .SelectMany(z => z.Value.Items + .OfType() + .Select(x => new { ZoneName = z.Key, Item = x })) + .Select(x => new TemplateViewModel(x.Item.Model, x.Item.Prefix) { + Model = x.Item.Model, + TemplateName = x.Item.TemplateName, + WasUsed = x.Item.WasExecuted, + ZoneName = x.ZoneName, + }); + } + } public object Locate(Type type) { return Item.ContentItem.Get(type); diff --git a/src/Orchard.Web/Packages/Orchard.Roles/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.Roles/Controllers/AdminController.cs index 8ddf9c990..81abbfbb9 100644 --- a/src/Orchard.Web/Packages/Orchard.Roles/Controllers/AdminController.cs +++ b/src/Orchard.Web/Packages/Orchard.Roles/Controllers/AdminController.cs @@ -24,11 +24,11 @@ namespace Orchard.Roles.Controllers { return View(model); } - [AcceptVerbs(HttpVerbs.Post)] - public ActionResult Index(FormCollection input) { + [HttpPost, ActionName("Index")] + public ActionResult IndexPOST() { try { - foreach (string key in input.Keys) { - if (key.StartsWith("Checkbox.") && input[key] == "true") { + foreach (string key in Request.Form.Keys) { + if (key.StartsWith("Checkbox.") && Request.Form[key] == "true") { int roleId = Convert.ToInt32(key.Substring("Checkbox.".Length)); _roleService.DeleteRole(roleId); } @@ -46,14 +46,14 @@ namespace Orchard.Roles.Controllers { return View(model); } - [AcceptVerbs(HttpVerbs.Post)] - public ActionResult Create(FormCollection input) { + [HttpPost, ActionName("Create")] + public ActionResult CreatePOST() { var viewModel = new RoleCreateViewModel(); try { - UpdateModel(viewModel, input.ToValueProvider()); + UpdateModel(viewModel); _roleService.CreateRole(viewModel.Name); - foreach (string key in input.Keys) { - if (key.StartsWith("Checkbox.") && input[key] == "true") { + foreach (string key in Request.Form.Keys) { + if (key.StartsWith("Checkbox.") && Request.Form[key] == "true") { string permissionName = key.Substring("Checkbox.".Length); _roleService.CreatePermissionForRole(viewModel.Name, permissionName); @@ -80,16 +80,16 @@ namespace Orchard.Roles.Controllers { return View(model); } - [AcceptVerbs(HttpVerbs.Post)] - public ActionResult Edit(FormCollection input) { + [HttpPost, ActionName("Edit")] + public ActionResult EditPOST() { var viewModel = new RoleEditViewModel(); try { - UpdateModel(viewModel, input.ToValueProvider()); + UpdateModel(viewModel); // Save if (!String.IsNullOrEmpty(HttpContext.Request.Form["submit.Save"])) { List rolePermissions = new List(); - foreach (string key in input.Keys) { - if (key.StartsWith("Checkbox.") && input[key] == "true") { + foreach (string key in Request.Form.Keys) { + if (key.StartsWith("Checkbox.") && Request.Form[key] == "true") { string permissionName = key.Substring("Checkbox.".Length); rolePermissions.Add(permissionName); } diff --git a/src/Orchard.Web/Packages/Orchard.Sandbox/Models/SandboxSettingsRecord.cs b/src/Orchard.Web/Packages/Orchard.Sandbox/Models/SandboxSettingsRecord.cs index 6176b6149..0c1a3f56e 100644 --- a/src/Orchard.Web/Packages/Orchard.Sandbox/Models/SandboxSettingsRecord.cs +++ b/src/Orchard.Web/Packages/Orchard.Sandbox/Models/SandboxSettingsRecord.cs @@ -7,9 +7,6 @@ using Orchard.ContentManagement.Records; namespace Orchard.Sandbox.Models { public class SandboxSettingsRecord : ContentPartRecord { public virtual bool AllowAnonymousEdits { get; set; } - - [Required] - public virtual string NameOfThemeWhenEditingPage { get; set; } } diff --git a/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Items/Sandbox.Page.ascx b/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Items/Sandbox.Page.ascx index 5033e4fe1..17404bff2 100644 --- a/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Items/Sandbox.Page.ascx +++ b/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Items/Sandbox.Page.ascx @@ -6,4 +6,4 @@ <%=Html.LabelFor(m => m.Item.Record.Name)%> <%=Html.EditorFor(m => m.Item.Record.Name)%> -<%=Html.EditorZonesAny()%> +<% Html.ZonesAny(); %> diff --git a/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Parts/Sandbox.SiteSettings.ascx b/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Parts/Sandbox.SiteSettings.ascx index 010c29386..40875d89e 100644 --- a/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Parts/Sandbox.SiteSettings.ascx +++ b/src/Orchard.Web/Packages/Orchard.Sandbox/Views/EditorTemplates/Parts/Sandbox.SiteSettings.ascx @@ -5,8 +5,4 @@ <%= Html.EditorFor(x=>x.AllowAnonymousEdits) %> <%= Html.ValidationMessage("AllowAnonymousEdits", "*")%>
- <%= Html.LabelFor(x => x.NameOfThemeWhenEditingPage)%> - <%= Html.EditorFor(x=>x.NameOfThemeWhenEditingPage) %> - <%= Html.ValidationMessage("NameOfThemeWhenEditingPage", "*")%> -
diff --git a/src/Orchard.Web/Packages/Orchard.Users/Views/EditorTemplates/Items/Users.User.ascx b/src/Orchard.Web/Packages/Orchard.Users/Views/EditorTemplates/Items/Users.User.ascx index 207f7fafd..7b7c6b848 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/Views/EditorTemplates/Items/Users.User.ascx +++ b/src/Orchard.Web/Packages/Orchard.Users/Views/EditorTemplates/Items/Users.User.ascx @@ -1,4 +1,4 @@ <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl>" %> <%@ Import Namespace="Orchard.ContentManagement.ViewModels" %> <%@ Import Namespace="Orchard.Users.Models" %> -<%=Html.EditorZonesAny() %> +<% Html.ZonesAny(); %> diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index 9ebd055c9..58023a9d1 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -293,39 +293,31 @@ namespace Orchard.ContentManagement { } public ItemDisplayModel BuildDisplayModel(TContentPart content, string displayType) where TContentPart : IContent { - var itemView = new ItemDisplayModel { Item = content }; - var context = new BuildDisplayModelContext(itemView, displayType); + var displayModel = new ItemDisplayModel(content); + var context = new BuildDisplayModelContext(displayModel, displayType); foreach (var handler in Handlers) { handler.BuildDisplayModel(context); } - return itemView; + return displayModel; } public ItemEditorModel BuildEditorModel(TContentPart content) where TContentPart : IContent { - var itemView = new ItemEditorModel { Item = content, Editors = Enumerable.Empty() }; - var context = new BuildEditorModelContext(itemView); + var editorModel = new ItemEditorModel(content); + var context = new BuildEditorModelContext(editorModel); foreach (var handler in Handlers) { handler.BuildEditorModel(context); } - context.EditorModel.Editors = OrderTemplates(context.EditorModel.Editors); - return itemView; + return editorModel; } public ItemEditorModel UpdateEditorModel(TContentPart content, IUpdateModel updater) where TContentPart : IContent { - var itemView = new ItemEditorModel { Item = content, Editors = Enumerable.Empty() }; + var editorModel = new ItemEditorModel(content); - var context = new UpdateEditorModelContext(itemView, updater); + var context = new UpdateEditorModelContext(editorModel, updater); foreach (var handler in Handlers) { handler.UpdateEditorModel(context); } - context.EditorModel.Editors = OrderTemplates(context.EditorModel.Editors); - return itemView; - } - - private static IEnumerable OrderTemplates(IEnumerable templates) { - var comparer = new PositionComparer(); - //TODO: rethink this comparison because it adds a requirement on naming zones. - return templates.OrderBy(x => (x.ZoneName ?? "*") + "." + (x.Position ?? "5"), comparer); + return editorModel; } public IContentQuery Query() { diff --git a/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs b/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs index 544d60649..67a693acd 100644 --- a/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs +++ b/src/Orchard/ContentManagement/Drivers/PartTemplateResult.cs @@ -21,11 +21,8 @@ namespace Orchard.ContentManagement.Drivers { } public override void Apply(BuildEditorModelContext context) { - context.AddEditor(new TemplateViewModel(Model, Prefix) { - TemplateName = TemplateName, - ZoneName = Zone, - Position = Position - }); + context.EditorModel.Zones.AddEditorPart( + Zone + ":" + Position, Model, TemplateName, Prefix); } public PartTemplateResult Location(string zone) { diff --git a/src/Orchard/ContentManagement/Handlers/BuildEditorModelContext.cs b/src/Orchard/ContentManagement/Handlers/BuildEditorModelContext.cs index a12391f7d..282bb07c5 100644 --- a/src/Orchard/ContentManagement/Handlers/BuildEditorModelContext.cs +++ b/src/Orchard/ContentManagement/Handlers/BuildEditorModelContext.cs @@ -11,8 +11,14 @@ namespace Orchard.ContentManagement.Handlers { public ContentItem ContentItem { get; set; } public ItemEditorModel EditorModel { get; set; } - public void AddEditor(TemplateViewModel editor) { - EditorModel.Editors = EditorModel.Editors.Concat(new[] { editor }); + + public void AddEditor(TemplateViewModel display) { + //TEMP: (loudej) transition code - from TemplateViewMode to ZoneItem + EditorModel.Zones.AddEditorPart( + display.ZoneName + ":" + display.Position, + display.Model, + display.TemplateName, + display.Prefix); } } } \ No newline at end of file diff --git a/src/Orchard/ContentManagement/Handlers/TemplateFilterForRecord.cs b/src/Orchard/ContentManagement/Handlers/TemplateFilterForRecord.cs index 689744e94..b72880f90 100644 --- a/src/Orchard/ContentManagement/Handlers/TemplateFilterForRecord.cs +++ b/src/Orchard/ContentManagement/Handlers/TemplateFilterForRecord.cs @@ -5,19 +5,26 @@ namespace Orchard.ContentManagement.Handlers { public class TemplateFilterForRecord : TemplateFilterBase> where TRecord : ContentPartRecord, new() { private readonly string _prefix; private readonly string _templateName; + private string _location; public TemplateFilterForRecord(string prefix, string templateName) { _prefix = prefix; _templateName = templateName; + _location = "primary"; + } + + public TemplateFilterForRecord Location(string location) { + _location = location; + return this; } protected override void BuildEditorModel(BuildEditorModelContext context, ContentPart part) { - context.AddEditor(new TemplateViewModel(part.Record, _prefix) { TemplateName = _templateName }); + context.EditorModel.Zones.AddEditorPart(_location, part.Record, _templateName, _prefix); } protected override void UpdateEditorModel(UpdateEditorModelContext context, ContentPart part) { context.Updater.TryUpdateModel(part.Record, _prefix, null, null); - context.AddEditor(new TemplateViewModel(part.Record, _prefix) { TemplateName = _templateName }); + context.EditorModel.Zones.AddEditorPart(_location, part.Record, _templateName, _prefix); } } } diff --git a/src/Orchard/ContentManagement/ViewModels/ItemDisplayModel.cs b/src/Orchard/ContentManagement/ViewModels/ItemDisplayModel.cs index 258d0f096..21fbe2445 100644 --- a/src/Orchard/ContentManagement/ViewModels/ItemDisplayModel.cs +++ b/src/Orchard/ContentManagement/ViewModels/ItemDisplayModel.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Web.Mvc; using Orchard.UI.Zones; @@ -15,13 +13,13 @@ namespace Orchard.ContentManagement.ViewModels { protected ItemDisplayModel(ItemDisplayModel displayModel) { TemplateName = displayModel.TemplateName; Prefix = displayModel.Prefix; - Zones = displayModel.Zones; Item = displayModel.Item; + Zones = displayModel.Zones; } public ItemDisplayModel(ContentItem item) { - Item = item; Zones = new ZoneCollection(); + Item = item; } public ContentItem Item { @@ -37,23 +35,6 @@ namespace Orchard.ContentManagement.ViewModels { public string TemplateName { get; set; } public string Prefix { get; set; } public ZoneCollection Zones { get; set; } - - - public IEnumerable Displays { - get { - return Zones - .SelectMany(z => z.Value.Items - .OfType() - .Select(x=>new{ZoneName=z.Key,Item=x})) - .Select(x => new TemplateViewModel(x.Item.Model,x.Item.Prefix) { - Model = x.Item.Model, - TemplateName=x.Item.TemplateName, - WasUsed=x.Item.WasExecuted, - ZoneName=x.ZoneName, - }); - } - } - } public class ItemDisplayModel : ItemDisplayModel where TPart : IContent { @@ -67,6 +48,10 @@ namespace Orchard.ContentManagement.ViewModels { : base(displayModel) { } + public ItemDisplayModel(TPart part) + : base(part.ContentItem) { + } + public new TPart Item { get { return _item; } set { SetItem(value.ContentItem); } diff --git a/src/Orchard/ContentManagement/ViewModels/ItemEditorModel.cs b/src/Orchard/ContentManagement/ViewModels/ItemEditorModel.cs index 6c0570892..a3102e36f 100644 --- a/src/Orchard/ContentManagement/ViewModels/ItemEditorModel.cs +++ b/src/Orchard/ContentManagement/ViewModels/ItemEditorModel.cs @@ -2,19 +2,26 @@ using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; +using Orchard.UI.Zones; namespace Orchard.ContentManagement.ViewModels { - public class ItemEditorModel { + public class ItemEditorModel : IZoneContainer { private ContentItem _item; protected ItemEditorModel() { + Zones = new ZoneCollection(); } protected ItemEditorModel(ItemEditorModel editorModel) { TemplateName = editorModel.TemplateName; Prefix = editorModel.Prefix; - Editors = editorModel.Editors.ToArray(); Item = editorModel.Item; + Zones = editorModel.Zones; + } + + public ItemEditorModel(ContentItem item) { + Zones = new ZoneCollection(); + Item = item; } public ContentItem Item { @@ -29,7 +36,7 @@ namespace Orchard.ContentManagement.ViewModels { public Func Adaptor { get; set; } public string TemplateName { get; set; } public string Prefix { get; set; } - public IEnumerable Editors { get; set; } + public ZoneCollection Zones { get; set; } } public class ItemEditorModel : ItemEditorModel where TPart : IContent { @@ -39,10 +46,15 @@ namespace Orchard.ContentManagement.ViewModels { public ItemEditorModel() { } + public ItemEditorModel(ItemEditorModel editorModel) : base(editorModel) { } + public ItemEditorModel(TPart content) + : base(content.ContentItem) { + } + public new TPart Item { get { return _item; } set { SetItem(value.ContentItem); } diff --git a/src/Orchard/Mvc/Html/ItemDisplayExtensions.cs b/src/Orchard/Mvc/Html/ItemDisplayExtensions.cs index dbcc4848b..1991165d4 100644 --- a/src/Orchard/Mvc/Html/ItemDisplayExtensions.cs +++ b/src/Orchard/Mvc/Html/ItemDisplayExtensions.cs @@ -21,10 +21,5 @@ namespace Orchard.Mvc.Html { return html.DisplayFor(expression, model.TemplateName, model.Prefix ?? ""); } - - - public static void DisplayZonesAny(this HtmlHelper html) where TModel : ItemDisplayModel { - html.ZonesAny(); - } } } \ No newline at end of file diff --git a/src/Orchard/Mvc/Html/ItemEditorExtensions.cs b/src/Orchard/Mvc/Html/ItemEditorExtensions.cs index 37a633759..6b2f05ccb 100644 --- a/src/Orchard/Mvc/Html/ItemEditorExtensions.cs +++ b/src/Orchard/Mvc/Html/ItemEditorExtensions.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Linq.Expressions; using System.Web.Mvc; using System.Web.Mvc.Html; @@ -22,47 +20,5 @@ namespace Orchard.Mvc.Html { return html.EditorFor(expression, model.TemplateName, model.Prefix ?? ""); } - - - public static MvcHtmlString EditorZone(this HtmlHelper html, string zoneName) where TModel : ItemEditorModel { - var templates = html.ViewData.Model.Editors.Where(x => x.ZoneName == zoneName && x.WasUsed == false); - return EditorZoneImplementation(html, templates); - } - - public static MvcHtmlString EditorZonesAny(this HtmlHelper html) where TModel : ItemEditorModel { - var templates = html.ViewData.Model.Editors.Where(x => x.WasUsed == false); - return EditorZoneImplementation(html, templates); - } - - public static MvcHtmlString EditorZones(this HtmlHelper html, params string[] include) where TModel : ItemEditorModel { - var templates = html.ViewData.Model.Editors.Where(x => include.Contains(x.ZoneName) && x.WasUsed == false); - return EditorZoneImplementation(html, templates); - } - - public static MvcHtmlString EditorZonesExcept(this HtmlHelper html, params string[] exclude) where TModel : ItemEditorModel { - var templates = html.ViewData.Model.Editors.Where(x => !exclude.Contains(x.ZoneName) && x.WasUsed == false); - return EditorZoneImplementation(html, templates); - } - - private static MvcHtmlString EditorZoneImplementation(HtmlHelper html, IEnumerable templates) { - var count = templates.Count(); - if (count == 0) - return null; - - if (count == 1) { - var t = templates.Single(); - t.WasUsed = true; - return html.EditorFor(m => t.Model, t.TemplateName, t.Prefix ?? ""); - } - - var strings = new List(); - foreach (var template in templates) { - var t = template; - t.WasUsed = true; - strings.Add(html.EditorFor(m => t.Model, t.TemplateName, t.Prefix ?? "")); - } - return MvcHtmlString.Create(string.Concat(strings.ToArray())); - } - } } \ No newline at end of file diff --git a/src/Orchard/Mvc/ViewEngines/LayoutViewEngine.cs b/src/Orchard/Mvc/ViewEngines/LayoutViewEngine.cs index c2f154e84..35f4df140 100644 --- a/src/Orchard/Mvc/ViewEngines/LayoutViewEngine.cs +++ b/src/Orchard/Mvc/ViewEngines/LayoutViewEngine.cs @@ -119,12 +119,12 @@ namespace Orchard.Mvc.ViewEngines { private static void Monitor(ViewEngineResult result, string viewName) { - //if (result.View == null) { - // Trace.WriteLine("Unable to find " + viewName); + if (result.View == null) { + Trace.WriteLine("Unable to find " + viewName); // foreach (var search in result.SearchedLocations) { // Trace.WriteLine(" location " + search); // } - //} + } } public void ReleaseView(ControllerContext controllerContext, IView view) { diff --git a/src/Orchard/Orchard.csproj b/src/Orchard/Orchard.csproj index 76b5347b5..9cd6d0a57 100644 --- a/src/Orchard/Orchard.csproj +++ b/src/Orchard/Orchard.csproj @@ -258,6 +258,7 @@ + diff --git a/src/Orchard/UI/Zones/PartEditorZoneItem.cs b/src/Orchard/UI/Zones/PartEditorZoneItem.cs new file mode 100644 index 000000000..648f653a1 --- /dev/null +++ b/src/Orchard/UI/Zones/PartEditorZoneItem.cs @@ -0,0 +1,15 @@ +using System.Web.Mvc; +using System.Web.Mvc.Html; + +namespace Orchard.UI.Zones { + public class PartEditorZoneItem : ZoneItem { + public object Model { get; set; } + public string TemplateName { get; set; } + public string Prefix { get; set; } + + public override void Execute(HtmlHelper html) { + html.ViewContext.Writer.Write( + html.EditorFor(m => Model, TemplateName, Prefix)); + } + } +} \ No newline at end of file diff --git a/src/Orchard/UI/Zones/ZoneCollection.cs b/src/Orchard/UI/Zones/ZoneCollection.cs index a6e6cec34..8171add88 100644 --- a/src/Orchard/UI/Zones/ZoneCollection.cs +++ b/src/Orchard/UI/Zones/ZoneCollection.cs @@ -9,17 +9,20 @@ namespace Orchard.UI.Zones { } public class ZoneCollection : Dictionary { + public void AddAction(string location, Action action) { + AddZoneItem(location, new DelegateZoneItem { Action = action }); + } public void AddRenderPartial(string location, string templateName, object model) { AddZoneItem(location, new RenderPartialZoneItem { Model = model, TemplateName = templateName }); } public void AddDisplayItem(string location, ItemDisplayModel displayModel) { - AddZoneItem(location, new ItemDisplayZoneItem() { DisplayModel = displayModel }); + AddZoneItem(location, new ItemDisplayZoneItem { DisplayModel = displayModel }); } public void AddDisplayPart(string location, object model, string templateName, string prefix) { AddZoneItem(location, new PartDisplayZoneItem { Model = model, TemplateName = templateName, Prefix = prefix }); } - public void AddAction(string location, Action action) { - AddZoneItem(location, new DelegateZoneItem { Action = action }); + public void AddEditorPart(string location, object model, string templateName, string prefix) { + AddZoneItem(location, new PartEditorZoneItem { Model = model, TemplateName = templateName, Prefix = prefix }); } private void AddZoneItem(string location, ZoneItem item) {