diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs index 00ef04906..408cd7abe 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Controllers/BlogPostController.cs @@ -1,3 +1,4 @@ +using System.Text.RegularExpressions; using System.Web.Mvc; using Orchard.Blogs.Extensions; using Orchard.Blogs.Models; @@ -63,6 +64,28 @@ namespace Orchard.Blogs.Controllers { return View(new BlogPostViewModel { Blog = blog, Post = post, ItemView = _contentManager.GetDisplayViewModel(post.ContentItem, null, "detail") }); } + public ActionResult Slugify(string value) { + string slug = value; + + if (!string.IsNullOrEmpty(value)) { + Regex regex = new Regex("([^a-z0-9-_]?)", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + slug = value.Trim(); + slug = slug.Replace(' ', '-'); + slug = slug.Replace("---", "-"); + slug = slug.Replace("--", "-"); + slug = regex.Replace(slug, ""); + + if (slug.Length * 2 < value.Length) + return Json(""); + + if (slug.Length > 100) + slug = slug.Substring(0, 100); + } + + return Json(slug); + } + public ActionResult Create(string blogSlug) { //TODO: (erikpo) Move looking up the current blog up into a modelbinder Blog blog = _blogService.Get(blogSlug); diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs b/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs index 968642be4..dd4144d05 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/Routes.cs @@ -21,6 +21,20 @@ namespace Orchard.Blogs { public IEnumerable GetRoutes() { return new[] { + new RouteDescriptor { + Route = new Route( + "Admin/Blogs/Slugify", + new RouteValueDictionary { + {"area", "Orchard.Blogs"}, + {"controller", "BlogPost"}, + {"action", "Slugify"} + }, + new RouteValueDictionary(), + new RouteValueDictionary { + {"area", "Orchard.Blogs"} + }, + new MvcRouteHandler()) + }, new RouteDescriptor { Route = new Route( "Admin/Blogs/Create", diff --git a/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs b/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs index 794d1f614..362ef45da 100644 --- a/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs +++ b/src/Orchard.Web/Packages/Orchard.Blogs/ViewModels/BlogPostViewModel.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using Orchard.Blogs.Models; using Orchard.Models.ViewModels; using Orchard.Mvc.ViewModels;