Wrapping up the current state of slug generation for Pages

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4045559
This commit is contained in:
skewed
2010-01-17 09:14:45 +00:00
parent 5cb2e0a7c8
commit 1a5996274d
10 changed files with 35 additions and 43 deletions

View File

@@ -23,7 +23,7 @@ namespace Orchard.Core.Settings.Controllers {
public Localizer T { get; set; }
public ActionResult Index(string tabName) {
var model = new Orchard.Core.Settings.ViewModels.SettingsIndexViewModel {
var model = new SettingsIndexViewModel {
Site = _siteService.GetSiteSettings().As<SiteSettings>()
};
model.ViewModel = _modelManager.BuildEditorModel(model.Site);

View File

@@ -13,7 +13,7 @@ namespace Orchard.Blogs.Controllers {
private readonly IOrchardServices _services;
private readonly IBlogService _blogService;
public BlogController(IOrchardServices services, ISessionLocator sessionLocator, IAuthorizer authorizer, INotifier notifier, IBlogService blogService) {
public BlogController(IOrchardServices services, IBlogService blogService) {
_services = services;
_blogService = blogService;
}

View File

@@ -74,7 +74,6 @@ namespace Orchard.Blogs.Controllers {
}
}
//TODO: (erikpo) Evaluate if publish options should be moved into create or out of create to keep it clean
model.BlogPost = _services.ContentManager.UpdateEditorModel(_services.ContentManager.New<BlogPost>("blogpost"), this);
model.BlogPost.Item.Blog = blog;
if (!publishNow && publishDate != null)
@@ -86,6 +85,7 @@ namespace Orchard.Blogs.Controllers {
return View(model);
}
//TODO: (erikpo) Evaluate if publish options should be moved into create or out of create to keep it clean
_services.ContentManager.Create(model.BlogPost.Item.ContentItem, publishNow ? VersionOptions.Published : VersionOptions.Draft);
//TEMP: (erikpo) ensure information has committed for this record

View File

@@ -24,7 +24,7 @@ namespace Orchard.Blogs.Models {
blog.Slug = routableService.GenerateUniqueSlug(slug,
blogService.Get().Where(
b => b.Slug.StartsWith(slug)).Select(
b => b.Slug.StartsWith(slug) && b.Id != blog.Id).Select(
b => b.Slug));
});
}

View File

@@ -26,9 +26,10 @@ namespace Orchard.Blogs.Models {
blogPost.Slug = routableService.GenerateUniqueSlug(slug,
blogPostService.Get(blogPost.Blog, VersionOptions.Published).Where(
bp => bp.Slug.StartsWith(slug)).Select(
bp => bp.Slug.StartsWith(slug) && bp.Id != blogPost.Id).Select(
bp => bp.Slug));
});
OnCreated<BlogPost>((context, bp) => bp.Blog.PostCount++);
OnRemoved<BlogPost>((context, bp) => bp.Blog.PostCount--);

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;
using Orchard.Data;
using Orchard.Localization;
using Orchard.ContentManagement;
using Orchard.Mvc.Results;
@@ -15,23 +14,15 @@ using Orchard.UI.Notify;
namespace Orchard.Pages.Controllers {
[ValidateInput(false)]
public class AdminController : Controller, IUpdateModel {
private readonly ISessionLocator _sessionLocator;
private readonly IOrchardServices _services;
private readonly IPageService _pageService;
private readonly ISlugConstraint _slugConstraint;
public AdminController(
IOrchardServices services,
ISessionLocator sessionLocator,
IPageService pageService,
ISlugConstraint slugConstraint) {
Services = services;
_sessionLocator = sessionLocator;
public AdminController(IOrchardServices services, IPageService pageService) {
_services = services;
_pageService = pageService;
_slugConstraint = slugConstraint;
T = NullLocalizer.Instance;
}
public IOrchardServices Services { get; set; }
private Localizer T { get; set; }
public ActionResult List(PagesOptions options) {
@@ -67,7 +58,7 @@ namespace Orchard.Pages.Controllers {
case PagesBulkAction.None:
break;
case PagesBulkAction.PublishNow:
if (!Services.Authorizer.Authorize(Permissions.PublishPages, T("Couldn't publish page")))
if (!_services.Authorizer.Authorize(Permissions.PublishPages, T("Couldn't publish page")))
return new HttpUnauthorizedResult();
foreach (PageEntry entry in checkedEntries) {
@@ -76,7 +67,7 @@ namespace Orchard.Pages.Controllers {
}
break;
case PagesBulkAction.Unpublish:
if (!Services.Authorizer.Authorize(Permissions.UnpublishPages, T("Couldn't unpublish page")))
if (!_services.Authorizer.Authorize(Permissions.UnpublishPages, T("Couldn't unpublish page")))
return new HttpUnauthorizedResult();
foreach (PageEntry entry in checkedEntries) {
var page = _pageService.GetLatest(entry.PageId);
@@ -84,7 +75,7 @@ namespace Orchard.Pages.Controllers {
}
break;
case PagesBulkAction.Delete:
if (!Services.Authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page")))
if (!_services.Authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page")))
return new HttpUnauthorizedResult();
foreach (PageEntry entry in checkedEntries) {
@@ -108,10 +99,10 @@ namespace Orchard.Pages.Controllers {
}
public ActionResult Create() {
if (!Services.Authorizer.Authorize(Permissions.CreatePages, T("Not allowed to create a page")))
if (!_services.Authorizer.Authorize(Permissions.CreatePages, T("Not allowed to create a page")))
return new HttpUnauthorizedResult();
var page = Services.ContentManager.BuildEditorModel(Services.ContentManager.New<Page>("page"));
var page = _services.ContentManager.BuildEditorModel(_services.ContentManager.New<Page>("page"));
var model = new PageCreateViewModel {
Page = page
@@ -122,7 +113,7 @@ namespace Orchard.Pages.Controllers {
[HttpPost, ActionName("Create")]
public ActionResult CreatePOST(PageCreateViewModel model) {
if (!Services.Authorizer.Authorize(Permissions.CreatePages, T("Couldn't create page")))
if (!_services.Authorizer.Authorize(Permissions.CreatePages, T("Couldn't create page")))
return new HttpUnauthorizedResult();
//TODO: (erikpo) Move this duplicate code somewhere else
@@ -137,22 +128,22 @@ namespace Orchard.Pages.Controllers {
}
}
model.Page = Services.ContentManager.UpdateEditorModel(Services.ContentManager.New<Page>("page"), this);
model.Page = _services.ContentManager.UpdateEditorModel(_services.ContentManager.New<Page>("page"), this);
if (!publishNow && publishDate != null)
model.Page.Item.Published = publishDate.Value;
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
_services.TransactionManager.Cancel();
return View(model);
}
Services.ContentManager.Create(model.Page.Item.ContentItem, publishNow ? VersionOptions.Published : VersionOptions.Draft);
_services.ContentManager.Create(model.Page.Item.ContentItem, publishNow ? VersionOptions.Published : VersionOptions.Draft);
return RedirectToAction("List");
}
public ActionResult Edit(string pageSlug) {
if (!Services.Authorizer.Authorize(Permissions.ModifyPages, T("Couldn't edit page")))
if (!_services.Authorizer.Authorize(Permissions.ModifyPages, T("Couldn't edit page")))
return new HttpUnauthorizedResult();
Page page = _pageService.GetLatest(pageSlug);
@@ -161,7 +152,7 @@ namespace Orchard.Pages.Controllers {
return new NotFoundResult();
var model = new PageEditViewModel {
Page = Services.ContentManager.BuildEditorModel(page)
Page = _services.ContentManager.BuildEditorModel(page)
};
return View(model);
@@ -169,7 +160,7 @@ namespace Orchard.Pages.Controllers {
[HttpPost, ActionName("Edit")]
public ActionResult EditPOST(string pageSlug) {
if (!Services.Authorizer.Authorize(Permissions.ModifyPages, T("Couldn't edit page")))
if (!_services.Authorizer.Authorize(Permissions.ModifyPages, T("Couldn't edit page")))
return new HttpUnauthorizedResult();
Page page = _pageService.GetPageOrDraft(pageSlug);
@@ -198,25 +189,25 @@ namespace Orchard.Pages.Controllers {
_pageService.Unpublish(page);
var model = new PageEditViewModel {
Page = Services.ContentManager.UpdateEditorModel(page, this)
Page = _services.ContentManager.UpdateEditorModel(page, this)
};
TryUpdateModel(model);
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
_services.TransactionManager.Cancel();
return View(model);
}
Services.Notifier.Information(T("Page information updated."));
_services.Notifier.Information(T("Page information updated."));
return RedirectToAction("List");
}
[HttpPost]
public ActionResult Delete(string pageSlug) {
if (!Services.Authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page")))
if (!_services.Authorizer.Authorize(Permissions.DeletePages, T("Couldn't delete page")))
return new HttpUnauthorizedResult();
Page page = _pageService.Get(pageSlug);
@@ -226,7 +217,7 @@ namespace Orchard.Pages.Controllers {
_pageService.Delete(page);
Services.Notifier.Information(T("Page was successfully deleted"));
_services.Notifier.Information(T("Page was successfully deleted"));
return RedirectToAction("List");
}

View File

@@ -20,15 +20,15 @@ namespace Orchard.Pages.Models {
Filters.Add(new ActivatingFilter<BodyAspect>(PageDriver.ContentType.Name));
Filters.Add(new StorageFilter<CommonVersionRecord>(commonRepository));
OnCreating<Page>((context, blog) =>
OnCreating<Page>((context, page) =>
{
string slug = !string.IsNullOrEmpty(blog.Slug)
? blog.Slug
: routableService.Slugify(blog.Title);
string slug = !string.IsNullOrEmpty(page.Slug)
? page.Slug
: routableService.Slugify(page.Title);
blog.Slug = routableService.GenerateUniqueSlug(slug,
page.Slug = routableService.GenerateUniqueSlug(slug,
pageService.Get(PageStatus.Published).Where(
p => p.Slug.StartsWith(slug)).Select(
p => p.Slug.StartsWith(slug) && p.Id != page.Id).Select(
p => p.Slug));
});
}

View File

@@ -231,7 +231,7 @@ namespace Orchard.Mvc.Html {
tagBuilder.MergeAttribute("action", formAction);
tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(formMethod), true);
htmlHelper.ViewContext.HttpContext.Response.Output.Write(tagBuilder.ToString(TagRenderMode.StartTag));
htmlHelper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag));
return new MvcFormAntiForgeryPost(htmlHelper);
}

View File

@@ -13,7 +13,7 @@ namespace Orchard.Mvc.Html {
public static class LayoutExtensions {
public static void RenderBody(this HtmlHelper html) {
LayoutViewContext layoutViewContext = LayoutViewContext.From(html.ViewContext);
html.ViewContext.HttpContext.Response.Output.Write(layoutViewContext.BodyContent);
html.ViewContext.Writer.Write(layoutViewContext.BodyContent);
}
public static MvcHtmlString Body(this HtmlHelper html) {

View File

@@ -10,7 +10,7 @@ namespace Orchard.Mvc.Html {
}
protected override void Dispose(bool disposing) {
_htmlHelper.ViewContext.HttpContext.Response.Output.Write(_htmlHelper.AntiForgeryTokenOrchard());
_htmlHelper.ViewContext.Writer.Write(_htmlHelper.AntiForgeryTokenOrchard());
base.Dispose(disposing);
}