diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogDriver.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogDriver.cs index 36ac1e9d4..9279fa433 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogDriver.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogDriver.cs @@ -56,7 +56,7 @@ namespace Orchard.Blogs.Controllers { IEnumerable> blogPosts = null; if (displayType.StartsWith("DetailAdmin")) { - blogPosts = _blogPostService.Get(blog) + blogPosts = _blogPostService.Get(blog, VersionOptions.Latest) .Select(bp => _contentManager.BuildDisplayModel(bp, "SummaryAdmin")); } else if (displayType.StartsWith("Detail")) { diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs index 2ae6d10d6..cf32eebda 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs @@ -9,7 +9,6 @@ using Orchard.Data; using Orchard.Localization; using Orchard.ContentManagement; using Orchard.Mvc.Results; -using Orchard.Security; using Orchard.UI.Notify; namespace Orchard.Blogs.Controllers { @@ -45,7 +44,9 @@ namespace Orchard.Blogs.Controllers { if (blog == null) return new NotFoundResult(); - BlogPost post = _blogPostService.Get(blog, postSlug); + //TODO: (erikpo) Look up the current user and their permissions to this blog post and determine if they should be able to view it or not. + VersionOptions versionOptions = VersionOptions.Published; + BlogPost post = _blogPostService.Get(blog, postSlug, versionOptions); if (post == null) return new NotFoundResult(); @@ -108,7 +109,7 @@ namespace Orchard.Blogs.Controllers { if (blog == null) return new NotFoundResult(); - + var blogPost = Services.ContentManager.BuildEditorModel(Services.ContentManager.New("blogpost")); blogPost.Item.Blog = blog; @@ -130,11 +131,19 @@ namespace Orchard.Blogs.Controllers { if (blog == null) return new NotFoundResult(); - BlogPost blogPost = Services.ContentManager.Create("blogpost", bp => { bp.Blog = blog; }); + bool publishNow = false; + if (string.Equals(Request.Form["Command"], "PublishNow")) { + publishNow = true; + } + + BlogPost blogPost = Services.ContentManager.Create("blogpost", publishNow ? VersionOptions.Published : VersionOptions.Draft, bp => { bp.Blog = blog; }); model.BlogPost = Services.ContentManager.UpdateEditorModel(blogPost, this); - if (!ModelState.IsValid) + if (!ModelState.IsValid) { + Services.TransactionManager.Cancel(); + return View(model); + } //TEMP: (erikpo) ensure information has committed for this record var session = _sessionLocator.For(typeof(BlogPostRecord)); @@ -153,7 +162,7 @@ namespace Orchard.Blogs.Controllers { if (blog == null) return new NotFoundResult(); - BlogPost post = _blogPostService.Get(blog, postSlug); + BlogPost post = _blogPostService.Get(blog, postSlug, VersionOptions.Latest); if (post == null) return new NotFoundResult(); @@ -176,10 +185,20 @@ namespace Orchard.Blogs.Controllers { if (blog == null) return new NotFoundResult(); - BlogPost post = _blogPostService.Get(blog, postSlug); + BlogPost post = _blogPostService.Get(blog, postSlug, VersionOptions.Latest); if (post == null) return new NotFoundResult(); + + bool publishNow = false; + if (string.Equals(Request.Form["Command"], "PublishNow")) { + publishNow = true; + } + + if (publishNow) + _blogPostService.Publish(post); + else + _blogPostService.Unpublish(post); var model = new BlogPostEditViewModel { BlogPost = Services.ContentManager.UpdateEditorModel(post, this) @@ -187,12 +206,14 @@ namespace Orchard.Blogs.Controllers { TryUpdateModel(model); - if (ModelState.IsValid==false) { + if (!ModelState.IsValid) { Services.TransactionManager.Cancel(); + return View(model); } Services.Notifier.Information(T("Blog post information updated.")); + return Redirect(Url.BlogPostEdit(blog.Slug, post.Slug)); } diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs index 34c79c073..dc13a03b8 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Extensions/HtmlHelperExtensions.cs @@ -7,6 +7,7 @@ namespace Orchard.Blogs.Extensions { public static string PublishedState(this HtmlHelper htmlHelper) { return htmlHelper.PublishedState(htmlHelper.ViewData.Model); } + public static string PublishedState(this HtmlHelper htmlHelper, BlogPost blogPost) { return htmlHelper.DateTime(blogPost.Published, "Draft"); } @@ -14,6 +15,7 @@ namespace Orchard.Blogs.Extensions { public static string PublishedWhen(this HtmlHelper htmlHelper) { return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model); } + public static string PublishedWhen(this HtmlHelper htmlHelper, BlogPost blogPost) { return htmlHelper.DateTimeRelative(blogPost.Published, "as a Draft"); } diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs index c0fd63d5e..d668bd490 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Services/BlogPostService.cs @@ -3,50 +3,77 @@ using System.Collections.Generic; using System.Linq; using Orchard.Blogs.Models; using Orchard.Core.Common.Records; -using Orchard.Data; using Orchard.ContentManagement; namespace Orchard.Blogs.Services { public class BlogPostService : IBlogPostService { private readonly IContentManager _contentManager; - private readonly IRepository _blogPostRepository; - public BlogPostService(IContentManager contentManager, IRepository blogPostRepository) { + public BlogPostService(IContentManager contentManager) { _contentManager = contentManager; - _blogPostRepository = blogPostRepository; } public BlogPost Get(Blog blog, string slug) { + return Get(blog, slug, VersionOptions.Published); + } + + public BlogPost Get(Blog blog, string slug, VersionOptions versionOptions) { return - _contentManager.Query().Join().Where(rr => rr.Slug == slug). + _contentManager.Query(versionOptions).Join().Where(rr => rr.Slug == slug). Join().Where(cr => cr.Container == blog.Record.ContentItemRecord).List(). SingleOrDefault(); } public IEnumerable Get(Blog blog) { - return GetBlogQuery(blog).List(); + return Get(blog, VersionOptions.Published); + } + + public IEnumerable Get(Blog blog, VersionOptions versionOptions) { + return GetBlogQuery(blog, versionOptions).List(); } public IEnumerable Get(Blog blog, ArchiveData archiveData) { - var query = GetBlogQuery(blog); + var query = GetBlogQuery(blog, VersionOptions.Published); if (archiveData.Day > 0) - query = query.Where(cr => cr.CreatedUtc >= new DateTime(archiveData.Year, archiveData.Month, archiveData.Day) && cr.CreatedUtc < new DateTime(archiveData.Year, archiveData.Month, archiveData.Day + 1)); + query = + query.Where( + cr => + cr.CreatedUtc >= new DateTime(archiveData.Year, archiveData.Month, archiveData.Day) && + cr.CreatedUtc < new DateTime(archiveData.Year, archiveData.Month, archiveData.Day + 1)); else if (archiveData.Month > 0) - query = query.Where(cr => cr.CreatedUtc >= new DateTime(archiveData.Year, archiveData.Month, 1) && cr.CreatedUtc < new DateTime(archiveData.Year, archiveData.Month + 1, 1)); + query = + query.Where( + cr => + cr.CreatedUtc >= new DateTime(archiveData.Year, archiveData.Month, 1) && + cr.CreatedUtc < new DateTime(archiveData.Year, archiveData.Month + 1, 1)); else - query = query.Where(cr => cr.CreatedUtc >= new DateTime(archiveData.Year, 1, 1) && cr.CreatedUtc < new DateTime(archiveData.Year + 1, 1, 1)); + query = + query.Where( + cr => + cr.CreatedUtc >= new DateTime(archiveData.Year, 1, 1) && + cr.CreatedUtc < new DateTime(archiveData.Year + 1, 1, 1)); return query.List(); } public void Delete(BlogPost blogPost) { - _blogPostRepository.Delete(blogPost.Record); + _contentManager.Remove(blogPost.ContentItem); } - private IContentQuery GetBlogQuery(Blog blog) { + public void Publish(BlogPost blogPost) { + _contentManager.Publish(blogPost.ContentItem); + blogPost.Published = DateTime.UtcNow; + } + + public void Unpublish(BlogPost blogPost) { + _contentManager.Unpublish(blogPost.ContentItem); + blogPost.Published = null; + } + + private IContentQuery GetBlogQuery(ContentPart blog, VersionOptions versionOptions) { return - _contentManager.Query().Join().Where( + _contentManager.Query(versionOptions).Join().Where( cr => cr.Container == blog.Record.ContentItemRecord).OrderByDescending(cr => cr.CreatedUtc); } } diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Services/IBlogPostService.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Services/IBlogPostService.cs index 95ce21fe3..a5aef19ee 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Services/IBlogPostService.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Services/IBlogPostService.cs @@ -1,11 +1,16 @@ using System.Collections.Generic; using Orchard.Blogs.Models; +using Orchard.ContentManagement; namespace Orchard.Blogs.Services { public interface IBlogPostService : IDependency { BlogPost Get(Blog blog, string slug); + BlogPost Get(Blog blog, string slug, VersionOptions versionOptions); IEnumerable Get(Blog blog); + IEnumerable Get(Blog blog, VersionOptions versionOptions); IEnumerable Get(Blog blog, ArchiveData archiveData); void Delete(BlogPost blogPost); + void Publish(BlogPost blogPost); + void Unpublish(BlogPost blogPost); } } \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Parts/Blogs.BlogPost.Publish.ascx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Parts/Blogs.BlogPost.Publish.ascx index 4bec7d33e..3d9845dbb 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Parts/Blogs.BlogPost.Publish.ascx +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/EditorTemplates/Parts/Blogs.BlogPost.Publish.ascx @@ -2,5 +2,12 @@ <%@ Import Namespace="Orchard.Blogs.Models"%>
<%=_Encoded("Publish Settings")%> - -
\ No newline at end of file +
+ +
+ +
+<%--
+ + <%=Html.EditorFor(m => m.Published) %> +
--%> \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Services/PageService.cs b/src/Orchard.Web/Packages/Orchard.Pages/Services/PageService.cs index 5a5041d86..4739592d7 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Services/PageService.cs +++ b/src/Orchard.Web/Packages/Orchard.Pages/Services/PageService.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Orchard.Pages.Models; using Orchard.Core.Common.Records; diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Views/EditorTemplates/Parts/Pages.Page.Publish.ascx b/src/Orchard.Web/Packages/Orchard.Pages/Views/EditorTemplates/Parts/Pages.Page.Publish.ascx index 6e4453cc2..ee764ced8 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Views/EditorTemplates/Parts/Pages.Page.Publish.ascx +++ b/src/Orchard.Web/Packages/Orchard.Pages/Views/EditorTemplates/Parts/Pages.Page.Publish.ascx @@ -1,12 +1,12 @@ -<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %>
- Publish Settings -
+ <%=_Encoded("Publish Settings")%> +
- +
<%--
- + <%=Html.EditorFor(m => m.Published) %>
--%> \ No newline at end of file diff --git a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs index 74eaf46c7..050ba5270 100644 --- a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs +++ b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs @@ -112,8 +112,7 @@ namespace Orchard.Mvc.Html { return "a moment ago"; } - public static string DateTime(this HtmlHelper htmlHelper, DateTime? value, string defaultIfNull) - { + public static string DateTime(this HtmlHelper htmlHelper, DateTime? value, string defaultIfNull) { return value.HasValue ? htmlHelper.DateTime(value.Value) : defaultIfNull; }