Moving item template support into item driver. Further control moved out of various handlers.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4044433
This commit is contained in:
loudej
2009-12-22 01:31:55 +00:00
parent 1e06318269
commit 88457c63b2
29 changed files with 379 additions and 185 deletions

View File

@@ -14,7 +14,8 @@ namespace Orchard.Blogs.Controllers {
private readonly IContentManager _contentManager;
private readonly IBlogPostService _blogPostService;
public BlogDriver(IContentManager contentManager, IBlogPostService blogPostService) {
public BlogDriver(IContentManager contentManager, IBlogPostService blogPostService)
: base(Blog.ContentType) {
_contentManager = contentManager;
_blogPostService = blogPostService;
}
@@ -44,29 +45,33 @@ namespace Orchard.Blogs.Controllers {
}
protected override DriverResult Display(Blog blog, string displayType) {
if (!displayType.StartsWith("Detail"))
return null;
var posts = _blogPostService.Get(blog);
IEnumerable<ItemDisplayModel<BlogPost>> model;
IEnumerable<ItemDisplayModel<BlogPost>> blogPosts = null;
if (displayType.StartsWith("DetailAdmin")) {
model = posts.Select(bp => _contentManager.BuildDisplayModel(bp, "SummaryAdmin"));
blogPosts = _blogPostService.Get(blog)
.Select(bp => _contentManager.BuildDisplayModel(bp, "SummaryAdmin"));
}
else {
model = posts.Select(bp => _contentManager.BuildDisplayModel(bp, "Summary"));
else if (displayType.StartsWith("Detail")) {
blogPosts = _blogPostService.Get(blog)
.Select(bp => _contentManager.BuildDisplayModel(bp, "Summary"));
}
return PartialView(model, "Parts/Blogs.BlogPost.List", "").Location("body");
return Combined(
ItemTemplate("Items/Blogs.Blog").LongestMatch(displayType, "Summary", "DetailAdmin", "SummaryAdmin"),
blogPosts == null ? null : PartTemplate(blogPosts, "Parts/Blogs.BlogPost.List", "").Location("body"));
}
protected override DriverResult Editor(Blog blog) {
return PartialView(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1");
return Combined(
ItemTemplate("Items/Blogs.Blog"),
PartTemplate(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1"));
}
protected override DriverResult Editor(Blog blog, IUpdateModel updater) {
updater.TryUpdateModel(blog, Prefix, null, null);
return PartialView(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1");
return Combined(
ItemTemplate("Items/Blogs.Blog"),
PartTemplate(blog, "Parts/Blogs.Blog.Fields").Location("primary", "1"));
}
}
}

View File

@@ -11,6 +11,10 @@ using Orchard.ContentManagement.Drivers;
namespace Orchard.Blogs.Controllers {
[UsedImplicitly]
public class BlogPostDriver : ItemDriver<BlogPost> {
public BlogPostDriver()
: base(BlogPost.ContentType) {
}
protected override string Prefix { get { return ""; } }
protected override string GetDisplayText(BlogPost post) {
@@ -39,8 +43,8 @@ namespace Orchard.Blogs.Controllers {
protected override DriverResult Editor(BlogPost post) {
return Combined(
PartialView(post, "Parts/Blogs.BlogPost.Fields").Location("primary", "1"),
PartialView(post, "Parts/Blogs.BlogPost.Publish").Location("secondary", "1")
PartTemplate(post, "Parts/Blogs.BlogPost.Fields").Location("primary", "1"),
PartTemplate(post, "Parts/Blogs.BlogPost.Publish").Location("secondary", "1")
);
}

View File

@@ -15,7 +15,6 @@ namespace Orchard.Blogs.Models {
Filters.Add(new ActivatingFilter<CommonAspect>("blog"));
Filters.Add(new ActivatingFilter<RoutableAspect>("blog"));
Filters.Add(new StorageFilter<BlogRecord>(repository));
Filters.Add(new ContentItemTemplates<Blog>("Items/Blogs.Blog", "Summary DetailAdmin SummaryAdmin"));
}
}
}

View File

@@ -24,7 +24,7 @@ namespace Orchard.Blogs.Models {
Filters.Add(new ActivatingFilter<RoutableAspect>("blogpost"));
Filters.Add(new ActivatingFilter<BodyAspect>("blogpost"));
Filters.Add(new StorageFilter<BlogPostRecord>(repository));
Filters.Add(new ContentItemTemplates<BlogPost>("Items/Blogs.BlogPost", "Summary SummaryAdmin"));
OnCreated<BlogPost>((context, bp) => bp.Blog.PostCount++);
}

View File

@@ -49,7 +49,7 @@ namespace Orchard.Roles.Controllers {
UserRoles = userRoles,
Roles = roles.ToList(),
};
return PartialView(model, "Parts/Roles.UserRoles");
return PartTemplate(model, "Parts/Roles.UserRoles");
}
protected override DriverResult Editor(UserRoles userRoles, IUpdateModel updater) {
@@ -75,7 +75,7 @@ namespace Orchard.Roles.Controllers {
}
}
return PartialView(model, "Parts/Roles.UserRoles");
return PartTemplate(model, "Parts/Roles.UserRoles");
}
}
}

View File

@@ -1,11 +1,4 @@
using System;
using System.Linq;
using System.Web.Mvc;
using Orchard.Data;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.Sandbox.Models;
using Orchard.Sandbox.ViewModels;
namespace Orchard.Sandbox.Controllers
{

View File

@@ -1,12 +1,7 @@
using System;
using System.Linq;
using System.Web.Mvc;
using JetBrains.Annotations;
using Orchard.Core.Common.Models;
using Orchard.Data;
using Orchard.Localization;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.Sandbox.Models;
using Orchard.Sandbox.ViewModels;
using Orchard.Security;

View File

@@ -0,0 +1,55 @@
using System;
using System.Web.Routing;
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.ViewModels;
using Orchard.Sandbox.Models;
namespace Orchard.Sandbox.Controllers {
[UsedImplicitly]
public class SandboxPageDriver : ItemDriver<SandboxPage> {
public SandboxPageDriver()
: base(SandboxPage.ContentType) {
}
protected override string GetDisplayText(SandboxPage item) {
return item.Record.Name;
}
protected override RouteValueDictionary GetDisplayRouteValues(SandboxPage item) {
return new RouteValueDictionary(
new {
area = "Orchard.Sandbox",
controller = "Page",
action = "Show",
id = item.ContentItem.Id,
});
}
protected override RouteValueDictionary GetEditorRouteValues(SandboxPage item) {
return new RouteValueDictionary(
new {
area = "Orchard.Sandbox",
controller = "Page",
action = "Edit",
id = item.ContentItem.Id,
});
}
protected override DriverResult Display(SandboxPage part, string displayType) {
return Combined(
ItemTemplate("Items/Sandbox.Page").LongestMatch(displayType, "Summary"),
PartTemplate(part, "Parts/Sandbox.Page.Title").Location("title"));
}
protected override DriverResult Editor(ItemEditorModel<SandboxPage> model) {
return ItemTemplate("Items/Sandbox.Page");
}
protected override DriverResult Editor(ItemEditorModel<SandboxPage> model, IUpdateModel updater) {
updater.TryUpdateModel(model, Prefix, null, null);
return ItemTemplate("Items/Sandbox.Page");
}
}
}

View File

@@ -1,12 +1,12 @@
using System.Collections.Generic;
using System.Web.Routing;
using JetBrains.Annotations;
using Orchard.Core.Common.Models;
using Orchard.Data;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.ViewModels;
namespace Orchard.Sandbox.Models {
[UsedImplicitly]
public class SandboxContentHandler : ContentHandler {
public override IEnumerable<ContentType> GetContentTypes() {
return new[] { SandboxPage.ContentType };
@@ -22,30 +22,6 @@ namespace Orchard.Sandbox.Models {
Filters.Add(new ActivatingFilter<RoutableAspect>(SandboxPage.ContentType.Name));
Filters.Add(new ActivatingFilter<BodyAspect>(SandboxPage.ContentType.Name));
Filters.Add(new StorageFilter<SandboxPageRecord>(pageRepository) { AutomaticallyCreateMissingRecord = true });
Filters.Add(new ContentItemTemplates<SandboxPage>("Items/Sandbox.Page", "Summary"));
OnGetItemMetadata<SandboxPage>((context, page) => {
context.Metadata.DisplayText = page.Record.Name;
context.Metadata.DisplayRouteValues =
new RouteValueDictionary(
new {
area = "Orchard.Sandbox",
controller = "Page",
action = "Show",
id = context.ContentItem.Id,
});
context.Metadata.EditorRouteValues =
new RouteValueDictionary(
new {
area = "Orchard.Sandbox",
controller = "Page",
action = "Edit",
id = context.ContentItem.Id,
});
});
OnGetDisplayViewModel<SandboxPage>((context, page) =>
context.AddDisplay(new TemplateViewModel(page) { TemplateName = "Parts/Sandbox.Page.Title", ZoneName = "title" }));

View File

@@ -63,6 +63,7 @@
<ItemGroup>
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\PageController.cs" />
<Compile Include="Controllers\SandboxPageDriver.cs" />
<Compile Include="Models\SandboxPage.cs" />
<Compile Include="Models\SandboxContentHandler.cs" />
<Compile Include="Models\SandboxPageRecord.cs" />

View File

@@ -0,0 +1,42 @@
using System.Linq;
using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.Tags.Helpers;
using Orchard.Tags.Models;
using Orchard.Tags.Services;
using Orchard.Tags.ViewModels;
namespace Orchard.Tags.Controllers {
[UsedImplicitly]
public class HasTagsDriver : PartDriver<HasTags> {
private readonly ITagService _tagService;
public HasTagsDriver(ITagService tagService) {
_tagService = tagService;
}
protected override DriverResult Display(HasTags part, string displayType) {
return PartTemplate(part, "Parts/Tags.ShowTags").Location("body:above");
}
protected override DriverResult Editor(HasTags part) {
var model = new EditTagsViewModel {
Tags = string.Join(", ", part.CurrentTags.Select((t, i) => t.TagName).ToArray())
};
return PartTemplate(model, "Parts/Tags.EditTags");
}
protected override DriverResult Editor(HasTags part, IUpdateModel updater) {
var model = new EditTagsViewModel();
updater.TryUpdateModel(model, Prefix, null, null);
var tagNames = TagHelpers.ParseCommaSeparatedTagNames(model.Tags);
_tagService.UpdateTagsForContentItem(part.ContentItem.Id, tagNames);
return PartTemplate(model, "Parts/Tags.EditTags");
}
}
}

View File

@@ -0,0 +1,14 @@
using System.Collections.Generic;
using Orchard.ContentManagement;
namespace Orchard.Tags.Models {
public class HasTags : ContentPart {
public HasTags() {
AllTags = new List<Tag>();
CurrentTags = new List<Tag>();
}
public IList<Tag> AllTags { get; set; }
public IList<Tag> CurrentTags { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
using Orchard.Data;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
namespace Orchard.Tags.Models {
[UsedImplicitly]
public class HasTagsHandler : ContentHandler {
private readonly IRepository<Tag> _tagsRepository;
private readonly IRepository<TagsContentItems> _tagsContentItemsRepository;
public HasTagsHandler(IRepository<Tag> tagsRepository, IRepository<TagsContentItems> tagsContentItemsRepository) {
_tagsRepository = tagsRepository;
_tagsContentItemsRepository = tagsContentItemsRepository;
Filters.Add(new ActivatingFilter<HasTags>("sandboxpage"));
Filters.Add(new ActivatingFilter<HasTags>("blogpost"));
}
protected override void Loading(LoadContentContext context) {
if (context.ContentItem.Has<HasTags>() == false) {
return;
}
HasTags tags = context.ContentItem.Get<HasTags>();
tags.AllTags = _tagsRepository.Table.ToList();
IEnumerable<TagsContentItems> tagsContentItems = _tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id);
foreach (var tagContentItem in tagsContentItems) {
Tag tag = _tagsRepository.Get(tagContentItem.TagId);
tags.CurrentTags.Add(tag);
}
}
}
}

View File

@@ -1,77 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Data;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.ViewModels;
using Orchard.Tags.Helpers;
using Orchard.Tags.Services;
namespace Orchard.Tags.Models {
public class HasTags : ContentPart {
public HasTags() {
AllTags = new List<Tag>();
CurrentTags = new List<Tag>();
}
public IList<Tag> AllTags { get; set; }
public IList<Tag> CurrentTags { get; set; }
}
public class HasTagsHandler : ContentHandler {
private readonly IRepository<Tag> _tagsRepository;
private readonly IRepository<TagsContentItems> _tagsContentItemsRepository;
private readonly ITagService _tagService;
public HasTagsHandler(IRepository<Tag> tagsRepository, IRepository<TagsContentItems> tagsContentItemsRepository, ITagService tagService) {
_tagsRepository = tagsRepository;
_tagsContentItemsRepository = tagsContentItemsRepository;
_tagService = tagService;
Filters.Add(new ActivatingFilter<HasTags>("sandboxpage"));
Filters.Add(new ActivatingFilter<HasTags>("blogpost"));
OnGetDisplayViewModel<HasTags>((context, hasTags) => {
context.AddDisplay(new TemplateViewModel(hasTags) { TemplateName = "Parts/Tags.HasTags", Position = "6" });
});
}
protected override void BuildEditorModel(BuildEditorModelContext context) {
if (context.ContentItem.Has<HasTags>() == false) {
return;
}
context.AddEditor(new TemplateViewModel(context.ContentItem.Get<HasTags>()) { TemplateName = "Parts/Tags.HasTags", Position = "0" });
}
protected override void UpdateEditorModel(UpdateEditorModelContext context) {
if (context.ContentItem.Has<HasTags>() == false) {
return;
}
TagsViewModel viewModel = new TagsViewModel();
context.Updater.TryUpdateModel(viewModel, String.Empty, null, null);
List<string> tagNames = TagHelpers.ParseCommaSeparatedTagNames(viewModel.Tags);
_tagService.UpdateTagsForContentItem(context.ContentItem.Id, tagNames);
context.AddEditor(new TemplateViewModel(context.ContentItem.Get<HasTags>()) { TemplateName = "Parts/Tags.HasTags" });
}
protected override void Loading(LoadContentContext context) {
if (context.ContentItem.Has<HasTags>() == false) {
return;
}
HasTags tags = context.ContentItem.Get<HasTags>();
tags.AllTags = _tagsRepository.Table.ToList();
IEnumerable<TagsContentItems> tagsContentItems = _tagsContentItemsRepository.Fetch(x => x.ContentItemId == context.ContentItem.Id);
foreach (var tagContentItem in tagsContentItems) {
Tag tag = _tagsRepository.Get(tagContentItem.TagId);
tags.CurrentTags.Add(tag);
}
}
public class TagsViewModel {
public string Tags { get; set; }
}
}
}

View File

@@ -63,11 +63,14 @@
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="ViewModels\EditTagsViewModel.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\HasTagsDriver.cs" />
<Compile Include="Helpers\TagHelpers.cs" />
<Compile Include="Models\HasTags.cs" />
<Compile Include="Models\Tag.cs" />
<Compile Include="Models\TagSettings.cs" />
<Compile Include="Models\TagsHandler.cs" />
<Compile Include="Models\HasTagsHandler.cs" />
<Compile Include="Permissions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Routes.cs" />
@@ -87,8 +90,8 @@
<Content Include="Views\Admin\Search.aspx" />
<Content Include="Views\Home\Index.aspx" />
<Content Include="Views\Home\Search.aspx" />
<Content Include="Views\DisplayTemplates\Parts\Tags.HasTags.ascx" />
<Content Include="Views\EditorTemplates\Parts\Tags.HasTags.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Tags.ShowTags.ascx" />
<Content Include="Views\EditorTemplates\Parts\Tags.EditTags.ascx" />
<Content Include="Views\EditorTemplates\Parts\Tags.SiteSettings.ascx" />
<Content Include="Web.config" />
<Content Include="Views\Web.config" />

View File

@@ -0,0 +1,5 @@
namespace Orchard.Tags.ViewModels {
public class EditTagsViewModel {
public string Tags { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EditTagsViewModel>" %>
<%@ Import Namespace="Orchard.Tags.ViewModels" %>
<%@ Import Namespace="Orchard.Mvc.Html" %>
<%@ Import Namespace="Orchard.Tags.Models" %>
<fieldset>
<%=Html.LabelFor(m=>m.Tags) %>
<%=Html.EditorFor(m=>m.Tags) %>
</fieldset>
<%--<input class="large text" id="Tags" name="Tags" type="text" value="<%=Model.Tags %>" />--%>

View File

@@ -1,8 +0,0 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HasTags>" %>
<%@ Import Namespace="Orchard.Mvc.Html"%>
<%@ Import Namespace="Orchard.Tags.Models"%>
<formset>
<label for="Tags">Tags</label>
<input class="large text" id="Tags" name="Tags" type="text" value="<%=string.Join(", ", Model.CurrentTags.Select((t, i) => t.TagName).ToArray()) %>" />
</formset>
<%--<% Html.BeginForm("Update", "Home", new { area = "Orchard.Tags" }); %>--%>