- 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
This commit is contained in:
suhacan
2010-01-07 23:12:46 +00:00
parent a8541b386b
commit cdf98ed621
9 changed files with 106 additions and 34 deletions

View File

@@ -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>("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>("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]

View File

@@ -27,6 +27,39 @@ namespace Orchard.Pages.Models {
set { this.As<CommonAspect>().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<Page>(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<Page> {
// public void Override(AutoMapping<Page> mapping) {
// mapping.HasOne(p => p.Published).PropertyRef(p => p.Page).Cascade.All();
// }
//}
}

View File

@@ -5,6 +5,10 @@ namespace Orchard.Pages.Services {
public interface IPageService : IDependency {
IEnumerable<Page> Get();
Page Get(string slug);
Page GetPageOrDraft(string slug);
Page New();
Page Create(bool publishNow);
void Delete(Page page);
void Publish(Page page);
}
}

View File

@@ -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<PageRecord> _pageRepository;
public PageService(IContentManager contentManager, IRepository<PageRecord> pageRepository) {
public PageService(IContentManager contentManager) {
_contentManager = contentManager;
_pageRepository = pageRepository;
}
public IEnumerable<Page> Get() {
return _contentManager.Query<Page, PageRecord>().List();
return _contentManager.Query<Page, PageRecord>(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<Page, PageRecord>(VersionOptions.Latest)
.Join<RoutableRecord>().Where(rr => rr.Slug == slug)
.List().FirstOrDefault();
return _contentManager.GetDraftRequired<Page>(page.Id);
}
public Page New() {
return _contentManager.New<Page>("page");
}
public Page Create(bool publishNow) {
return _contentManager.Create<Page>("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);
}
}
}

View File

@@ -38,14 +38,25 @@
<td>
</td>
<td>
<img src="<%=ResolveUrl("~/Packages/Orchard.Pages/Content/Admin/images/online.gif") %>" alt="Online" title="The page is currently online" />
<% if (page.HasPublished) {%>
<img src="<%=ResolveUrl("~/Packages/Orchard.Pages/Content/Admin/images/online.gif")%>" alt="Online" title="The page is currently online" />
<% } else { %>
<img src="<%=ResolveUrl("~/Packages/Orchard.Pages/Content/Admin/images/offline.gif")%>" alt="Offline" title="The page is currently offline" />
<% } %>
</td>
<td><%=page.Title ?? "(no title)" %></td>
<td><%=Html.ActionLink(page.Slug ?? "(no slug)", "Item", new { controller = "Page", slug = page.Slug }) %></td>
<td><% if (page.HasPublished) {%>
<%=Html.ActionLink(page.Slug ?? "(no slug)", "Item", new {controller = "Page", slug = page.PublishedSlug})%>
<% } else {%>
<%= page.Slug ?? "(no slug)" %>
<% } %>
</td>
<td>By <%= page.Creator.UserName %></td>
<td></td>
<td>
<% if (page.HasDraft) { %>
<img src="<%=ResolveUrl("~/Packages/Orchard.Pages/Content/Admin/images/draft.gif") %>" alt="Draft" title="The page has a draft" />
<% } %>
</td>
<td></td>
<td><%=Html.ActionLink("Edit", "Edit", new { pageSlug = page.Slug }) %></td>

View File

@@ -6,7 +6,7 @@
<div class="metadata">
<% if (Model.Item.Creator != null)
{
%><div class="posted">Posted by <%=Html.Encode(Model.Item.Creator.UserName)%> at <%=Model.Item.Published%></div><%
%><div class="posted">Published by <%=Html.Encode(Model.Item.Creator.UserName)%> </div><%
} %>
</div>
<% Html.Zone("primary"); %>

View File

@@ -2,4 +2,11 @@
<fieldset>
<legend>Publish Settings</legend>
<label for="Command_SaveDraft"><%=Html.RadioButton("Command", "SaveDraft", true, new { id = "Command_SaveDraft" }) %> Save Draft</label><br />
</fieldset>
</fieldset>
<fieldset>
<label for="Command_PublishNow"><%=Html.RadioButton("Command", "PublishNow", new { id = "Command_PublishNow" }) %> Publish Now</label>
</fieldset>
<%--<fieldset>
<label for="Command_PublishLater"><%=Html.RadioButton("Command", "PublishLater", new { id = "Command_PublishLater" }) %> Publish Later</label>
<%=Html.EditorFor(m => m.Published) %>
</fieldset>--%>

View File

@@ -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 {

View File

@@ -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;