From 2cd444ceb7039ad66b3171452c81a7114c940325 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Fri, 2 Nov 2012 15:05:51 -0700 Subject: [PATCH] Adding support for restricting comments to authenticated users only --HG-- branch : 1.x extra : rebase_source : a8b7abba754a5dc70eb301b308f6b9becbd66a95 --- .../Controllers/CommentController.cs | 11 ++++++++--- .../Orchard.Comments/Drivers/CommentsPartDriver.cs | 6 +++++- .../Settings/CommentsPartSettings.cs | 1 + .../Settings/CommentsPartSettingsEvents.cs | 1 + .../DefinitionTemplates/CommentsPartSettings.cshtml | 4 ++++ .../Orchard.Comments/Views/Parts.CommentForm.cshtml | 12 ++++++++++++ 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs b/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs index 21ebb6adb..abe7286e1 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentController.cs @@ -2,6 +2,7 @@ using System.Web.Mvc; using Orchard.Comments.Models; using Orchard.Comments.Services; +using Orchard.Comments.Settings; using Orchard.Comments.ViewModels; using Orchard.ContentManagement; using Orchard.Localization; @@ -43,9 +44,13 @@ namespace Orchard.Comments.Controllers { CommentsPart commentsPart = null; if(container != null) { commentsPart = container.As(); - if(commentsPart != null && !commentsPart.CommentsActive) { - Services.TransactionManager.Cancel(); - return this.RedirectLocal(returnUrl, "~/"); + if (commentsPart != null) { + var settings = commentsPart.TypePartDefinition.Settings.GetModel(); + if (!commentsPart.CommentsActive + || (settings.MustBeAuthenticated && Services.WorkContext.CurrentUser == null)) { + Services.TransactionManager.Cancel(); + return this.RedirectLocal(returnUrl, "~/"); + } } } diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentsPartDriver.cs index 731556082..f3a8c65dd 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentsPartDriver.cs @@ -12,12 +12,15 @@ namespace Orchard.Comments.Drivers { public class CommentsPartDriver : ContentPartDriver { private readonly ICommentService _commentService; private readonly IContentManager _contentManager; + private readonly IWorkContextAccessor _workContextAccessor; public CommentsPartDriver( ICommentService commentService, - IContentManager contentManager) { + IContentManager contentManager, + IWorkContextAccessor workContextAccessor) { _commentService = commentService; _contentManager = contentManager; + _workContextAccessor = workContextAccessor; } protected override DriverResult Display(CommentsPart part, string displayType, dynamic shapeHelper) { @@ -58,6 +61,7 @@ namespace Orchard.Comments.Drivers { }), ContentShape("Parts_CommentForm", () => { + var newComment = _contentManager.New("Comment"); if (newComment.Has()) newComment.As().CommentedOn = part.Id; var editorShape = _contentManager.BuildEditor(newComment); diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettings.cs b/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettings.cs index 6e35a08bb..007543bb2 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettings.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettings.cs @@ -1,5 +1,6 @@ namespace Orchard.Comments.Settings { public class CommentsPartSettings { public bool DefaultThreadedComments { get; set; } + public bool MustBeAuthenticated { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettingsEvents.cs b/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettingsEvents.cs index 4701ea614..cf977f30d 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettingsEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Settings/CommentsPartSettingsEvents.cs @@ -30,6 +30,7 @@ namespace Orchard.Comments.Settings { if (updateModel.TryUpdateModel(settings, "CommentsPartSettings", null, null)) { builder.WithSetting("CommentsPartSettings.DefaultThreadedComments", settings.DefaultThreadedComments.ToString(CultureInfo.InvariantCulture)); + builder.WithSetting("CommentsPartSettings.MustBeAuthenticated", settings.MustBeAuthenticated.ToString(CultureInfo.InvariantCulture)); } yield return DefinitionTemplate(settings); diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Views/DefinitionTemplates/CommentsPartSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Comments/Views/DefinitionTemplates/CommentsPartSettings.cshtml index e5c115ed9..a0d34a2aa 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Views/DefinitionTemplates/CommentsPartSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Comments/Views/DefinitionTemplates/CommentsPartSettings.cshtml @@ -5,5 +5,9 @@ @Html.EditorFor(m => m.DefaultThreadedComments) +
+ @Html.EditorFor(m => m.MustBeAuthenticated) + +
diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Views/Parts.CommentForm.cshtml b/src/Orchard.Web/Modules/Orchard.Comments/Views/Parts.CommentForm.cshtml index 5aaa7f1b2..32d038bce 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Views/Parts.CommentForm.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Comments/Views/Parts.CommentForm.cshtml @@ -1,6 +1,13 @@ @using Orchard.Comments; +@using Orchard.Comments.Models +@using Orchard.Comments.Settings @using Orchard.Utility.Extensions; +@{ + CommentsPart commentsPart = Model.ContentPart; + var settings = commentsPart.TypePartDefinition.Settings.GetModel(); +} + @if (!Model.ContentPart.CommentsActive) { if (Model.ContentPart.Comments.Count > 0) {
@@ -8,6 +15,11 @@
} } +else if (settings.MustBeAuthenticated && WorkContext.CurrentUser == null) { +
+

@T("You must be authenticated in order to add a comment.")

+
+} else if (WorkContext.CurrentUser == null && !AuthorizedFor(Permissions.AddComment)) {

@T("Add a Comment")

@T("You must {0} to comment.", Html.ActionLink(T("log on").ToString(), "LogOn",