From 2077ab964be87ac9fa9247744dc195290ecbbdf3 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Fri, 23 Jul 2010 14:30:22 -0700 Subject: [PATCH] Adding "set as homepage" functionality to the RoutePart - Orchard.Pages was already gone and Orchard.Blogs is now gone (made redundant and less functional in a way) --HG-- branch : dev --- .../Core/Routable/Drivers/RoutePartDriver.cs | 18 +++++- .../Services/RoutableHomePageProvider.cs | 7 ++- .../ViewModels/RoutableEditorViewModel.cs | 1 + .../Parts/Routable.RoutePart.ascx | 6 +- .../Controllers/BlogAdminController.cs | 44 +++++++++------ .../Orchard.Blogs/Orchard.Blogs.csproj | 1 - .../Services/BlogHomePageProvider.cs | 56 ------------------- .../Orchard.Blogs/Services/BlogService.cs | 1 - .../ViewModels/CreateBlogViewModel.cs | 2 +- .../Orchard.Blogs/Views/BlogAdmin/Create.ascx | 9 +-- .../Orchard.Blogs/Views/BlogAdmin/Edit.ascx | 7 +-- .../EditorTemplates/Items/Blogs.Blog.ascx | 5 +- .../Themes/TheAdmin/Styles/site.css | 5 +- src/Orchard/Services/IHomePageProvider.cs | 1 + 14 files changed, 64 insertions(+), 99 deletions(-) delete mode 100644 src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogHomePageProvider.cs diff --git a/src/Orchard.Web/Core/Routable/Drivers/RoutePartDriver.cs b/src/Orchard.Web/Core/Routable/Drivers/RoutePartDriver.cs index 8019265d5..68e287566 100644 --- a/src/Orchard.Web/Core/Routable/Drivers/RoutePartDriver.cs +++ b/src/Orchard.Web/Core/Routable/Drivers/RoutePartDriver.cs @@ -1,4 +1,7 @@ -using Orchard.ContentManagement; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; using Orchard.ContentManagement.Drivers; using Orchard.Core.ContentsLocation.Models; @@ -6,22 +9,27 @@ using Orchard.Core.Routable.Models; using Orchard.Core.Routable.Services; using Orchard.Core.Routable.ViewModels; using Orchard.Localization; +using Orchard.Services; +using Orchard.Settings; using Orchard.UI.Notify; namespace Orchard.Core.Routable.Drivers { public class RoutePartDriver : ContentPartDriver { private readonly IOrchardServices _services; private readonly IRoutableService _routableService; + private readonly IHomePageProvider _routableHomePageProvider; - public RoutePartDriver(IOrchardServices services, IRoutableService routableService) { + public RoutePartDriver(IOrchardServices services, IRoutableService routableService, IEnumerable homePageProviders) { _services = services; _routableService = routableService; + _routableHomePageProvider = homePageProviders.SingleOrDefault(p => p.GetProviderName() == RoutableHomePageProvider.Name); ; T = NullLocalizer.Instance; } private const string TemplateName = "Parts/Routable.RoutePart"; public Localizer T { get; set; } + protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; } protected override string Prefix { get { return "Routable"; } @@ -68,6 +76,7 @@ namespace Orchard.Core.Routable.Drivers { } var location = part.GetLocation("Editor"); + model.PromoteToHomePage = model.Id != 0 && _routableHomePageProvider != null && CurrentSite.HomePage == _routableHomePageProvider.GetSettingValue(model.Id); return ContentPartTemplate(model, TemplateName, Prefix).Location(location); } @@ -97,8 +106,11 @@ namespace Orchard.Core.Routable.Drivers { originalSlug, part.Slug, part.ContentItem.ContentType)); } + if (part.ContentItem.Id != 0 && model.PromoteToHomePage && _routableHomePageProvider != null) { + CurrentSite.HomePage = _routableHomePageProvider.GetSettingValue(part.ContentItem.Id); + } + return Editor(part); } - } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs b/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs index cf4f69b83..3b0fb653d 100644 --- a/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs +++ b/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs @@ -12,6 +12,7 @@ namespace Orchard.Core.Routable.Services { [UsedImplicitly] public class RoutableHomePageProvider : IHomePageProvider { private readonly IContentManager _contentManager; + public const string Name = "RoutableHomePageProvider"; public RoutableHomePageProvider(IOrchardServices services, IContentManager contentManager) { _contentManager = contentManager; @@ -23,7 +24,11 @@ namespace Orchard.Core.Routable.Services { public Localizer T { get; set; } public string GetProviderName() { - return "RoutableHomePageProvider"; + return Name; + } + + public string GetSettingValue(int id) { + return GetProviderName() + ";" + id; } public ActionResult GetHomePage(int itemId) { diff --git a/src/Orchard.Web/Core/Routable/ViewModels/RoutableEditorViewModel.cs b/src/Orchard.Web/Core/Routable/ViewModels/RoutableEditorViewModel.cs index 16bb56c98..ec251e4ce 100644 --- a/src/Orchard.Web/Core/Routable/ViewModels/RoutableEditorViewModel.cs +++ b/src/Orchard.Web/Core/Routable/ViewModels/RoutableEditorViewModel.cs @@ -11,6 +11,7 @@ namespace Orchard.Core.Routable.ViewModels { public string Title { get; set; } public string Slug { get; set; } public int? ContainerId { get; set; } + public bool PromoteToHomePage { get; set; } public string DisplayLeadingPath { get; set; } } diff --git a/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.ascx b/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.ascx index 788b780b3..043fe3d99 100644 --- a/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.ascx +++ b/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.ascx @@ -9,9 +9,9 @@ - - <% using (this.Capture("end-of-page-scripts")) { %> -<% } %> +<% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs index 552ae02a8..a4e8db28f 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs @@ -4,9 +4,11 @@ using JetBrains.Annotations; using Orchard.Blogs.Drivers; using Orchard.Blogs.Extensions; using Orchard.Blogs.Models; +using Orchard.Blogs.Routing; using Orchard.Blogs.Services; using Orchard.Blogs.ViewModels; using Orchard.ContentManagement; +using Orchard.Data; using Orchard.Localization; using Orchard.Mvc.Results; using Orchard.Settings; @@ -18,16 +20,26 @@ namespace Orchard.Blogs.Controllers { public class BlogAdminController : Controller, IUpdateModel { private readonly IBlogService _blogService; private readonly IBlogPostService _blogPostService; + private readonly IContentManager _contentManager; + private readonly ITransactionManager _transactionManager; + private readonly IBlogSlugConstraint _blogSlugConstraint; - public BlogAdminController(IOrchardServices services, IBlogService blogService, IBlogPostService blogPostService) { + public BlogAdminController(IOrchardServices services, + IBlogService blogService, + IBlogPostService blogPostService, + IContentManager contentManager, + ITransactionManager transactionManager, + IBlogSlugConstraint blogSlugConstraint) { Services = services; _blogService = blogService; _blogPostService = blogPostService; + _contentManager = contentManager; + _transactionManager = transactionManager; + _blogSlugConstraint = blogSlugConstraint; T = NullLocalizer.Instance; } public Localizer T { get; set; } - protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; } public IOrchardServices Services { get; set; } public ActionResult Create() { @@ -47,20 +59,20 @@ namespace Orchard.Blogs.Controllers { } [HttpPost] - public ActionResult Create(CreateBlogViewModel model, bool PromoteToHomePage) { - //TODO: (erikpo) Might think about moving this to an ActionFilter/Attribute + public ActionResult Create(CreateBlogViewModel model) { + var blog = Services.ContentManager.New(BlogPartDriver.ContentType.Name); + if (!Services.Authorizer.Authorize(Permissions.ManageBlogs, T("Couldn't create blog"))) return new HttpUnauthorizedResult(); - model.Blog = Services.ContentManager.UpdateEditorModel(Services.ContentManager.New(BlogPartDriver.ContentType.Name), this); + _blogService.Create(blog); + model.Blog = _contentManager.UpdateEditorModel(blog, this); + _blogSlugConstraint.AddSlug(model.Blog.Item.Slug); - if (!ModelState.IsValid) + if (!ModelState.IsValid) { + _transactionManager.Cancel(); return View(model); - - _blogService.Create(model.Blog.Item); - - if (PromoteToHomePage) - CurrentSite.HomePage = "BlogHomePageProvider;" + model.Blog.Item.Id; + } return Redirect(Url.BlogForAdmin(model.Blog.Item.Slug)); } @@ -77,14 +89,14 @@ namespace Orchard.Blogs.Controllers { var model = new BlogEditViewModel { Blog = Services.ContentManager.BuildEditorModel(blog), - PromoteToHomePage = CurrentSite.HomePage == "BlogHomePageProvider;" + blog.Id + //PromoteToHomePage = CurrentSite.HomePage == "BlogHomePageProvider;" + blog.Id }; return View(model); } - [HttpPost] - public ActionResult Edit(string blogSlug, bool PromoteToHomePage) { + [HttpPost, ActionName("Edit")] + public ActionResult EditPOST(string blogSlug) { if (!Services.Authorizer.Authorize(Permissions.ManageBlogs, T("Couldn't edit blog"))) return new HttpUnauthorizedResult(); @@ -100,8 +112,8 @@ namespace Orchard.Blogs.Controllers { if (!ModelState.IsValid) return View(model); - if (PromoteToHomePage) - CurrentSite.HomePage = "BlogHomePageProvider;" + model.Blog.Item.Id; + //if (PromoteToHomePage) + // CurrentSite.HomePage = "BlogHomePageProvider;" + model.Blog.Item.Id; _blogService.Edit(model.Blog.Item); diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj index 24beb0b1a..a4b507966 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj @@ -84,7 +84,6 @@ - diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogHomePageProvider.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogHomePageProvider.cs deleted file mode 100644 index d35b352f4..000000000 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogHomePageProvider.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Linq; -using System.Web.Mvc; -using JetBrains.Annotations; -using Orchard.Blogs.Extensions; -using Orchard.Blogs.Routing; -using Orchard.Blogs.ViewModels; -using Orchard.Mvc.Results; -using Orchard.Services; -using Orchard.Core.Feeds; - -namespace Orchard.Blogs.Services { - [UsedImplicitly] - public class BlogHomePageProvider : IHomePageProvider { - private readonly IBlogService _blogService; - private readonly IBlogSlugConstraint _blogSlugConstraint; - private readonly IFeedManager _feedManager; - - public BlogHomePageProvider(IOrchardServices services, IBlogService blogService, IBlogSlugConstraint blogSlugConstraint, IFeedManager feedManager) { - Services = services; - _blogService = blogService; - _blogSlugConstraint = blogSlugConstraint; - _feedManager = feedManager; - } - - public IOrchardServices Services { get; private set; } - - public string GetProviderName() { - return "BlogHomePageProvider"; - } - - public ActionResult GetHomePage(int itemId) { - var blog = _blogService.Get().Where(x => x.Id == itemId).FirstOrDefault(); - if (blog == null) - return new NotFoundResult(); - - var correctedSlug = _blogSlugConstraint.FindSlug(blog.Slug); - if (correctedSlug == null) - return new NotFoundResult(); - - blog = _blogService.Get(correctedSlug); - if (blog == null) - return new NotFoundResult(); - - var model = new BlogViewModel { - Blog = Services.ContentManager.BuildDisplayModel(blog, "Detail") - }; - - _feedManager.Register(blog); - - return new ViewResult { - ViewName = "~/Modules/Orchard.Blogs/Views/Blog/Item.ascx", - ViewData = new ViewDataDictionary(model) - }; - } - } -} diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogService.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogService.cs index 49acea0b2..5fc355eac 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogService.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogService.cs @@ -33,7 +33,6 @@ namespace Orchard.Blogs.Services { public void Create(BlogPart blogPart) { _contentManager.Create(blogPart.ContentItem); - _blogSlugConstraint.AddSlug(blogPart.Slug); } public void Edit(BlogPart blogPart) { diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/CreateBlogViewModel.cs b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/CreateBlogViewModel.cs index ddb9a516f..ae8ffe9f4 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/CreateBlogViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/ViewModels/CreateBlogViewModel.cs @@ -4,6 +4,6 @@ using Orchard.Mvc.ViewModels; namespace Orchard.Blogs.ViewModels { public class CreateBlogViewModel : BaseViewModel { public ContentItemViewModel Blog { get; set; } - public bool PromoteToHomePage { get; set; } + //public bool PromoteToHomePage { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx index f04a1ffff..25c405bd2 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx @@ -1,12 +1,7 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Blogs.ViewModels"%> -

<%: Html.TitleForPage(T("Add Blog").ToString()) %>

+

<%: Html.TitleForPage(T("Create Blog").ToString()) %>

<% using (Html.BeginFormAntiForgeryPost()) { %> <%: Html.ValidationSummary() %> - <%: Html.EditorForItem(vm => vm.Blog) %> -
- <%: Html.EditorFor(m => m.PromoteToHomePage) %> - -
-
" />
<% + <%: Html.EditorForItem(vm => vm.Blog) %><% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx index 20abeac47..989adf53a 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx @@ -3,10 +3,5 @@

<%: Html.TitleForPage(T("Edit Blog").ToString()) %>

<% using (Html.BeginFormAntiForgeryPost()) { %> <%: Html.ValidationSummary() %> - <%: Html.EditorForItem(m => m.Blog) %> -
- <%: Html.EditorFor(m => m.PromoteToHomePage) %> - -
-
" />
<% + <%: Html.EditorForItem(m => m.Blog) %><% } %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx index 119122908..9d9b13ef2 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx @@ -1,6 +1,7 @@ -<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl>" %> +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> <%@ Import Namespace="Orchard.Mvc.ViewModels"%> <%@ Import Namespace="Orchard.Blogs.Models"%> <% Html.AddTitleParts(Model.Item.Name); %> <% Html.Zone("primary"); %> -<% Html.ZonesAny(); %> \ No newline at end of file +<% Html.ZonesAny(); %> +
" />
\ No newline at end of file diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css index f922cc12c..f26a37369 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css @@ -763,14 +763,15 @@ table .button { /* Core Modules ----------------------------------------------------------*/ /* Routable */ -.permalink input { +.permalink input.text { background:transparent; border-color:#EAE9D9; border-style:dashed; margin-left:0; + margin-right:2em; width:350px; } -.permalink input:focus { +.permalink input.text:focus { background:#FFF; border-color:#666d51; border-style:solid; diff --git a/src/Orchard/Services/IHomePageProvider.cs b/src/Orchard/Services/IHomePageProvider.cs index dfe185f3c..7def1fd96 100644 --- a/src/Orchard/Services/IHomePageProvider.cs +++ b/src/Orchard/Services/IHomePageProvider.cs @@ -3,6 +3,7 @@ namespace Orchard.Services { public interface IHomePageProvider : IDependency { string GetProviderName(); + string GetSettingValue(int itemId); ActionResult GetHomePage(int itemId); } }