From 4a5981532628acb13ba6fd2a3a3af9c8cd674563 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 16 Feb 2012 17:24:35 -0800 Subject: [PATCH] #18437: Fixing RecentBlogPosts and BlogPostsArchives widgets Work Item: 18437 --HG-- branch : 1.x --- .../Drivers/BlogArchivesPartDriver.cs | 21 ++++++++++++------- .../Drivers/RecentBlogPostsPartDriver.cs | 18 +++++++++------- .../Modules/Orchard.Blogs/Migrations.cs | 18 ++++++++++++++-- .../Orchard.Blogs/Models/BlogArchivesPart.cs | 9 ++++---- .../Models/BlogArchivesPartRecord.cs | 2 +- .../Models/RecentBlogPostsPart.cs | 7 +++---- .../Models/RecentBlogPostsPartRecord.cs | 2 +- .../ViewModels/BlogArchivesViewModel.cs | 2 +- .../ViewModels/RecentBlogPostsViewModel.cs | 7 ++++++- 9 files changed, 56 insertions(+), 30 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogArchivesPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogArchivesPartDriver.cs index bd68b8744..ec7a9af28 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogArchivesPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogArchivesPartDriver.cs @@ -10,18 +10,21 @@ namespace Orchard.Blogs.Drivers { public class BlogArchivesPartDriver : ContentPartDriver { private readonly IBlogService _blogService; private readonly IBlogPostService _blogPostService; + private readonly IContentManager _contentManager; public BlogArchivesPartDriver( IBlogService blogService, - IBlogPostService blogPostService) { + IBlogPostService blogPostService, + IContentManager contentManager) { _blogService = blogService; _blogPostService = blogPostService; + _contentManager = contentManager; } protected override DriverResult Display(BlogArchivesPart part, string displayType, dynamic shapeHelper) { return ContentShape("Parts_Blogs_BlogArchives", () => { - BlogPart blog = _blogService.Get(part.ForBlog); + var blog = _blogService.Get(part.BlogId, VersionOptions.Published).As(); if (blog == null) return null; @@ -32,7 +35,7 @@ namespace Orchard.Blogs.Drivers { protected override DriverResult Editor(BlogArchivesPart part, dynamic shapeHelper) { var viewModel = new BlogArchivesViewModel { - Slug = part.ForBlog, + BlogId = part.BlogId, Blogs = _blogService.Get().ToList().OrderBy(b => b.Name) }; @@ -43,21 +46,23 @@ namespace Orchard.Blogs.Drivers { protected override DriverResult Editor(BlogArchivesPart part, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new BlogArchivesViewModel(); if (updater.TryUpdateModel(viewModel, Prefix, null, null)) { - part.ForBlog = viewModel.Slug; + part.BlogId = viewModel.BlogId; } return Editor(part, shapeHelper); } protected override void Importing(BlogArchivesPart part, ImportContentContext context) { - var blogSlug = context.Attribute(part.PartDefinition.Name, "BlogSlug"); - if (blogSlug != null) { - part.ForBlog = blogSlug; + var blog = context.Attribute(part.PartDefinition.Name, "Blog"); + if (blog != null) { + part.BlogId = context.GetItemFromSession(blog).Id; } } protected override void Exporting(BlogArchivesPart part, ExportContentContext context) { - context.Element(part.PartDefinition.Name).SetAttributeValue("BlogSlug", part.ForBlog); + var blog = _contentManager.Get(part.BlogId); + var blogIdentity = _contentManager.GetItemMetadata(blog).Identity; + context.Element(part.PartDefinition.Name).SetAttributeValue("Blog", blogIdentity); } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs index e06c7e841..00be2b6d2 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RecentBlogPostsPartDriver.cs @@ -22,7 +22,7 @@ namespace Orchard.Blogs.Drivers { protected override DriverResult Display(RecentBlogPostsPart part, string displayType, dynamic shapeHelper) { return ContentShape("Parts_Blogs_RecentBlogPosts", () => { - BlogPart blog = _blogService.Get(part.ForBlog); + var blog = _contentManager.Get(part.BlogId); if (blog == null) { return null; @@ -46,7 +46,7 @@ namespace Orchard.Blogs.Drivers { protected override DriverResult Editor(RecentBlogPostsPart part, dynamic shapeHelper) { var viewModel = new RecentBlogPostsViewModel { Count = part.Count, - Slug = part.ForBlog, + BlogId = part.BlogId, Blogs = _blogService.Get().ToList().OrderBy(b => b.Name) }; @@ -56,8 +56,9 @@ namespace Orchard.Blogs.Drivers { protected override DriverResult Editor(RecentBlogPostsPart part, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new RecentBlogPostsViewModel(); + if (updater.TryUpdateModel(viewModel, Prefix, null, null)) { - part.ForBlog = viewModel.Slug; + part.BlogId = viewModel.BlogId; part.Count = viewModel.Count; } @@ -65,9 +66,9 @@ namespace Orchard.Blogs.Drivers { } protected override void Importing(RecentBlogPostsPart part, ImportContentContext context) { - var blogSlug = context.Attribute(part.PartDefinition.Name, "BlogSlug"); - if (blogSlug != null) { - part.ForBlog = blogSlug; + var blog = context.Attribute(part.PartDefinition.Name, "Blog"); + if (blog != null) { + part.BlogId = context.GetItemFromSession(blog).Id; } var count = context.Attribute(part.PartDefinition.Name, "Count"); @@ -77,7 +78,10 @@ namespace Orchard.Blogs.Drivers { } protected override void Exporting(RecentBlogPostsPart part, ExportContentContext context) { - context.Element(part.PartDefinition.Name).SetAttributeValue("BlogSlug", part.ForBlog); + var blog = _contentManager.Get(part.BlogId); + var blogIdentity = _contentManager.GetItemMetadata(blog).Identity; + context.Element(part.PartDefinition.Name).SetAttributeValue("Blog", blogIdentity); + context.Element(part.PartDefinition.Name).SetAttributeValue("Count", part.Count); } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs index af2e96392..db9054403 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs @@ -24,14 +24,14 @@ namespace Orchard.Blogs { SchemaBuilder.CreateTable("RecentBlogPostsPartRecord", table => table .ContentPartRecord() - .Column("BlogSlug") + .Column("BlogId") .Column("Count") ); SchemaBuilder.CreateTable("BlogArchivesPartRecord", table => table .ContentPartRecord() - .Column("BlogSlug", c => c.WithLength(255)) + .Column("BlogId") ); ContentDefinitionManager.AlterTypeDefinition("Blog", @@ -96,5 +96,19 @@ namespace Orchard.Blogs { ContentDefinitionManager.AlterTypeDefinition("BlogPost", cfg => cfg.WithPart("CommonPart", p => p.WithSetting("DateEditorSettings.ShowDateEditor", "true"))); return 4; } + + public int UpdateFrom4() { + // adding the new fields required as Routable was removed + // the user still needs to execute the corresponding migration + // steps from the migration module + + SchemaBuilder.AlterTable("RecentBlogPostsPartRecord", table => table + .AddColumn("BlogId")); + + SchemaBuilder.AlterTable("BlogArchivesPartRecord", table => table + .AddColumn("BlogId")); + + return 5; + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPart.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPart.cs index bfa2a2c93..16627214d 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPart.cs @@ -1,15 +1,14 @@ using Orchard.ContentManagement; -using System.ComponentModel.DataAnnotations; namespace Orchard.Blogs.Models { /// /// The content part used by the BlogArchives widget /// public class BlogArchivesPart : ContentPart { - [Required] - public string ForBlog { - get { return Record.BlogSlug; } - set { Record.BlogSlug = value; } + + public int BlogId { + get { return Record.BlogId; } + set { Record.BlogId = value; } } } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPartRecord.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPartRecord.cs index 5f32a6aa5..170202e7e 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPartRecord.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchivesPartRecord.cs @@ -5,6 +5,6 @@ namespace Orchard.Blogs.Models { /// The content part used by the BlogArchives widget /// public class BlogArchivesPartRecord : ContentPartRecord { - public virtual string BlogSlug { get; set; } + public virtual int BlogId { get; set; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPart.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPart.cs index a48d2ed3c..70235fa71 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPart.cs @@ -4,10 +4,9 @@ using Orchard.ContentManagement; namespace Orchard.Blogs.Models { public class RecentBlogPostsPart : ContentPart { - [Required] - public string ForBlog { - get { return Record.BlogSlug; } - set { Record.BlogSlug = value; } + public int BlogId { + get { return Record.BlogId; } + set { Record.BlogId = value; } } [Required] diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPartRecord.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPartRecord.cs index 43881a8f0..53667522b 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPartRecord.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Models/RecentBlogPostsPartRecord.cs @@ -6,7 +6,7 @@ namespace Orchard.Blogs.Models { Count = 5; } - public virtual string BlogSlug { get; set; } + public virtual int BlogId { get; set; } public virtual int Count { get; set; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/BlogArchivesViewModel.cs b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/BlogArchivesViewModel.cs index 274661006..2cf386b8e 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/BlogArchivesViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/BlogArchivesViewModel.cs @@ -3,7 +3,7 @@ using Orchard.Blogs.Models; namespace Orchard.Blogs.ViewModels { public class BlogArchivesViewModel { - public string Slug { get; set; } + public int BlogId { get; set; } public IEnumerable Blogs { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs index 9e304efdd..12cef2770 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/RecentBlogPostsViewModel.cs @@ -1,10 +1,15 @@ using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using Orchard.Blogs.Models; namespace Orchard.Blogs.ViewModels { public class RecentBlogPostsViewModel { + [Required] public int Count { get; set; } - public string Slug { get; set; } + + [Required] + public int BlogId { get; set; } + public IEnumerable Blogs { get; set; } }