From 215e0f012a51c997220644310d85ec0dabcd1820 Mon Sep 17 00:00:00 2001 From: ErikPorter Date: Mon, 23 Nov 2009 17:34:46 +0000 Subject: [PATCH] Did some more url refining for Blogs and setup and hooked up blog edit page. --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041914 --- .../Controllers/AdminController.cs | 29 ---------- .../Controllers/BlogController.cs | 57 ++++++++++++++++++- .../Packages/Orchard.Blogs/Models/Blog.cs | 1 + .../Orchard.Blogs/Orchard.Blogs.csproj | 6 +- .../Packages/Orchard.Blogs/Routes.cs | 34 ++++++++++- .../ViewModels/BlogEditViewModel.cs | 36 ++++++++++++ .../Orchard.Blogs/Views/Blog/Create.aspx | 21 +++++++ .../Orchard.Blogs/Views/Blog/Edit.aspx | 25 ++++++++ 8 files changed, 172 insertions(+), 37 deletions(-) delete mode 100644 src/Orchard.Web/Packages/Orchard.Blogs/Controllers/AdminController.cs create mode 100644 src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogEditViewModel.cs create mode 100644 src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Create.aspx create mode 100644 src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Edit.aspx diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/AdminController.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/AdminController.cs deleted file mode 100644 index 37bb47819..000000000 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/AdminController.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Web.Mvc; -using Orchard.Blogs.Extensions; -using Orchard.Blogs.Models; -using Orchard.Blogs.Services; -using Orchard.Blogs.ViewModels; - -namespace Orchard.Blogs.Controllers { - public class AdminController : Controller { - private readonly IBlogService _blogService; - - public AdminController(IBlogService blogService) { - _blogService = blogService; - } - - public ActionResult Create() { - return View(new CreateBlogViewModel()); - } - - [HttpPost] - public ActionResult Create(CreateBlogViewModel model) { - if (!ModelState.IsValid) - return View(model); - - Blog blog = _blogService.CreateBlog(model.ToCreateBlogParams()); - - return RedirectToAction("edit", new { blog.Record.Id }); - } - } -} diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogController.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogController.cs index 8d210db08..785a9666e 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogController.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogController.cs @@ -1,25 +1,39 @@ using System.Collections.Generic; using System.Web.Mvc; +using Orchard.Blogs.Extensions; using Orchard.Blogs.Models; using Orchard.Blogs.Services; using Orchard.Blogs.ViewModels; +using Orchard.Localization; +using Orchard.Models; +using Orchard.Models.Driver; using Orchard.Mvc.Results; +using Orchard.Security; +using Orchard.UI.Notify; namespace Orchard.Blogs.Controllers { - public class BlogController : Controller { + public class BlogController : Controller, IUpdateModel { + private readonly IContentManager _contentManager; + private readonly INotifier _notifier; private readonly IBlogService _blogService; private readonly IBlogPostService _blogPostService; - public BlogController(IBlogService blogService, IBlogPostService blogPostService) { + public BlogController(IContentManager contentManager, INotifier notifier, IBlogService blogService, IBlogPostService blogPostService) { + _contentManager = contentManager; + _notifier = notifier; _blogService = blogService; _blogPostService = blogPostService; + T = NullLocalizer.Instance; } + public IUser CurrentUser { get; set; } + public Localizer T { get; set; } + public ActionResult List() { return View(new BlogsViewModel {Blogs = _blogService.Get()}); } - //TODO: (erikpo) Should think about moving the slug parameter and get call and null check up into a model binder or action filter + //TODO: (erikpo) Should move the slug parameter and get call and null check up into a model binder public ActionResult Item(string blogSlug) { Blog blog = _blogService.Get(blogSlug); @@ -30,5 +44,42 @@ namespace Orchard.Blogs.Controllers { return View(new BlogViewModel {Blog = blog, Posts = posts}); } + + public ActionResult Create() { + return View(new CreateBlogViewModel()); + } + + [HttpPost] + public ActionResult Create(CreateBlogViewModel model) { + if (!ModelState.IsValid) + return View(model); + + Blog blog = _blogService.CreateBlog(model.ToCreateBlogParams()); + + return RedirectToAction("edit", new { blog.Record.Id }); + } + + public ActionResult Edit(string blogSlug) { + var model = new BlogEditViewModel { Blog = _blogService.Get(blogSlug) }; + model.Editors = _contentManager.GetEditors(model.Blog.ContentItem); + return View(model); + } + + [HttpPost] + public ActionResult Edit(string blogSlug, FormCollection input) { + var model = new BlogEditViewModel { Blog = _blogService.Get(blogSlug) }; + model.Editors = _contentManager.UpdateEditors(model.Blog.ContentItem, this); + + if (!TryUpdateModel(model, input.ToValueProvider())) + return View(model); + + _notifier.Information(T("Blog information updated")); + + return RedirectToAction("Edit", new { blogSlug }); + } + + bool IUpdateModel.TryUpdateModel(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) { + return TryUpdateModel(model, prefix, includeProperties, excludeProperties); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Models/Blog.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Models/Blog.cs index 96e0fe1af..a500160b1 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Models/Blog.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Models/Blog.cs @@ -2,6 +2,7 @@ using Orchard.Models; namespace Orchard.Blogs.Models { public class Blog : ContentPart { + public int Id { get { return ContentItem.Id; } } public string Name { get { return Record.Name; } } public string Slug { get { return Record.Slug; } } public bool Enabled { get { return Record.Enabled; } } diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj index 0fb2a5c30..b3f3bc98a 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Orchard.Blogs.csproj @@ -65,7 +65,6 @@ - @@ -82,12 +81,13 @@ + - - + + diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs index 169edcefc..dd7a63f51 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs @@ -23,7 +23,37 @@ namespace Orchard.Blogs { return new[] { new RouteDescriptor { Route = new Route( - "Blogs", + "Admin/Blogs/Create", + new RouteValueDictionary { + {"area", "Orchard.Blogs"}, + {"controller", "Blog"}, + {"action", "Create"} + }, + new RouteValueDictionary(), + new RouteValueDictionary { + {"area", "Orchard.Blogs"} + }, + new MvcRouteHandler()) + }, + new RouteDescriptor { + Route = new Route( + "Admin/Blogs/{blogSlug}/Edit", + new RouteValueDictionary { + {"area", "Orchard.Blogs"}, + {"controller", "Blog"}, + {"action", "Edit"} + }, + new RouteValueDictionary { + {"blogSlug", new IsBlogConstraint(_blogService)} + }, + new RouteValueDictionary { + {"area", "Orchard.Blogs"} + }, + new MvcRouteHandler()) + }, + new RouteDescriptor { + Route = new Route( + "Admin/Blogs", new RouteValueDictionary { {"area", "Orchard.Blogs"}, {"controller", "Blog"}, @@ -43,7 +73,7 @@ namespace Orchard.Blogs { {"controller", "Blog"}, {"action", "Item"} }, - new RouteValueDictionary() { + new RouteValueDictionary { {"blogSlug", new IsBlogConstraint(_blogService)} }, new RouteValueDictionary { diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogEditViewModel.cs b/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogEditViewModel.cs new file mode 100644 index 000000000..44bbe56dc --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogEditViewModel.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; +using Orchard.Blogs.Models; +using Orchard.Models; +using Orchard.Mvc.ViewModels; +using Orchard.UI.Models; + +namespace Orchard.Blogs.ViewModels { + public class BlogEditViewModel : AdminViewModel { + public Blog Blog { get; set; } + public IEnumerable Editors { get; set; } + + [HiddenInput(DisplayValue = false)] + public int Id { + get { return Blog.Id; } + } + + [Required] + public string Name { + get { return Blog.As().Record.Name; } + set { Blog.As().Record.Name = value; } + } + + [Required] + public string Slug { + get { return Blog.As().Record.Slug; } + set { Blog.As().Record.Slug = value; } + } + + public bool Enabled { + get { return Blog.As().Record.Enabled; } + set { Blog.As().Record.Enabled = value; } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Create.aspx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Create.aspx new file mode 100644 index 000000000..0f71abd89 --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Create.aspx @@ -0,0 +1,21 @@ +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> +<%@ Import Namespace="Orchard.Security" %> +<%@ Import Namespace="Orchard.Mvc.Html" %> +<% Html.Include("Header"); %> +
+

+ Add a new Blog

+ +
+
+ <%using (Html.BeginForm()) { %> +
    + <%= Html.ValidationSummary() %> + <%= Html.EditorForModel() %> +
  1. + + <%=Html.ActionLink("Cancel", "Index", new{}, new{@class="button"}) %>
  2. +
+ <%}/*EndForm*/%> +
+<% Html.Include("Footer"); %> \ No newline at end of file diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Edit.aspx b/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Edit.aspx new file mode 100644 index 000000000..b159d0d3e --- /dev/null +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Views/Blog/Edit.aspx @@ -0,0 +1,25 @@ +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> +<%@ Import Namespace="Orchard.Blogs.ViewModels"%> +<%@ Import Namespace="Orchard.Security" %> +<%@ Import Namespace="Orchard.Mvc.Html" %> +<% Html.Include("Header"); %> +
+

+ Edit Blog

+

+ <%=Html.ActionLink("Blogs", "List", "Blog") %> > Edit #<%= Model.Id%> <%=Html.Encode(Model.Name)%> +

+
+
+ <%using (Html.BeginForm()) { %> +
    + <%= Html.ValidationSummary() %> + <%= Html.EditorForModel() %> +
  1. + + <%=Html.ActionLink("Cancel", "Index", new{}, new{@class="button"}) %> +
  2. +
+ <%}/*EndForm*/%> +
+<% Html.Include("Footer"); %> \ No newline at end of file