diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs index 198eb908b..b00847f66 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs @@ -1,7 +1,8 @@ -using System.Collections.Generic; -using System.Linq; +using System.Linq; using Orchard.Blogs.Models; +using Orchard.Blogs.Routing; using Orchard.Blogs.Services; +using Orchard.Blogs.ViewModels; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.Core.Common.Models; @@ -10,33 +11,30 @@ namespace Orchard.Blogs.Drivers { public class RecentBlogPostsPartDriver : ContentPartDriver { private readonly IBlogService _blogService; private readonly IContentManager _contentManager; + private readonly IBlogPathConstraint _blogPathConstraint; - public RecentBlogPostsPartDriver(IBlogService blogService, IContentManager contentManager) { + public RecentBlogPostsPartDriver( + IBlogService blogService, + IContentManager contentManager, + IBlogPathConstraint blogPathConstraint) { _blogService = blogService; _contentManager = contentManager; + _blogPathConstraint = blogPathConstraint; } protected override DriverResult Display(RecentBlogPostsPart part, string displayType, dynamic shapeHelper) { - IEnumerable blogPosts; + var path = _blogPathConstraint.FindPath(part.ForBlog); + BlogPart blog = _blogService.Get(path); - BlogPart blog = null; - if (!string.IsNullOrWhiteSpace(part.ForBlog)) - blog = _blogService.Get(part.ForBlog); + if (blog == null) { + return null; + } - if (blog != null) { - blogPosts = _contentManager.Query(VersionOptions.Published, "BlogPost") - .Join().Where(cr => cr.Container == blog.Record.ContentItemRecord) - .OrderByDescending(cr => cr.CreatedUtc) - .Slice(0, part.Count) - .Select(ci => ci.As()); - } - else { - blogPosts = _contentManager.Query(VersionOptions.Published, "BlogPost") - .Join() - .OrderByDescending(cr => cr.CreatedUtc) - .Slice(0, part.Count) - .Select(ci => ci.As()); - } + var blogPosts =_contentManager.Query(VersionOptions.Published, "BlogPost") + .Join().Where(cr => cr.Container == blog.Record.ContentItemRecord) + .OrderByDescending(cr => cr.CreatedUtc) + .Slice(0, part.Count) + .Select(ci => ci.As()); var list = shapeHelper.List(); list.AddRange(blogPosts.Select(bp => _contentManager.BuildDisplay(bp, "Summary"))); @@ -47,12 +45,23 @@ namespace Orchard.Blogs.Drivers { } protected override DriverResult Editor(RecentBlogPostsPart part, dynamic shapeHelper) { + var viewModel = new RecentBlogPostsViewModel { + Count = part.Count, + Path = part.ForBlog, + Blogs = _blogService.Get().ToList().OrderBy(b => b.Name) + }; + return ContentShape("Parts_Blogs_RecentBlogPosts_Edit", - () => shapeHelper.EditorTemplate(TemplateName: "Parts.Blogs.RecentBlogPosts", Model: part, Prefix: Prefix)); + () => shapeHelper.EditorTemplate(TemplateName: "Parts.Blogs.RecentBlogPosts", Model: viewModel, Prefix: Prefix)); } protected override DriverResult Editor(RecentBlogPostsPart part, IUpdateModel updater, dynamic shapeHelper) { - updater.TryUpdateModel(part, Prefix, null, null); + var viewModel = new RecentBlogPostsViewModel(); + if (updater.TryUpdateModel(viewModel, Prefix, null, null)) { + part.ForBlog = viewModel.Path; + part.Count = viewModel.Count; + } + return Editor(part, shapeHelper); } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj index 9f6da5166..4fb25b07d 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj @@ -78,10 +78,10 @@ - + - - + + @@ -97,6 +97,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs new file mode 100644 index 000000000..d576554ab --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using Orchard.Blogs.Models; + +namespace Orchard.Blogs.ViewModels { + public class RecentBlogPostsViewModel { + public int Count { get; set; } + public string Path { get; set; } + public IEnumerable Blogs { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Parts.Blogs.RecentBlogPosts.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Parts.Blogs.RecentBlogPosts.cshtml index b0e4bb09a..f54f2e36f 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Parts.Blogs.RecentBlogPosts.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Parts.Blogs.RecentBlogPosts.cshtml @@ -1,8 +1,18 @@ -@model Orchard.Blogs.Models.RecentBlogPostsPart +@model Orchard.Blogs.ViewModels.RecentBlogPostsViewModel + +@using Orchard.Blogs.Models; +@using Orchard.Core.Routable.Models; +@using Orchard.ContentManagement; +
- @Html.LabelFor(m => m.ForBlog, T("For Blog")) - @Html.TextBoxFor(m => m.ForBlog) + @Html.LabelFor(m => m.Path, T("For Blog")) + + @T("Select which blog you want to display the recent posts for")
@Html.LabelFor(m => m.Count, T("Count"))