diff --git a/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx b/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx index 096602bb8..69f3256df 100644 --- a/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx +++ b/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx @@ -27,7 +27,7 @@ using (Html.BeginFormAntiForgeryPost()) { %> <% if (!menuPartEntry.IsMenuItem) { %><% } else { %><% } %> - " class="remove"><%=_Encoded(menuPartEntry.IsMenuItem ? "Delete" : "Remove") %> + " class="remove"><%=_Encoded(menuPartEntry.IsMenuItem ? "Delete" : "Remove") %> <% ++menuPartEntryIndex; } %> diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs index 7ac8aaa99..c785bbdb1 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs @@ -5,6 +5,7 @@ using Orchard.Blogs.Services; using Orchard.Blogs.ViewModels; using Orchard.ContentManagement; using Orchard.Localization; +using Orchard.Mvc.AntiForgery; using Orchard.Mvc.Results; using Orchard.UI.Admin; using Orchard.UI.Notify; @@ -80,7 +81,7 @@ namespace Orchard.Blogs.Controllers { break; } - return Redirect(Url.BlogPostEdit(blogSlug, model.BlogPost.Item.Id)); + return Redirect(Url.BlogPostEdit(model.BlogPost.Item)); } public ActionResult Edit(string blogSlug, int postId) { @@ -144,7 +145,7 @@ namespace Orchard.Blogs.Controllers { break; } - return Redirect(Url.BlogPostEdit(blogSlug, model.BlogPost.Item.Id)); + return Redirect(Url.BlogPostEdit(model.BlogPost.Item)); } public ActionResult DiscardDraft(int id) { @@ -185,17 +186,17 @@ namespace Orchard.Blogs.Controllers { return RedirectToAction("Edit", new { BlogSlug = item.As().Blog.Slug, PostId = item.ContentItem.Id }); } - [HttpPost] + [ValidateAntiForgeryTokenOrchard] public ActionResult Delete(string blogSlug, int postId) { //refactoring: test PublishBlogPost/PublishOthersBlogPost in addition if published if (!Services.Authorizer.Authorize(Permissions.DeleteBlogPost, T("Couldn't delete blog post"))) return new HttpUnauthorizedResult(); - Blog blog = _blogService.Get(blogSlug); + var blog = _blogService.Get(blogSlug); if (blog == null) return new NotFoundResult(); - BlogPost post = _blogPostService.Get(postId, VersionOptions.Latest); + var post = _blogPostService.Get(postId, VersionOptions.Latest); if (post == null) return new NotFoundResult(); @@ -205,21 +206,40 @@ namespace Orchard.Blogs.Controllers { return Redirect(Url.BlogForAdmin(blogSlug)); } - [HttpPost] + [ValidateAntiForgeryTokenOrchard] public ActionResult Publish(string blogSlug, int postId) { if (!Services.Authorizer.Authorize(Permissions.PublishBlogPost, T("Couldn't publish blog post"))) return new HttpUnauthorizedResult(); - Blog blog = _blogService.Get(blogSlug); + var blog = _blogService.Get(blogSlug); if (blog == null) return new NotFoundResult(); - BlogPost post = _blogPostService.Get(postId, VersionOptions.Latest); + var post = _blogPostService.Get(postId, VersionOptions.Latest); if (post == null) return new NotFoundResult(); _blogPostService.Publish(post); - Services.Notifier.Information(T("Blog post information updated.")); + Services.Notifier.Information(T("Blog post successfully published.")); + + return Redirect(Url.BlogForAdmin(blog.Slug)); + } + + [ValidateAntiForgeryTokenOrchard] + public ActionResult Unpublish(string blogSlug, int postId) { + if (!Services.Authorizer.Authorize(Permissions.PublishBlogPost, T("Couldn't unpublish blog post"))) + return new HttpUnauthorizedResult(); + + var blog = _blogService.Get(blogSlug); + if (blog == null) + return new NotFoundResult(); + + var post = _blogPostService.Get(postId, VersionOptions.Latest); + if (post == null) + return new NotFoundResult(); + + _blogPostService.Unpublish(post); + Services.Notifier.Information(T("Blog post successfully unpublished.")); return Redirect(Url.BlogForAdmin(blog.Slug)); } diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs index f1affc2f4..6856bb60f 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Extensions/UrlHelperExtensions.cs @@ -1,4 +1,5 @@ using System.Web.Mvc; +using Orchard.Blogs.Models; using Orchard.Mvc.Extensions; namespace Orchard.Blogs.Extensions { @@ -51,24 +52,52 @@ namespace Orchard.Blogs.Extensions { return urlHelper.Action("Delete", "BlogAdmin", new {blogSlug, area = "Orchard.Blogs"}); } + public static string BlogPost(this UrlHelper urlHelper, BlogPost blogPost) { + return urlHelper.BlogPost(blogPost.Blog.Slug, blogPost.Slug); + } + public static string BlogPost(this UrlHelper urlHelper, string blogSlug, string postSlug) { return urlHelper.Action("Item", "BlogPost", new {blogSlug, postSlug, area = "Orchard.Blogs"}); } + public static string BlogPostCreate(this UrlHelper urlHelper, Blog blog) { + return urlHelper.BlogPostCreate(blog.Slug); + } + public static string BlogPostCreate(this UrlHelper urlHelper, string blogSlug) { return urlHelper.Action("Create", "BlogPostAdmin", new {blogSlug, area = "Orchard.Blogs"}); } + public static string BlogPostEdit(this UrlHelper urlHelper, BlogPost blogPost) { + return urlHelper.BlogPostEdit(blogPost.Blog.Slug, blogPost.Id); + } + public static string BlogPostEdit(this UrlHelper urlHelper, string blogSlug, int postId) { return urlHelper.Action("Edit", "BlogPostAdmin", new {blogSlug, postId, area = "Orchard.Blogs"}); } + public static string BlogPostDelete(this UrlHelper urlHelper, BlogPost blogPost) { + return urlHelper.BlogPostDelete(blogPost.Blog.Slug, blogPost.Id); + } + public static string BlogPostDelete(this UrlHelper urlHelper, string blogSlug, int postId) { return urlHelper.Action("Delete", "BlogPostAdmin", new {blogSlug, postId, area = "Orchard.Blogs"}); } + public static string BlogPostPublish(this UrlHelper urlHelper, BlogPost blogPost) { + return urlHelper.BlogPostPublish(blogPost.Blog.Slug, blogPost.Id); + } + public static string BlogPostPublish(this UrlHelper urlHelper, string blogSlug, int postId) { return urlHelper.Action("Publish", "BlogPostAdmin", new { blogSlug, postId, area = "Orchard.Blogs" }); } + + public static string BlogPostUnpublish(this UrlHelper urlHelper, BlogPost blogPost) { + return urlHelper.BlogPostUnpublish(blogPost.Blog.Slug, blogPost.Id); + } + + public static string BlogPostUnpublish(this UrlHelper urlHelper, string blogSlug, int postId) { + return urlHelper.Action("Unpublish", "BlogPostAdmin", new { blogSlug, postId, area = "Orchard.Blogs" }); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs index d1798f8b6..2b0e4153e 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Routes.cs @@ -147,6 +147,22 @@ namespace Orchard.Blogs { }, new MvcRouteHandler()) }, + new RouteDescriptor { + Route = new Route( + "Admin/Blogs/{blogSlug}/Posts/{postId}/Unpublish", + new RouteValueDictionary { + {"area", "Orchard.Blogs"}, + {"controller", "BlogPostAdmin"}, + {"action", "Unpublish"} + }, + new RouteValueDictionary { + {"blogSlug", new IsBlogConstraint(_containerProvider)} + }, + new RouteValueDictionary { + {"area", "Orchard.Blogs"} + }, + new MvcRouteHandler()) + }, new RouteDescriptor { Route = new Route( "Admin/Blogs", diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs index 792657243..0bc02ccf5 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs @@ -234,7 +234,7 @@ namespace Orchard.Blogs.Services { } private static XRpcStruct CreateBlogStruct(BlogPost blogPost, UrlHelper urlHelper) { - var url = urlHelper.AbsoluteAction(() => urlHelper.BlogPost(blogPost.Blog.Slug, blogPost.Slug)); + var url = urlHelper.AbsoluteAction(() => urlHelper.BlogPost(blogPost)); return new XRpcStruct() .Set("postid", blogPost.Id) .Set("dateCreated", blogPost.CreatedUtc) diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx index ca26ff88b..64282602b 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx @@ -20,6 +20,6 @@ --%> -
<%=_Encoded("New Post")%>
+
<%=_Encoded("New Post")%>
<% Html.Zone("primary"); Html.ZonesAny(); %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx index 78c866e6f..e8a7a0d56 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx @@ -2,32 +2,22 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> -
-
-

<%=Html.Link(Html.Encode(Model.Item.Name), Url.BlogForAdmin(Model.Item.Slug)) %>

-

<%Html.Zone("meta");%>

-<%--

[list of authors] [modify blog access]

--%> -

<%=Html.Encode(Model.Item.Description) %>

+
+

<%=Html.Link(Html.Encode(Model.Item.Name), Url.BlogForAdmin(Model.Item.Slug)) %>

+

<% Html.Zone("meta");%>

+ <%--

[list of authors] [modify blog access]

--%> +

<%=Html.Encode(Model.Item.Description) %>

- -
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index cea3d55bc..31650d86f 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -4,6 +4,6 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> -

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item.Blog.Slug, Model.Item.Slug)) %>

