Spam protection module for SilverStripe CMS
Go to file
Simon Erkelens b757c3dc6d SilverStripe 4 and Namespacing 2017-08-28 13:11:48 +12:00
.tx Add transifex config 2015-05-26 17:14:40 +12:00
_config SilverStripe 4 and Namespacing 2017-08-28 13:11:48 +12:00
code SilverStripe 4 and Namespacing 2017-08-28 13:11:48 +12:00
images BUGFIX: Fixed replaced deprecated FieldSet() with FieldList() 2012-07-06 19:59:57 -03:00
lang Update translations 2017-02-09 11:28:52 +13:00
tests Merge branch '2' 2017-08-28 11:20:58 +12:00
.editorconfig Added standard editor config 2015-11-19 13:23:15 +13:00
.gitattributes Added standard git attributes 2015-11-19 19:09:37 +13:00
.gitignore Ignore .DS_Store 2014-02-10 20:48:53 +13:00
.scrutinizer.yml Added standard Scrutinizer config 2015-11-21 19:27:50 +13:00
.travis.yml Move userforms requirement to travis setup call 2017-07-07 14:08:25 +12:00
README.md Added Helpful Robot badge 2016-05-21 17:16:50 +12:00
_config.php SilverStripe 4 and Namespacing 2017-08-28 13:11:48 +12:00
changelog.md Update changelog for 2.0.4 release 2016-05-19 11:56:38 +12:00
code-of-conduct.md Added standard code of conduct 2015-11-21 20:11:25 +13:00
composer.json SilverStripe 4 and Namespacing 2017-08-28 13:11:48 +12:00
license.md Updated license year 2016-01-01 06:38:59 +13:00

README.md

SpamProtection Module

Build Status helpfulrobot

Maintainer Contact

  • Saophalkun Ponlu <phalkunz (at) silverstripe (dot) com>

  • Will Rossiter <will (at) fullscreen (dot) io>

Requirements

SilverStripe 3.0.0 or greater

Documentation

This module provides a generic, consistent API for adding spam protection to your SilverStripe Forms. This does not provide any spam protection out of the box, for that, you must also download one of the spam protection implementations. Currently available options are:

As a developer you can also provide your own protector by creating a class which implements the SpamProtector interface. More on that below.

Configuring

After installing this module and a protector of your choice (i.e mollom) you'll need to rebuild your database through dev/build and set the default protector via SilverStripe's config system. This will update any Form instances that have spam protection hooks with that protector.

mysite/_config/spamprotection.yml

---
name: spamprotection
---
FormSpamProtectionExtension:
  default_spam_protector: MollomSpamProtector

To add spam protection to your form instance call enableSpamProtection.

// your existing form code
$form = new Form( .. );
$form->enableSpamProtection();

The logic to perform the actual spam validation is controlled by each of the individual SpamProtector implementation since they each require a different implementation client side or server side.

Options

enableSpamProtection takes a hash of optional configuration values.

$form->enableSpamProtection(array(
	'protector' => 'MathSpamProtector',
	'name' => 'Captcha'
));

Options to configure are:

protector a class name string or class instance which implements SpamProtector. Defaults to your FormSpamProtectionExtension.default_spam_protector value.

name the form field name argument for the Captcha. Defaults to Catcha. title title of the Captcha form field. Defaults to '' insertBefore name of existing field to insert the spam protection field prior to mapping an array mapping of the Form fields to the standardized list of field names. The list of standardized fields to pass to the spam protector are:

	title
	body
	contextUrl
	contextTitle
	authorName
	authorMail
	authorUrl
	authorIp
	authorId

Defining your own SpamProtector

Any class that implements SpamProtector and the getFormField() method can be set as the spam protector. The getFormField() method returns the FormField to be inserted into the Form. The FormField returned should be in charge of the validation process.

<?php

class CustomSpamProtector implements SpamProtector {

	public function getFormField($name = null, $title = null, $value = null) {
		// CaptchaField is a imagined class which has some functionality.
		// See silverstripe-mollom module for an example.
		return new CaptchaField($name, $title, $value);
	}
}

Using Spam Protection with User Forms

This module provides an EditableSpamProtectionField wrapper which you can add to your UserForm instances. After installing this module and running /dev/build to rebuild the database, your Form Builder interface will have an option for Spam Protection Field. The type of spam protection used will be based on your currently selected SpamProtector instance.

Releasing code with Spam Protection support

Spam protection is useful to provide but in some cases we do not want to require the developer to use spam protection. In that case, modules can provide the following pattern

$form = new Form(..);

if($form->hasExtension('FormSpamProtectionExtension')) {
	$form->enableSpamProtection();
}