using System.Collections.Generic; using System.Linq; using System.Web.Routing; using Orchard.Blogs.Services; using Orchard.Core.Common.Models; using Orchard.Data; using Orchard.Models; using Orchard.Models.Driver; using Orchard.Models.ViewModels; namespace Orchard.Blogs.Models { public class BlogPostHandler : ContentHandler { public override IEnumerable GetContentTypes() { return new[] { BlogPost.ContentType }; } public BlogPostHandler( IRepository repository, IContentManager contentManager, IBlogPostService blogPostService) { Filters.Add(new ActivatingFilter("blogpost")); Filters.Add(new ActivatingFilter("blogpost")); Filters.Add(new ActivatingFilter("blogpost")); Filters.Add(new ActivatingFilter("blogpost")); Filters.Add(new StorageFilter(repository)); Filters.Add(new ContentItemTemplates("BlogPost", "Detail", "Summary", "SummaryAdmin")); OnGetItemMetadata((context, bp) => { context.Metadata.DisplayText = bp.Title; context.Metadata.DisplayRouteValues = new RouteValueDictionary( new { area = "Orchard.Blogs", controller = "BlogPost", action = "Item", blogSlug = bp.Blog.Slug, postSlug = bp.Slug }); context.Metadata.EditorRouteValues = new RouteValueDictionary( new { area = "Orchard.Blogs", controller = "BlogPost", action = "Edit", blogSlug = bp.Blog.Slug, postSlug = bp.Slug }); }); OnGetDisplayViewModel((context, blog) => { if (!context.DisplayType.StartsWith("Detail")) return; var posts = blogPostService.Get(blog); switch(context.DisplayType) { case "Detail": context.AddDisplay( new TemplateViewModel(posts.Select(bp => contentManager.GetDisplayViewModel(bp, null, "Summary"))) { TemplateName = "BlogPostList", ZoneName = "body" }); break; case "DetailAdmin": context.AddDisplay( new TemplateViewModel(posts.Select(bp => contentManager.GetDisplayViewModel(bp, null, "SummaryAdmin"))) { TemplateName = "BlogPostListAdmin", ZoneName = "body" }); break; } }); OnGetEditorViewModel((context, blogPost) => context.AddEditor(new TemplateViewModel(blogPost) {TemplateName = "BlogPostFields"}) ); OnUpdateEditorViewModel((context, blogPost) => { context.AddEditor(new TemplateViewModel(blogPost) { TemplateName = "BlogPostFields" }); context.Updater.TryUpdateModel(blogPost, "", null, null); }); } } }