+

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
<% Html.Zone("primary", ":manage :metadata");%>
diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx index 875db73d2..ff39a50b6 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.SummaryAdmin.ascx @@ -6,7 +6,7 @@ <%@ Import Namespace="Orchard.Blogs.Models"%>
-

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPostEdit(Model.Item.Blog.Slug, Model.Item.Id))%>

+

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPostEdit(Model.Item))%>

  • <% if (Model.Item.HasPublished) { %> @@ -41,24 +41,17 @@
diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs b/src/Orchard.Web/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs index 5a8a50dc6..51c9ed94c 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs @@ -6,14 +6,13 @@ using Orchard.Localization; namespace Orchard.Comments.Extensions { public static class HtmlHelperExtensions { public static MvcHtmlString CommentSummaryLinks(this HtmlHelper html, Localizer T, ContentItem item, int commentCount, int pendingCount) { - string commentText = ""; + var commentText = ""; if (item.Id != 0) { - // - int totalCommentCount = commentCount + pendingCount; + var totalCommentCount = commentCount + pendingCount; if (totalCommentCount == 0) { - commentText += html.Encode(T("no comments")); + commentText += html.Encode(T("0 comments")); } else { commentText += @@ -29,8 +28,7 @@ namespace Orchard.Comments.Extensions { } if (pendingCount > 0) { - commentText += " ("; - commentText += html.ActionLink(T("{0} pending", pendingCount).ToString(), + commentText += " " + html.ActionLink(T("({0} pending)", pendingCount).ToString(), "Details", new { Area = "Orchard.Comments", @@ -38,7 +36,6 @@ namespace Orchard.Comments.Extensions { id = item.Id, returnUrl = html.ViewContext.HttpContext.Request.Url }); - commentText += ") "; } } diff --git a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 7708026f4..3e51b9c82 100644 --- a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -4,7 +4,7 @@ <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> -

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item.Blog.Slug, Model.Item.Slug)) %>

+

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
<% Html.Zone("primary", ":manage :metadata"); %> diff --git a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index c795663ef..88ca5d74a 100644 --- a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -5,7 +5,7 @@ <%@ Import Namespace="Orchard.Blogs.Extensions"%> <%@ Import Namespace="Orchard.Blogs.Models"%> -

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item.Blog.Slug, Model.Item.Slug)) %>

+

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item)) %>

