From 6a5d07a67c57dd5d81ef284d6d3513b3db445eb5 Mon Sep 17 00:00:00 2001 From: Suha Can Date: Tue, 2 Mar 2010 14:51:08 -0800 Subject: [PATCH] - BBcode support for url,url with anchor and image bbcodes for the content body. --HG-- branch : dev --- .../Core/Common/Controllers/BodyDriver.cs | 18 ++++++++++++++++-- .../Common/ViewModels/BodyDisplayViewModel.cs | 1 + .../DisplayTemplates/Parts/Common.Body.ascx | 2 +- .../Items/Blogs.BlogPost.Summary.ascx | 2 +- .../Items/Pages.Page.Summary.ascx | 5 ++++- .../Items/Blogs.BlogPost.Summary.ascx | 4 +++- .../Items/Blogs.BlogPost.Summary.ascx | 4 +++- 7 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs b/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs index a9df16837..5613793b5 100644 --- a/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs +++ b/src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs @@ -1,4 +1,5 @@ -using Orchard.ContentManagement; +using System.Text.RegularExpressions; +using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.Core.Common.Models; using Orchard.Core.Common.ViewModels; @@ -19,7 +20,7 @@ namespace Orchard.Core.Common.Controllers { // \/\/ Haackalicious on many accounts - don't copy what has been done here for the wrapper \/\/ protected override DriverResult Display(BodyAspect part, string displayType) { - var model = new BodyDisplayViewModel { BodyAspect = part }; + var model = new BodyDisplayViewModel { BodyAspect = part, Text = BbcodeReplace(part.Text)}; return Combined( Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/ManageWrapperPre").Location("primary", "5") : null, Services.Authorizer.Authorize(Permissions.ChangeOwner) ? ContentPartTemplate(model, "Parts/Manage").Location("primary", "5") : null, @@ -37,5 +38,18 @@ namespace Orchard.Core.Common.Controllers { updater.TryUpdateModel(model, Prefix, null, null); return ContentPartTemplate(model, TemplateName, Prefix).Location("primary", "5"); } + + // Can be moved somewhere else once we have IoC enabled body text filters. + private static string BbcodeReplace(string bodyText) { + Regex urlRegex = new Regex(@"\[url\]([^\]]+)\[\/url\]"); + Regex urlRegexWithLink = new Regex(@"\[url=([^\]]+)\]([^\]]+)\[\/url\]"); + Regex imgRegex = new Regex(@"\[img\]([^\]]+)\[\/img\]"); + + bodyText = urlRegex.Replace(bodyText, "$1"); + bodyText = urlRegexWithLink.Replace(bodyText, "$2"); + bodyText = imgRegex.Replace(bodyText, ""); + + return bodyText; + } } } diff --git a/src/Orchard.Web/Core/Common/ViewModels/BodyDisplayViewModel.cs b/src/Orchard.Web/Core/Common/ViewModels/BodyDisplayViewModel.cs index 6daf73520..e9c01fad0 100644 --- a/src/Orchard.Web/Core/Common/ViewModels/BodyDisplayViewModel.cs +++ b/src/Orchard.Web/Core/Common/ViewModels/BodyDisplayViewModel.cs @@ -3,5 +3,6 @@ namespace Orchard.Core.Common.ViewModels { public class BodyDisplayViewModel { public BodyAspect BodyAspect { get; set; } + public string Text { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ascx b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ascx index 712ecf52d..8af1ea411 100644 --- a/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ascx +++ b/src/Orchard.Web/Core/Common/Views/DisplayTemplates/Parts/Common.Body.ascx @@ -1,3 +1,3 @@ <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <%@ Import Namespace="Orchard.Core.Common.ViewModels"%> -<%=Model.BodyAspect.Record.Text %> \ No newline at end of file +<%=Model.Text %> \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 469d4fdfa..cea3d55bc 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -6,4 +6,4 @@ <%@ Import Namespace="Orchard.Blogs.Models"%>

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item.Blog.Slug, Model.Item.Slug)) %>

<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
-
<%=Model.Item.Text ?? string.Format("

{0}

", _Encoded("there's no content for this blog post"))%>
+
<% Html.Zone("primary", ":manage :metadata");%>
diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.Summary.ascx b/src/Orchard.Web/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.Summary.ascx index ef09d7a67..3ebd66d1c 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.Summary.ascx +++ b/src/Orchard.Web/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.Summary.ascx @@ -1,6 +1,9 @@ <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl>" %> +<%@ Import Namespace="Orchard.Mvc.Html"%> <%@ Import Namespace="Orchard.ContentManagement"%> <%@ Import Namespace="Orchard.Core.Common.Models"%> <%@ Import Namespace="Orchard.Mvc.ViewModels"%>

"><%=Html.Encode(Model.Item.Title) %>

-
<%=Model.Item.As().Text ?? T("

there's no content for this blog post

").ToString() %>
\ No newline at end of file +
+<% Html.Zone("primary", ":manage :metadata"); %> +
\ No newline at end of file diff --git a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index bf9f0d646..7708026f4 100644 --- a/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -6,4 +6,6 @@ <%@ Import Namespace="Orchard.Blogs.Models"%>

<%=Html.Link(Html.Encode(Model.Item.Title), Url.BlogPost(Model.Item.Blog.Slug, Model.Item.Slug)) %>

<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
-
<%=Model.Item.Text ?? string.Format("

{0}

", _Encoded("there's no content for this blog post"))%>
+
+<% Html.Zone("primary", ":manage :metadata"); %> +
diff --git a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx index 3f3463d7c..c795663ef 100644 --- a/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx +++ b/src/Orchard.Web/Themes/Green/Views/DisplayTemplates/Items/Blogs.BlogPost.Summary.ascx @@ -9,4 +9,6 @@
<%=Html.PublishedState(Model.Item) %> | <%Html.Zone("meta");%>
-
<%=Model.Item.Text ?? string.Format("

{0}

", _Encoded("there's no content for this blog post"))%>
+
+<% Html.Zone("primary", ":manage :metadata"); %> +