Adding content validation for SpamFilterPart, so that custom forms don't

send Submitted events if the form is flagged as spam, if the option
to delete spam content is checked.

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2013-02-26 15:59:09 -08:00
parent 2cb78f2e29
commit 3d8ce1f7bb
2 changed files with 14 additions and 7 deletions

View File

@@ -1,14 +1,18 @@
using System;
using Orchard.AntiSpam.Models;
using Orchard.AntiSpam.Services;
using Orchard.AntiSpam.Settings;
using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.Handlers;
using Orchard.Localization;
namespace Orchard.AntiSpam.Drivers {
public class SpamFilterPartDriver : ContentPartDriver<SpamFilterPart> {
private readonly ISpamService _spamService;
private const string TemplateName = "Parts/SpamFilter";
public SpamFilterPartDriver(IOrchardServices services) {
public SpamFilterPartDriver(IOrchardServices services, ISpamService spamService) {
_spamService = spamService;
T = NullLocalizer.Instance;
Services = services;
}
@@ -20,6 +24,14 @@ namespace Orchard.AntiSpam.Drivers {
get { return "SpamFilter"; }
}
protected override DriverResult Editor(SpamFilterPart part, ContentManagement.IUpdateModel updater, dynamic shapeHelper) {
part.Status = _spamService.CheckForSpam(part);
if (part.Settings.GetModel<SpamFilterPartSettings>().DeleteSpam) {
updater.AddModelError("Spam", T("Spam detected."));
}
}
protected override DriverResult Display(SpamFilterPart part, string displayType, dynamic shapeHelper) {
return Combined(
ContentShape("Parts_SpamFilter_Metadata_SummaryAdmin", () => shapeHelper.Parts_SpamFilter_Metadata_SummaryAdmin()),

View File

@@ -1,5 +1,5 @@
using Orchard.AntiSpam.Models;
using Orchard.AntiSpam.Services;
using Orchard.AntiSpam.Settings;
using Orchard.ContentManagement.Handlers;
using Orchard.Data;
@@ -9,17 +9,12 @@ namespace Orchard.AntiSpam.Handlers {
private readonly ITransactionManager _transactionManager;
public SpamFilterPartHandler(
ISpamService spamService,
IRepository<SpamFilterPartRecord> repository,
ITransactionManager transactionManager
) {
_transactionManager = transactionManager;
Filters.Add(StorageFilter.For(repository));
OnUpdated<SpamFilterPart>( (context, part) => {
part.Status = spamService.CheckForSpam(part);
});
OnPublishing<SpamFilterPart>((context, part) => {
if (part.Status == SpamStatus.Spam) {
if (part.Settings.GetModel<SpamFilterPartSettings>().DeleteSpam) {