Getting the comment count on the content list view in the admin and blog posts to use more of the generic content templating

- + blog posts get translation functionality

--HG--
branch : dev
This commit is contained in:
Nathan Heskew
2010-07-15 16:06:40 -07:00
parent bab693c084
commit 4fb3c51dff
25 changed files with 72 additions and 133 deletions

View File

@@ -0,0 +1,24 @@
using System.Web.Mvc;
using Orchard.Core.Common.ViewModels;
using Orchard.Localization;
using Orchard.Mvc.Html;
namespace Orchard.Core.Common.Extensions {
public static class HtmlHelperExtensions {
public static LocalizedString PublishedStateForModel(this HtmlHelper<CommonMetadataViewModel> htmlHelper, Localizer T) {
return htmlHelper.PublishedState(htmlHelper.ViewData.Model, T);
}
public static LocalizedString PublishedState(this HtmlHelper htmlHelper, CommonMetadataViewModel metadata, Localizer T) {
return htmlHelper.DateTime(metadata.VersionPublishedUtc, T("Draft"));
}
public static LocalizedString PublishedWhenForModel(this HtmlHelper<CommonMetadataViewModel> htmlHelper, Localizer T) {
return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model, T);
}
public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, CommonMetadataViewModel metadata, Localizer T) {
return htmlHelper.DateTimeRelative(metadata.VersionPublishedUtc, T("as a Draft"), T);
}
}
}

View File

@@ -1,4 +1,7 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Core.Common.ViewModels.CommonMetadataViewModel>" %>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %><%
if (Model.Creator != null) { %>
<div class="metadata">
<div class="posted"><%: T("Published by {0}", Model.Creator != null ? Model.Creator.UserName : T("nobody(?)").ToString())%></div>
</div>
<div class="posted"><%: T("Published by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T))%></div>
</div><%
} %>

View File

@@ -27,6 +27,13 @@ namespace Orchard.Core.Contents.Handlers {
{"Id", context.ContentItem.Id}
};
}
if (context.Metadata.RemoveRouteValues == null) {
context.Metadata.RemoveRouteValues = new RouteValueDictionary {
{"Area", "Contents"},
{"Controller", "Item"},
{"Action", "Remove"}
};
}
}
}
}

View File

@@ -12,7 +12,8 @@
<%:Html.Hidden("id", Model.Item.Id, new { id = "" })%>
<button type="submit"><%:T("Remove") %></button><%
} %>
<br /><% Html.Zone("meta"); %>
</div>
<div style="clear:both;"></div>
<% Html.Zone("primary"); %>
<% Html.ZonesAny(); %>
</div>

View File

@@ -1,11 +1,6 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<ContentItemViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels" %>
<%@ Import Namespace="Orchard.ContentManagement.Aspects" %>
<%@ Import Namespace="Orchard.ContentManagement" %>
<%var routable = Model.Item.As<IRoutableAspect>();
if (routable != null && !string.IsNullOrEmpty(routable.Title)) {%>
<h1>
<%:routable.Title%></h1>
<%} %>
<% Html.Zone("primary", ":manage :metadata");
<h1><%:Html.ItemDisplayText(Model.Item)%></h1>
<% Html.Zone("metadata");
Html.Zone("primary", ":manage :metadata");
Html.ZonesAny(); %>

View File

@@ -65,6 +65,7 @@
<Compile Include="Common\Drivers\BodyDriver.cs" />
<Compile Include="Common\Drivers\CommonDriver.cs" />
<Compile Include="Common\Drivers\TextFieldDriver.cs" />
<Compile Include="Common\Extensions\HtmlHelperExtensions.cs" />
<Compile Include="Common\Fields\TextField.cs" />
<Compile Include="Common\Services\ICommonService.cs" />
<Compile Include="Common\Services\CommonService.cs" />

View File

