diff --git a/src/Orchard.Web/Core/Common/Handlers/RoutableAspectHandler.cs b/src/Orchard.Web/Core/Common/Handlers/RoutableAspectHandler.cs index 29d4955a1..b902fb2c6 100644 --- a/src/Orchard.Web/Core/Common/Handlers/RoutableAspectHandler.cs +++ b/src/Orchard.Web/Core/Common/Handlers/RoutableAspectHandler.cs @@ -40,13 +40,7 @@ namespace Orchard.Core.Common.Handlers { var method = driverType.GetMethod("GetDisplayRouteValues"); if (method != null) { - try { - return - (RouteValueDictionary) - method.Invoke(driver, - new object[] {contentItem.Get(driverType.BaseType.GetGenericArguments()[0])}); - } - catch {} + return (RouteValueDictionary)method.Invoke(driver, new object[] {contentItem.Get(driverType.BaseType.GetGenericArguments()[0])}); } return null; diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs index 16b7ab231..3333b4c96 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs @@ -27,16 +27,14 @@ namespace Orchard.Blogs.Controllers { public IOrchardServices Services { get; set; } private Localizer T { get; set; } - public ActionResult Create(string blogSlug) { + public ActionResult Create() { if (!Services.Authorizer.Authorize(Permissions.EditBlogPost, T("Not allowed to create blog post"))) return new HttpUnauthorizedResult(); - Blog blog = _blogService.Get(blogSlug); - if (blog == null) - return new NotFoundResult(); - var blogPost = Services.ContentManager.New(BlogPostDriver.ContentType.Name); - blogPost.Blog = blog; + + if (blogPost.Blog == null) + return new NotFoundResult(); var model = new CreateBlogPostViewModel { BlogPost = Services.ContentManager.BuildEditorModel(blogPost) @@ -46,17 +44,15 @@ namespace Orchard.Blogs.Controllers { } [HttpPost] - public ActionResult Create(string blogSlug, CreateBlogPostViewModel model) { + public ActionResult Create(CreateBlogPostViewModel model) { if (!Services.Authorizer.Authorize(Permissions.EditBlogPost, T("Couldn't create blog post"))) return new HttpUnauthorizedResult(); - Blog blog = _blogService.Get(blogSlug); - if (blog == null) + var blogPost = Services.ContentManager.New(BlogPostDriver.ContentType.Name); + + if (blogPost.Blog == null) return new NotFoundResult(); - // Validate form input - var blogPost = Services.ContentManager.New(BlogPostDriver.ContentType.Name); - blogPost.Blog = blog; model.BlogPost = Services.ContentManager.UpdateEditorModel(blogPost, this); if (!ModelState.IsValid) { @@ -89,11 +85,11 @@ namespace Orchard.Blogs.Controllers { if (!Services.Authorizer.Authorize(Permissions.EditBlogPost, T("Couldn't edit 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(); diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs index 0747ec862..7e7864d3d 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Web.Routing; using JetBrains.Annotations; using Orchard.Blogs.Drivers; using Orchard.Blogs.Models; @@ -18,7 +19,7 @@ namespace Orchard.Blogs.Handlers { private readonly IRoutableService _routableService; private readonly IOrchardServices _orchardServices; - public BlogPostHandler(IBlogPostService blogPostService, IRoutableService routableService, IOrchardServices orchardServices) { + public BlogPostHandler(IBlogService blogService, IBlogPostService blogPostService, IRoutableService routableService, IOrchardServices orchardServices, RequestContext requestContext) { _blogPostService = blogPostService; _routableService = routableService; _orchardServices = orchardServices; @@ -41,6 +42,22 @@ namespace Orchard.Blogs.Handlers { blog.PostCount = posts.Count; }); + OnActivated((context, bp) => { + var blogSlug = requestContext.RouteData.Values.ContainsKey("blogSlug") ? requestContext.RouteData.Values["blogSlug"] as string : null; + if (!string.IsNullOrEmpty(blogSlug)) { + bp.Blog = blogService.Get(blogSlug); + return; + } + + var containerId = requestContext.HttpContext.Request.Form["containerId"]; + if (!string.IsNullOrEmpty(containerId)) { + int cId; + if (int.TryParse(containerId, out cId)) { + bp.Blog = context.ContentItem.ContentManager.Get(cId).As(); + return; + } + } + }); OnCreated((context, bp) => updateBlogPostCount(bp.Blog)); OnPublished((context, bp) => updateBlogPostCount(bp.Blog)); OnVersioned((context, bp1, bp2) => updateBlogPostCount(bp2.Blog));