From cdf98ed62126b6001da04d36d176d664197ac92d Mon Sep 17 00:00:00 2001 From: suhacan Date: Thu, 7 Jan 2010 23:12:46 +0000 Subject: [PATCH] - Pages: Publish/Draft support for the new pages package using the new ContentItemVersion model. --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4045117 --- .../Controllers/AdminController.cs | 30 +++++++++++---- .../Packages/Orchard.Pages/Models/Page.cs | 38 ++++++++++++++++--- .../Orchard.Pages/Services/IPageService.cs | 4 ++ .../Orchard.Pages/Services/PageService.cs | 31 +++++++++++---- .../Orchard.Pages/Views/Admin/List.aspx | 15 +++++++- .../DisplayTemplates/Items/Pages.Page.ascx | 2 +- .../Parts/Pages.Page.Publish.ascx | 9 ++++- .../DefaultContentManager.cs | 5 +-- src/Orchard/Environment/OrchardServices.cs | 6 +-- 9 files changed, 106 insertions(+), 34 deletions(-) diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.Pages/Controllers/AdminController.cs index 5739e3345..900fb2703 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Controllers/AdminController.cs +++ b/src/Orchard.Web/Packages/Orchard.Pages/Controllers/AdminController.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Web.Mvc; using Orchard.Data; using Orchard.Localization; @@ -7,7 +8,6 @@ using Orchard.Mvc.Results; using Orchard.Pages.Models; using Orchard.Pages.Services; using Orchard.Pages.ViewModels; -using Orchard.Security; using Orchard.UI.Notify; namespace Orchard.Pages.Controllers { @@ -45,7 +45,7 @@ namespace Orchard.Pages.Controllers { if (!Services.Authorizer.Authorize(Permissions.CreatePages, T("Not allowed to create a page"))) return new HttpUnauthorizedResult(); - var page = Services.ContentManager.BuildEditorModel(Services.ContentManager.New("page")); + var page = Services.ContentManager.BuildEditorModel(_pageService.New()); var model = new PageCreateViewModel { Page = page @@ -59,7 +59,12 @@ namespace Orchard.Pages.Controllers { if (!Services.Authorizer.Authorize(Permissions.CreatePages, T("Couldn't create page"))) return new HttpUnauthorizedResult(); - Page page = Services.ContentManager.Create("page"); + bool publishNow = false; + if (String.Equals(Request.Form["Command"], "PublishNow")) { + publishNow = true; + } + + Page page = _pageService.Create(publishNow); model.Page = Services.ContentManager.UpdateEditorModel(page, this); if (!ModelState.IsValid) @@ -68,14 +73,14 @@ namespace Orchard.Pages.Controllers { var session = _sessionLocator.For(typeof(Page)); session.Flush(); - return RedirectToAction("Edit", new { pageSlug = model.Page.Item.Slug }); + return RedirectToAction("List"); } public ActionResult Edit(string pageSlug) { if (!Services.Authorizer.Authorize(Permissions.ModifyPages, T("Couldn't edit page"))) return new HttpUnauthorizedResult(); - Page page = _pageService.Get(pageSlug); + Page page = _pageService.GetPageOrDraft(pageSlug); if (page == null) return new NotFoundResult(); @@ -92,11 +97,20 @@ namespace Orchard.Pages.Controllers { if (!Services.Authorizer.Authorize(Permissions.ModifyPages, T("Couldn't edit page"))) return new HttpUnauthorizedResult(); - Page page = _pageService.Get(pageSlug); + bool publishNow = false; + if (String.Equals(Request.Form["Command"], "PublishNow")) { + publishNow = true; + } + + Page page = _pageService.GetPageOrDraft(pageSlug); if (page == null) return new NotFoundResult(); + if (publishNow) { + _pageService.Publish(page); + } + var model = new PageEditViewModel { Page = Services.ContentManager.UpdateEditorModel(page, this) }; @@ -109,7 +123,7 @@ namespace Orchard.Pages.Controllers { } Services.Notifier.Information(T("Page information updated.")); - return RedirectToAction("Edit", new { pageSlug = page.Slug }); + return RedirectToAction("List"); } [HttpPost] diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Models/Page.cs b/src/Orchard.Web/Packages/Orchard.Pages/Models/Page.cs index a90c15dc6..e1eb086be 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Models/Page.cs +++ b/src/Orchard.Web/Packages/Orchard.Pages/Models/Page.cs @@ -27,6 +27,39 @@ namespace Orchard.Pages.Models { set { this.As().Owner = value; } } + public bool IsPublished { + get { return ContentItem.VersionRecord.Published; } + } + + public bool HasDraft { + get { + return ( + (ContentItem.VersionRecord.Published == false) || + (ContentItem.VersionRecord.Published && ContentItem.VersionRecord.Latest == false)); + } + } + + public bool HasPublished { + get { + if (IsPublished) + return true; + if (ContentItem.ContentManager.Get(Id, VersionOptions.Published) != null) + return true; + return false; + } + } + + public string PublishedSlug { + get { + if (IsPublished) + return Slug; + Page publishedPage = ContentItem.ContentManager.Get(Id, VersionOptions.Published); + if (publishedPage == null) + return String.Empty; + return publishedPage.Slug; + } + } + public DateTime? Published { get { return Record.Published; } set { Record.Published = value; } @@ -44,9 +77,4 @@ namespace Orchard.Pages.Models { //public virtual Published Published { get; set; } } - //public class PageOverride : IAutoMappingOverride { - // public void Override(AutoMapping mapping) { - // mapping.HasOne(p => p.Published).PropertyRef(p => p.Page).Cascade.All(); - // } - //} } diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Services/IPageService.cs b/src/Orchard.Web/Packages/Orchard.Pages/Services/IPageService.cs index a600a93ad..e11717e03 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Services/IPageService.cs +++ b/src/Orchard.Web/Packages/Orchard.Pages/Services/IPageService.cs @@ -5,6 +5,10 @@ namespace Orchard.Pages.Services { public interface IPageService : IDependency { IEnumerable Get(); Page Get(string slug); + Page GetPageOrDraft(string slug); + Page New(); + Page Create(bool publishNow); void Delete(Page page); + void Publish(Page page); } } \ 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 f606e5233..c49014260 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Services/PageService.cs +++ b/src/Orchard.Web/Packages/Orchard.Pages/Services/PageService.cs @@ -1,23 +1,19 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Orchard.Pages.Models; using Orchard.Core.Common.Records; -using Orchard.Data; using Orchard.ContentManagement; namespace Orchard.Pages.Services { public class PageService : IPageService { private readonly IContentManager _contentManager; - private readonly IRepository _pageRepository; - public PageService(IContentManager contentManager, IRepository pageRepository) { + public PageService(IContentManager contentManager) { _contentManager = contentManager; - _pageRepository = pageRepository; } public IEnumerable Get() { - return _contentManager.Query().List(); + return _contentManager.Query(VersionOptions.Latest).List(); } public Page Get(string slug) { @@ -26,8 +22,27 @@ namespace Orchard.Pages.Services { .List().FirstOrDefault(); } + public Page GetPageOrDraft(string slug) { + Page page = _contentManager.Query(VersionOptions.Latest) + .Join().Where(rr => rr.Slug == slug) + .List().FirstOrDefault(); + return _contentManager.GetDraftRequired(page.Id); + } + + public Page New() { + return _contentManager.New("page"); + } + + public Page Create(bool publishNow) { + return _contentManager.Create("page", publishNow ? VersionOptions.Published : VersionOptions.Draft); + } + public void Delete(Page page) { - _pageRepository.Delete(page.Record); + _contentManager.Remove(page.ContentItem); + } + + public void Publish(Page page) { + _contentManager.Publish(page.ContentItem); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Views/Admin/List.aspx b/src/Orchard.Web/Packages/Orchard.Pages/Views/Admin/List.aspx index 57e69766d..7b638d598 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Views/Admin/List.aspx +++ b/src/Orchard.Web/Packages/Orchard.Pages/Views/Admin/List.aspx @@ -38,14 +38,25 @@ - " alt="Online" title="The page is currently online" /> + <% if (page.HasPublished) {%> + " alt="Online" title="The page is currently online" /> + <% } else { %> + " alt="Offline" title="The page is currently offline" /> + <% } %> <%=page.Title ?? "(no title)" %> - <%=Html.ActionLink(page.Slug ?? "(no slug)", "Item", new { controller = "Page", slug = page.Slug }) %> + <% if (page.HasPublished) {%> + <%=Html.ActionLink(page.Slug ?? "(no slug)", "Item", new {controller = "Page", slug = page.PublishedSlug})%> + <% } else {%> + <%= page.Slug ?? "(no slug)" %> + <% } %> + By <%= page.Creator.UserName %> + <% if (page.HasDraft) { %> " alt="Draft" title="The page has a draft" /> + <% } %> <%=Html.ActionLink("Edit", "Edit", new { pageSlug = page.Slug }) %> diff --git a/src/Orchard.Web/Packages/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.ascx b/src/Orchard.Web/Packages/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.ascx index 9aaf90114..ee8096043 100644 --- a/src/Orchard.Web/Packages/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.ascx +++ b/src/Orchard.Web/Packages/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.ascx @@ -6,7 +6,7 @@ <% Html.Zone("primary"); %> 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 505c78569..6e4453cc2 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 @@ -2,4 +2,11 @@
Publish Settings
-
\ No newline at end of file + +
+ +
+<%--
+ + <%=Html.EditorFor(m => m.Published) %> +
--%> \ No newline at end of file diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index 7fe0e0379..ddf1f969c 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -1,13 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; +using System.Collections.Generic; using System.Linq; using Autofac; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Records; using Orchard.Data; using Orchard.Mvc.ViewModels; -using Orchard.UI.Navigation; namespace Orchard.ContentManagement { public class DefaultContentManager : IContentManager { diff --git a/src/Orchard/Environment/OrchardServices.cs b/src/Orchard/Environment/OrchardServices.cs index 3307068a4..a266809ee 100644 --- a/src/Orchard/Environment/OrchardServices.cs +++ b/src/Orchard/Environment/OrchardServices.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using JetBrains.Annotations; +using JetBrains.Annotations; using Orchard.Data; using Orchard.ContentManagement; using Orchard.Security;