<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
diff --git a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs index 0c3c9109a..5880be132 100644 --- a/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs +++ b/src/Orchard/Mvc/Html/HtmlHelperExtensions.cs @@ -256,6 +256,22 @@ namespace Orchard.Mvc.Html { #endregion + #region AntiForgeryTokenValueOrchardLink + + public static string AntiForgeryTokenValueOrchardLink(this HtmlHelper htmlHelper, string linkContents, string href) { + return htmlHelper.Link(linkContents, htmlHelper.AntiForgeryTokenGetUrl(href)); + } + + #endregion + + #region AntiForgeryTokenGetUrl + + public static string AntiForgeryTokenGetUrl(this HtmlHelper htmlHelper, string baseUrl) { + return string.Format("{0}{1}__RequestVerificationToken={2}", baseUrl, baseUrl.IndexOf('?') > -1 ? "&" : "?", htmlHelper.ViewContext.HttpContext.Server.UrlEncode(htmlHelper.AntiForgeryTokenValueOrchard())); + } + + #endregion + #region AntiForgeryTokenValueOrchard public static string AntiForgeryTokenValueOrchard(this HtmlHelper htmlHelper) { @@ -269,4 +285,4 @@ namespace Orchard.Mvc.Html { #endregion } -} +} \ No newline at end of file