From 770704f3a77c34ee60e084d7d43f107481b7b362 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 21 Aug 2015 16:40:01 +0100 Subject: [PATCH 01/29] Added required attribute to enumeration and numeric fields. Fixes #3404. --- .../Fields/Enumeration.Edit.cshtml | 22 +++++++++---------- .../Fields/Numeric.Edit.cshtml | 4 +++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml index b5fec779d..ca39d9ade 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml @@ -8,34 +8,34 @@ @switch (settings.ListMode) { case ListMode.Dropdown: - @Html.DropDownListFor(m => m.Value, new SelectList(options, Model.Value)) + @Html.DropDownListFor(m => m.Value, new SelectList(options, Model.Value), settings.Required ? new {required = "required"} : null) break; case ListMode.Radiobutton: foreach (var option in options) { - if (string.IsNullOrWhiteSpace(option)) { - - } + if (string.IsNullOrWhiteSpace(option)) { + + } else { - - } + + } } break; case ListMode.Listbox: - @Html.ListBoxFor(m => m.SelectedValues, new MultiSelectList(options, Model.SelectedValues)) - break; + @Html.ListBoxFor(m => m.SelectedValues, new MultiSelectList(options, Model.SelectedValues), settings.Required ? new {required = "required"} : null) + break; case ListMode.Checkbox: - int index = 0; + int index = 0; foreach (var option in options) { index++; if (!string.IsNullOrWhiteSpace(option)) {
- - + required="required" } /> +
} } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml index 369dd5658..9a7a400a9 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Numeric.Edit.cshtml @@ -4,7 +4,9 @@
- @Html.TextBoxFor(m => m.Value, new { @class = "text small", type = "text", min = (Model.Settings.Minimum.HasValue) ? Model.Settings.Minimum.Value : 0, max = (Model.Settings.Maximum.HasValue) ? Model.Settings.Maximum.Value : 1000000, step = Math.Pow(10, 0 - Model.Settings.Scale).ToString(CultureInfo.InvariantCulture) }) + @(Model.Settings.Required + ? Html.TextBoxFor(m => m.Value, new {@class = "text-small", type = "text", min = (Model.Settings.Minimum.HasValue) ? Model.Settings.Minimum.Value : 0, max = (Model.Settings.Maximum.HasValue) ? Model.Settings.Maximum.Value : 1000000, step = Math.Pow(10, 0 - Model.Settings.Scale).ToString(CultureInfo.InvariantCulture), required = "required"}) + : Html.TextBoxFor(m => m.Value, new {@class = "text-small", type = "text", min = (Model.Settings.Minimum.HasValue) ? Model.Settings.Minimum.Value : 0, max = (Model.Settings.Maximum.HasValue) ? Model.Settings.Maximum.Value : 1000000, step = Math.Pow(10, 0 - Model.Settings.Scale).ToString(CultureInfo.InvariantCulture)})) @Html.ValidationMessageFor(m => m.Value) @if (HasText(Model.Settings.Hint)) { @Model.Settings.Hint From 6d255f24ab5546c09eb63c77d6f605ee625e4b3a Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 9 Sep 2015 09:25:01 -0700 Subject: [PATCH 02/29] Fixing exception when the Default layer doesn't exist --- .../Modules/Orchard.Widgets/Controllers/AdminController.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs index 9c7fa0a0b..9431da0bc 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Controllers/AdminController.cs @@ -69,7 +69,8 @@ namespace Orchard.Widgets.Controllers { } LayerPart currentLayer = layerId == null - ? layers.FirstOrDefault(x => x.Name == "Default") + // look for the "Default" layer, or take the first if it doesn't exist + ? layers.FirstOrDefault(x => x.Name == "Default") ?? layers.FirstOrDefault() : layers.FirstOrDefault(layer => layer.Id == layerId); if (currentLayer == null && layerId != null) { // Incorrect layer id passed From 89e8658f4992640045c3c76514d232554b6bf635 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 9 Sep 2015 11:25:52 -0700 Subject: [PATCH 03/29] Improving protected zones in settings UI Protecting MaxPagedCount Protecting BaseUrl Unhiding BaseUrl and SuperUser so that users can see what the values are --- .../Drivers/SiteSettingsPartDriver.cs | 41 ++++++++++--------- .../Parts.Settings.SiteSettingsPart.cshtml | 12 ++++-- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs b/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs index 5591115e5..ec76f1ebc 100644 --- a/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs +++ b/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs @@ -71,11 +71,12 @@ namespace Orchard.Core.Settings.Drivers { var previousBaseUrl = model.Site.BaseUrl; - updater.TryUpdateModel(model, Prefix, null, new [] { "Site.SuperUser", "Site.MaxPageSize" }); + // Update all properties but not SuperUser, MaxPageSize and BaseUrl. + updater.TryUpdateModel(model, Prefix, null, new [] { "Site.SuperUser", "Site.MaxPageSize", "Site.BaseUrl", "Site.MaxPagedCount" }); // only a user with SiteOwner permission can change the site owner if (_authorizer.Authorize(StandardPermissions.SiteOwner)) { - updater.TryUpdateModel(model, Prefix, new[] { "Site.SuperUser", "Site.MaxPageSize" }, null); + updater.TryUpdateModel(model, Prefix, new[] { "Site.SuperUser", "Site.MaxPageSize", "Site.BaseUrl", "Site.MaxPagedCount" }, null); // ensures the super user is fully empty if (String.IsNullOrEmpty(model.SuperUser)) { @@ -88,30 +89,30 @@ namespace Orchard.Core.Settings.Drivers { updater.AddModelError("SuperUser", T("The user {0} was not found", model.SuperUser)); } } - } - // ensure the base url is absolute if provided - if (!String.IsNullOrWhiteSpace(model.Site.BaseUrl)) { - if (!Uri.IsWellFormedUriString(model.Site.BaseUrl, UriKind.Absolute)) { - updater.AddModelError("BaseUrl", T("The base url must be absolute.")); - } + // ensure the base url is absolute if provided + if (!String.IsNullOrWhiteSpace(model.Site.BaseUrl)) { + if (!Uri.IsWellFormedUriString(model.Site.BaseUrl, UriKind.Absolute)) { + updater.AddModelError("BaseUrl", T("The base url must be absolute.")); + } // if the base url has been modified, try to ping it - else if (!String.Equals(previousBaseUrl, model.Site.BaseUrl, StringComparison.OrdinalIgnoreCase)) { - try { - var request = WebRequest.Create(model.Site.BaseUrl) as HttpWebRequest; - if (request != null) { - using (request.GetResponse() as HttpWebResponse) {} + else if (!String.Equals(previousBaseUrl, model.Site.BaseUrl, StringComparison.OrdinalIgnoreCase)) { + try { + var request = WebRequest.Create(model.Site.BaseUrl) as HttpWebRequest; + if (request != null) { + using (request.GetResponse() as HttpWebResponse) { } + } } - } - catch (Exception ex) { - if (ex.IsFatal()) { - throw; + catch (Exception ex) { + if (ex.IsFatal()) { + throw; + } + _notifier.Warning(T("The base url you entered could not be requested from current location.")); + Logger.Warning(ex, "Could not query base url: {0}", model.Site.BaseUrl); } - _notifier.Warning(T("The base url you entered could not be requested from current location.")); - Logger.Warning(ex, "Could not query base url: {0}", model.Site.BaseUrl); } } - } + } return ContentShape("Parts_Settings_SiteSettingsPart", () => shapeHelper.EditorTemplate(TemplateName: "Parts.Settings.SiteSettingsPart", Model: model, Prefix: Prefix)); diff --git a/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Parts.Settings.SiteSettingsPart.cshtml b/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Parts.Settings.SiteSettingsPart.cshtml index af4bd6f1a..eea869eaf 100644 --- a/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Parts.Settings.SiteSettingsPart.cshtml +++ b/src/Orchard.Web/Core/Settings/Views/EditorTemplates/Parts.Settings.SiteSettingsPart.cshtml @@ -16,7 +16,10 @@
- @Html.TextBoxFor(m => m.BaseUrl, new { @class = "text medium is-url" }) + @Html.TextBoxFor(m => m.BaseUrl, + (object)(AuthorizedFor(Orchard.Security.StandardPermissions.SiteOwner) + ? (dynamic)new { @class = "text medium is-url" } + : (dynamic)new { @class = "text medium is-url", @readonly = "readonly" })) @T("Enter the fully qualified base URL of the web site.") @T("e.g., http://localhost:30320/orchardlocal, http://www.yourdomain.com")
@@ -45,14 +48,15 @@ @Html.EditorFor(x => x.PageTitleSeparator) @Html.ValidationMessage("PageTitleSeparator", "*") -@if (AuthorizedFor(Orchard.Security.StandardPermissions.SiteOwner)) {
- @Html.EditorFor(x => x.SuperUser) + @Html.TextBoxFor(x => x.SuperUser, + (object)(AuthorizedFor(Orchard.Security.StandardPermissions.SiteOwner) + ? (dynamic)new { @class = "text single-line" } + : (dynamic)new { @class = "text single-line", @readonly = "readonly" })) @Html.ValidationMessage("SuperUser", "*") @T("Enter an existing account name, or nothing if you don't want a Super user account")
-}
@Html.DropDownList("ResourceDebugMode", resourceDebugMode) From a548e47f909d4e0572ccfeffb64ea47f4a8f5c2e Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 9 Sep 2015 14:52:25 -0700 Subject: [PATCH 04/29] [Fixes #5283] Adding some documentation for ResourceDefinition.SetVersion It has to be a vallid SermVer format. --- src/Orchard/UI/Resources/ResourceDefinition.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Orchard/UI/Resources/ResourceDefinition.cs b/src/Orchard/UI/Resources/ResourceDefinition.cs index f900661a1..6676a21eb 100644 --- a/src/Orchard/UI/Resources/ResourceDefinition.cs +++ b/src/Orchard/UI/Resources/ResourceDefinition.cs @@ -155,6 +155,10 @@ namespace Orchard.UI.Resources { return this; } + /// + /// Sets the version of the resource. + /// + /// The version to set, in the form of major.minor[.build[.revision]] public ResourceDefinition SetVersion(string version) { Version = version; return this; From e839f84537d8ac6d7318bfaaf267d2e391930c3d Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 9 Sep 2015 14:53:16 -0700 Subject: [PATCH 05/29] Fixing unit test The ThemeExtensionFolder stub should have been used --- .../Environment/Extensions/ExtensionManagerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs b/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs index f9926e01b..389cab03a 100644 --- a/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs +++ b/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs @@ -512,7 +512,7 @@ Features: Dependencies: Beta "); - moduleExtensionFolder.Manifests.Add("Classic", @" + themeExtensionFolder.Manifests.Add("Classic", @" Name: Classic Version: 1.0.3 OrchardVersion: 1 From 80b93e412a64aac36f318a2b057e7cd439dc1688 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 9 Sep 2015 15:44:53 -0700 Subject: [PATCH 06/29] Supporting custom display type for search results --- .../Modules/Orchard.Search/Controllers/SearchController.cs | 2 +- .../Orchard.Search/Drivers/SearchSettingsPartDriver.cs | 3 +++ .../Modules/Orchard.Search/Models/SearchSettingsPart.cs | 5 +++++ .../Orchard.Search/ViewModels/SearchSettingsViewModel.cs | 1 + .../Views/EditorTemplates/Parts/Search.SiteSettings.cshtml | 6 +++++- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs index 17226947c..410ccf968 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs @@ -73,7 +73,7 @@ namespace Orchard.Search.Controllers { // ignore search results which content item has been removed or unpublished var foundItems = _contentManager.GetMany(foundIds, VersionOptions.Published, new QueryHints()).ToList(); foreach (var contentItem in foundItems) { - list.Add(_contentManager.BuildDisplay(contentItem, "Summary")); + list.Add(_contentManager.BuildDisplay(contentItem, searchSettingPart.DisplayType)); } searchHits.TotalItemCount -= foundIds.Count() - foundItems.Count(); diff --git a/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs index b928c4272..e6a1d93e6 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs @@ -34,11 +34,14 @@ namespace Orchard.Search.Drivers { var model = new SearchSettingsViewModel(); var searchFields = part.SearchFields; + model.DisplayType = part.DisplayType; + if (updater != null) { if (updater.TryUpdateModel(model, Prefix, null, null)) { part.SearchIndex = model.SelectedIndex; part.SearchFields = model.Entries.ToDictionary(x => x.Index, x => x.Fields.Where(e => e.Selected).Select(e => e.Field).ToArray()); part.FilterCulture = model.FilterCulture; + part.DisplayType = model.DisplayType; } } else if (_indexManager.HasIndexProvider()) { diff --git a/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs index bee81e330..a98c40977 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Models/SearchSettingsPart.cs @@ -24,5 +24,10 @@ namespace Orchard.Search.Models { get { return this.Retrieve(x => x.SearchIndex); } set { this.Store(x => x.SearchIndex, value); } } + + public string DisplayType { + get { return this.Retrieve(x => x.DisplayType, "Summary"); } + set { this.Store(x => x.DisplayType, value); } + } } } diff --git a/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs b/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs index d5541734c..45c3bb422 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsViewModel.cs @@ -9,6 +9,7 @@ namespace Orchard.Search.ViewModels { public string SelectedIndex { get; set; } public IList Entries { get; set; } public bool FilterCulture { get; set; } + public string DisplayType { get; set; } } public class IndexSettingsEntry { diff --git a/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.cshtml index 1fe2c6321..ac8adb6e6 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.cshtml @@ -57,5 +57,9 @@ @T("If checked, search results will only include content items localized in the current culture of the request.")
- +
+ + @Html.TextBoxFor(m => m.DisplayType, new { @class = "text single-line" }) + @T("The display type to use for content items in the search results page.") +
\ No newline at end of file From 18bb84748886cc5cdff576d9b90e182549481ab5 Mon Sep 17 00:00:00 2001 From: myates Date: Fri, 11 Sep 2015 14:19:52 +1000 Subject: [PATCH 07/29] Force empty value attribute on default option label in taxonomy and query element dropdown lists. --- .../Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs | 2 +- .../Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs index d3ae2754b..112c554a1 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/QueryElementDriver.cs @@ -136,7 +136,7 @@ namespace Orchard.DynamicForms.Drivers { var runtimeValues = GetRuntimeValues(element); if (!String.IsNullOrWhiteSpace(optionLabel)) { - yield return new SelectListItem { Text = displayType != "Design" ? _tokenizer.Replace(optionLabel, tokenData) : optionLabel }; + yield return new SelectListItem { Text = displayType != "Design" ? _tokenizer.Replace(optionLabel, tokenData) : optionLabel, Value = string.Empty }; } if (queryId == null) diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs index 8a566b69a..937a406ac 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TaxonomyElementDriver.cs @@ -138,7 +138,7 @@ namespace Orchard.DynamicForms.Drivers { var runtimeValues = GetRuntimeValues(element); if (!String.IsNullOrWhiteSpace(optionLabel)) { - yield return new SelectListItem { Text = displayType != "Design" ? _tokenizer.Replace(optionLabel, tokenData) : optionLabel }; + yield return new SelectListItem { Text = displayType != "Design" ? _tokenizer.Replace(optionLabel, tokenData) : optionLabel, Value = string.Empty }; } if (taxonomyId == null) From 92b7ad75549421fc40e7f9b6124e15e554183c84 Mon Sep 17 00:00:00 2001 From: myates Date: Fri, 11 Sep 2015 17:15:42 +1000 Subject: [PATCH 08/29] Issue 20377 - Ensure comment tokens available to antispam module. --- .../Orchard.AntiSpam/Controllers/AdminController.cs | 4 ++-- .../Orchard.AntiSpam/Drivers/SpamFilterPartDriver.cs | 7 +------ .../Handlers/SpamFilterPartHandler.cs | 12 ++++++++++-- .../Orchard.AntiSpam/Services/DefaultSpamService.cs | 1 + 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.AntiSpam/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.AntiSpam/Controllers/AdminController.cs index 36863d2fb..6af7eb3ae 100644 --- a/src/Orchard.Web/Modules/Orchard.AntiSpam/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.AntiSpam/Controllers/AdminController.cs @@ -144,7 +144,7 @@ namespace Orchard.AntiSpam.Controllers { if (spam != null) { spam.As().Status = SpamStatus.Spam; _spamService.ReportSpam(spam.As()); - Services.ContentManager.Publish(spam); + Services.ContentManager.Unpublish(spam); } return this.RedirectLocal(returnUrl, "~/"); @@ -158,7 +158,7 @@ namespace Orchard.AntiSpam.Controllers { var spam = Services.ContentManager.Get(id, VersionOptions.Latest); if (spam != null) { spam.As().Status = SpamStatus.Ham; - _spamService.ReportSpam(spam.As()); + _spamService.ReportHam(spam.As()); Services.ContentManager.Publish(spam); } diff --git a/src/Orchard.Web/Modules/Orchard.AntiSpam/Drivers/SpamFilterPartDriver.cs b/src/Orchard.Web/Modules/Orchard.AntiSpam/Drivers/SpamFilterPartDriver.cs index addcada23..ed2abeac5 100644 --- a/src/Orchard.Web/Modules/Orchard.AntiSpam/Drivers/SpamFilterPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.AntiSpam/Drivers/SpamFilterPartDriver.cs @@ -1,6 +1,5 @@ using System; using Orchard.AntiSpam.Models; -using Orchard.AntiSpam.Services; using Orchard.AntiSpam.Settings; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; @@ -8,11 +7,9 @@ using Orchard.Localization; namespace Orchard.AntiSpam.Drivers { public class SpamFilterPartDriver : ContentPartDriver { - private readonly ISpamService _spamService; private const string TemplateName = "Parts/SpamFilter"; - public SpamFilterPartDriver(IOrchardServices services, ISpamService spamService) { - _spamService = spamService; + public SpamFilterPartDriver(IOrchardServices services) { T = NullLocalizer.Instance; Services = services; } @@ -25,8 +22,6 @@ namespace Orchard.AntiSpam.Drivers { } protected override DriverResult Editor(SpamFilterPart part, ContentManagement.IUpdateModel updater, dynamic shapeHelper) { - part.Status = _spamService.CheckForSpam(part); - if (part.Settings.GetModel().DeleteSpam) { updater.AddModelError("Spam", T("Spam detected.")); } diff --git a/src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/SpamFilterPartHandler.cs b/src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/SpamFilterPartHandler.cs index 887672386..de0cdaab0 100644 --- a/src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/SpamFilterPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/SpamFilterPartHandler.cs @@ -1,5 +1,5 @@ using Orchard.AntiSpam.Models; - +using Orchard.AntiSpam.Services; using Orchard.AntiSpam.Settings; using Orchard.ContentManagement.Handlers; using Orchard.Data; @@ -7,14 +7,22 @@ using Orchard.Data; namespace Orchard.AntiSpam.Handlers { public class SpamFilterPartHandler : ContentHandler { private readonly ITransactionManager _transactionManager; + private readonly ISpamService _spamService; public SpamFilterPartHandler( IRepository repository, - ITransactionManager transactionManager + ITransactionManager transactionManager, + ISpamService spamService ) { _transactionManager = transactionManager; + _spamService = spamService; + Filters.Add(StorageFilter.For(repository)); + OnCreating((context, part) => { + part.Status = _spamService.CheckForSpam(part); + }); + OnPublishing((context, part) => { if (part.Status == SpamStatus.Spam) { if (part.Settings.GetModel().DeleteSpam) { diff --git a/src/Orchard.Web/Modules/Orchard.AntiSpam/Services/DefaultSpamService.cs b/src/Orchard.Web/Modules/Orchard.AntiSpam/Services/DefaultSpamService.cs index 970ca1f51..2ff30c9e3 100644 --- a/src/Orchard.Web/Modules/Orchard.AntiSpam/Services/DefaultSpamService.cs +++ b/src/Orchard.Web/Modules/Orchard.AntiSpam/Services/DefaultSpamService.cs @@ -126,6 +126,7 @@ namespace Orchard.AntiSpam.Services { CommentAuthorEmail = _tokenizer.Replace(settings.CommentAuthorEmailPattern, data), CommentAuthorUrl = _tokenizer.Replace(settings.CommentAuthorUrlPattern, data), CommentContent = _tokenizer.Replace(settings.CommentContentPattern, data), + CommentType = part.ContentItem.ContentType.ToLower() }; if(workContext.HttpContext != null) { From 3f6dfa3dec1e804bb384662486f0bdf1a6037a94 Mon Sep 17 00:00:00 2001 From: mvarblow Date: Sat, 12 Sep 2015 20:54:54 -0400 Subject: [PATCH 09/29] Fixed typo in Sites.Config comment. --- src/Orchard.Web/Config/Sites.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Config/Sites.config b/src/Orchard.Web/Config/Sites.config index b64e22c3f..852db503e 100644 --- a/src/Orchard.Web/Config/Sites.config +++ b/src/Orchard.Web/Config/Sites.config @@ -8,7 +8,7 @@