@@ -111,7 +111,7 @@ namespace Orchard.Blogs.Controllers {
}
[HttpPost]
public ActionResult Delete(string blogSlug) {
public ActionResult Remove(string blogSlug) {
if (!Services.Authorizer.Authorize(Permissions.ManageBlogs, T("Couldn't delete blog")))
return new HttpUnauthorizedResult();

View File

@@ -77,12 +77,6 @@ namespace Orchard.Blogs.Drivers {
};
}
protected override DriverResult Display(BlogPost post, string displayType) {
return Combined(
ContentItemTemplate("Items/Blogs.BlogPost").LongestMatch(displayType, "Summary", "SummaryAdmin"),
ContentPartTemplate(post, "Parts/Blogs.BlogPost.Metadata").LongestMatch(displayType, "Summary", "SummaryAdmin").Location("meta", "1"));
}
protected override DriverResult Editor(BlogPost post) {
return ContentItemTemplate("Items/Blogs.BlogPost");
}

View File

@@ -1,26 +0,0 @@
using System.Web.Mvc;
using Orchard.Blogs.Models;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Aspects;
using Orchard.Localization;
using Orchard.Mvc.Html;
namespace Orchard.Blogs.Extensions {
public static class HtmlHelperExtensions {
public static LocalizedString PublishedState(this HtmlHelper<BlogPost> htmlHelper, Localizer T) {
return htmlHelper.PublishedState(htmlHelper.ViewData.Model, T);
}
public static LocalizedString PublishedState(this HtmlHelper htmlHelper, BlogPost blogPost, Localizer T) {
return htmlHelper.DateTime(blogPost.As<ICommonAspect>().VersionPublishedUtc, T("Draft"));
}
public static LocalizedString PublishedWhen(this HtmlHelper<BlogPost> htmlHelper, Localizer T) {
return htmlHelper.PublishedWhen(htmlHelper.ViewData.Model, T);
}
public static LocalizedString PublishedWhen(this HtmlHelper htmlHelper, BlogPost blogPost, Localizer T) {
return htmlHelper.DateTimeRelative(blogPost.As<ICommonAspect>().VersionPublishedUtc, T("as a Draft"), T);
}
}
}

View File

@@ -46,7 +46,9 @@ namespace Orchard.Blogs.Handlers {
return;
}
var containerId = requestContext.HttpContext.Request.Form["containerId"];
//todo: don't get at the container form data directly. right now the container is set in the common driver editor (updater)
//todo: which is too late for what's needed (currently) in this handler
var containerId = requestContext.HttpContext.Request.Form["CommonAspect.containerId"];
if (!string.IsNullOrEmpty(containerId)) {
int cId;
if (int.TryParse(containerId, out cId)) {

View File

@@ -74,7 +74,6 @@
<Compile Include="Controllers\BlogPostController.cs" />
<Compile Include="Drivers\BlogPostDriver.cs" />
<Compile Include="Extensions\FeedManagerExtensions.cs" />
<Compile Include="Extensions\HtmlHelperExtensions.cs" />
<Compile Include="Extensions\UrlHelperExtensions.cs" />
<Compile Include="Filters\ArchivesFilter.cs" />
<Compile Include="Models\ArchiveData.cs" />
@@ -136,16 +135,12 @@
<Content Include="Views\DisplayTemplates\Parts\Blogs.Blog.Manage.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Blogs.BlogPost.List.ascx" />
<Content Include="Views\DisplayTemplates\Items\Blogs.Blog.Summary.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Blogs.BlogPost.Metadata.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Blogs.Blog.Description.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Blogs.Blog.Metadata.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Blogs.BlogPost.Metadata.SummaryAdmin.ascx" />
<Content Include="Views\DisplayTemplates\Parts\Blogs.BlogPost.Metadata.Summary.ascx" />
<Content Include="Views\BlogPost\Item.ascx" />
<Content Include="Views\BlogAdmin\Create.ascx" />
<Content Include="Views\BlogAdmin\Edit.ascx" />
<Content Include="Views\Blog\Item.ascx" />
<Content Include="Views\DisplayTemplates\Items\Blogs.BlogPost.SummaryAdmin.ascx" />
<Content Include="Views\EditorTemplates\Parts\Blogs.Blog.Fields.ascx" />
<Content Include="Views\EditorTemplates\Items\Blogs.Blog.ascx" />
<Content Include="Views\EditorTemplates\Items\Blogs.BlogPost.ascx" />

View File

@@ -51,11 +51,11 @@ namespace Orchard.Blogs {
},
new RouteDescriptor {
Route = new Route(
"Admin/Blogs/{blogSlug}/Delete",
"Admin/Blogs/{blogSlug}/Remove",
new RouteValueDictionary {
{"area", "Orchard.Blogs"},
{"controller", "BlogAdmin"},
{"action", "Delete"}
{"action", "Remove"}
},
new RouteValueDictionary {
{"blogSlug", _blogSlugConstraint}

View File

@@ -2,6 +2,10 @@
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %>
<%@ Import Namespace="Orchard.Core.Common.Models" %>
<%@ Import Namespace="Orchard.ContentManagement" %>
<%@ Import Namespace="Orchard.Core.Common.ViewModels" %>
<h2><%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %></h2>
<div class="meta"><%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%></div>
<div class="meta"><%: Html.PublishedState(new CommonMetadataViewModel(Model.Item.As<CommonAspect>()), T) %> | <%Html.Zone("meta");%></div>
<div class="content"><% Html.Zone("primary", ":manage :metadata");%></div>

View File

@@ -1,58 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<ContentItemViewModel<BlogPost>>" %>
<%@ Import Namespace="Orchard.ContentManagement.Aspects"%>
<%@ Import Namespace="Orchard.ContentManagement"%>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<div class="summary">
<div class="properties">
<h3><%: Html.Link(Model.Item.Title, Url.BlogPostEdit(Model.Item))%></h3>
<ul>
<li><%
if (Model.Item.HasPublished) { %>
<img class="icon" src="<%=ResolveUrl("~/Modules/Orchard.Blogs/Content/Admin/images/online.gif") %>" alt="<%: T("Online") %>" title="<%: T("The page is currently online") %>" /> <%: T("Published")%><%
}
else { %>
<img class="icon" src="<%=ResolveUrl("~/Modules/Orchard.Blogs/Content/Admin/images/offline.gif") %>" alt="<%: T("Offline") %>" title="<%: T("The page is currently offline") %>" /> <%: T("Not Published")%><%
} %>&nbsp;&#124;&nbsp;
</li>
<li><%
if (Model.Item.HasDraft) { %>
<img class="icon" src="<%=ResolveUrl("~/Modules/Orchard.Blogs/Content/Admin/images/draft.gif") %>" alt="<%: T("Draft") %>" title="<%: T("The post has a draft") %>" /><%: Html.PublishedState(Model.Item, T) %><%
}
else { %>
<%: T("No draft")%><%
} %>&nbsp;&#124;&nbsp;
</li>
<li><%
if (Model.Item.ScheduledPublishUtc.HasValue && Model.Item.ScheduledPublishUtc.Value > DateTime.UtcNow) { %>
<img class="icon" src="<%=ResolveUrl("~/Modules/Orchard.Blogs/Content/Admin/images/scheduled.gif") %>" alt="<%: T("Scheduled") %>" title="<%: T("The post is scheduled for publishing") %>" /><%: T("Scheduled")%>
<%: Html.DateTime(Model.Item.ScheduledPublishUtc.Value, T("M/d/yyyy h:mm tt"))%><%
}
else if (Model.Item.IsPublished) { %>
<%: T("Published: {0}", Html.DateTimeRelative(Model.Item.As<ICommonAspect>().VersionPublishedUtc.Value, T)) %><%
}
else { %>
<%: T("Last modified: {0}", Html.DateTimeRelative(Model.Item.As<ICommonAspect>().ModifiedUtc.Value, T)) %><%
} %>&nbsp;&#124;&nbsp;
</li>
<li><%: T("By {0}", Model.Item.Creator.UserName)%></li>
</ul>
</div>
<div class="related"><%
if (Model.Item.HasPublished){ %>
<a href="<%: Url.BlogPost(Model.Item) %>" title="<%: T("View Post")%>"><%: T("View")%></a><%: T(" | ")%><%
if (Model.Item.HasDraft) { %>
<a href="<%: Html.AntiForgeryTokenGetUrl(Url.BlogPostPublish(Model.Item)) %>" title="<%: T("Publish Draft")%>"><%: T("Publish Draft")%></a><%: T(" | ")%><%
} %>
<a href="<%: Html.AntiForgeryTokenGetUrl(Url.BlogPostUnpublish(Model.Item)) %>" title="<%: T("Unpublish Post")%>"><%: T("Unpublish")%></a><%: T(" | ")%><%
}
else { %>
<a href="<%: Html.AntiForgeryTokenGetUrl(Url.BlogPostPublish(Model.Item)) %>" title="<%: T("Publish Post")%>"><%: T("Publish")%></a><%: T(" | ")%><%
} %>
<a href="<%: Url.BlogPostEdit(Model.Item) %>" title="<%: T("Edit Post")%>"><%: T("Edit")%></a><%: T(" | ")%>
<a href="<%: Html.AntiForgeryTokenGetUrl(Url.BlogPostDelete(Model.Item)) %>" title="<%: T("Remove Post")%>"><%: T("Remove")%></a>
<br /><%Html.Zone("meta");%>
</div>
<div style="clear:both;"></div>
</div>

View File

@@ -1,6 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BlogPost>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%><%
if (Model.Creator != null) {
%><span class="posted"><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %> | </span><%
} %>

View File

@@ -1,2 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BlogPost>" %>
<%@ Import Namespace="Orchard.Blogs.Models"%>

View File

@@ -1,8 +0,0 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BlogPost>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<div class="metadata"><%
if (Model.Creator != null) {
%><div class="posted"><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %></div><%
} %>
</div>

View File

@@ -24,7 +24,6 @@ using Orchard.Reports.Services;
using Orchard.Security;
using Orchard.Settings;
using Orchard.Themes;
using Orchard.UI.Notify;
using Orchard.Environment.State;
using Orchard.Data.Migration;
@@ -39,7 +38,6 @@ namespace Orchard.Setup.Services {
public SetupService(
ShellSettings shellSettings,
INotifier notifier,
IOrchardHost orchardHost,
IShellSettingsManager shellSettingsManager,
IShellContainerFactory shellContainerFactory,

View File

@@ -2,6 +2,7 @@
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %>
<%Model.Zones.AddRenderPartial("zonetest", "ZoneTest", Model); %>
<h2><%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %></h2>
<div class="meta"><%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%></div>

View File

@@ -1,6 +1,7 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BlogPost>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%><%
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %><%
if (Model.Creator != null) {
%><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><%
} %>

View File

@@ -2,6 +2,7 @@
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %>
<%Model.Zones.AddRenderPartial("zonetest", "ZoneTest", Model); %>
<h2><%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %></h2>
<div class="meta"><%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%></div>

View File

@@ -1,6 +1,7 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BlogPost>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%><%
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %><%
if (Model.Creator != null) {
%><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><%
} %>

View File

@@ -2,6 +2,7 @@
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %>
<h3><%: Html.Link(Model.Item.Title, Url.BlogPost(Model.Item)) %></h3>
<div class="meta"><%: Html.PublishedState(Model.Item, T) %> | <%Html.Zone("meta");%></div>
<div class="postsummary">

View File

@@ -1,6 +1,7 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BlogPost>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%><%
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Core.Common.Extensions" %><%
if (Model.Creator != null) {
%><%: T("Posted by {0} {1}", Model.Creator.UserName, Html.PublishedWhen(Model, T)) %><%
} %>

View File

@@ -13,6 +13,7 @@ namespace Orchard.ContentManagement {
public RouteValueDictionary DisplayRouteValues { get; set; }
public RouteValueDictionary EditorRouteValues { get; set; }
public RouteValueDictionary CreateRouteValues { get; set; }
public RouteValueDictionary RemoveRouteValues { get; set; }
public IEnumerable<string> DisplayGroups { get; set; }
public IEnumerable<string> EditorGroups { get; set; }
@@ -43,5 +44,13 @@ namespace Orchard.ContentManagement {
{"id", item.ContentItem.ContentType}
};
}
private static RouteValueDictionary GetRemoveRouteValues(IContent item) {
return new RouteValueDictionary {
{"Area", "Contents"},
{"Controller", "Admin"},
{"Action", "Remove"}
};
}
}
}