Skip to content

lewsid/silverstripe-contact-form

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A contact form for SilverStripe 3.0

*Forked version for SilverStripe 3.6.7 / PHP 7.2 Compatibility

This module allows you to create a simple contact form to add to a page type. It is highly configurable since the creation of the form happens in the page controller.

Features

  • Integrates with Postmark for bullet-proof email delivery
  • Integrates with the Boostrap Forms module
  • Includes an API for automatic jQuery validation
  • A spam protection API that can be extended with your own spam protection plugins
  • Logs failed spam attempts to the database, and locks out repeat offending IPs

The "Kitchen Sink" example

<?php

public function ContactForm() {
  return ContactForm::create("ContactForm","you@example.com","You've received a new contact form!")
            ->addFields(
                TextField::create("Name","What is your name?"),
                EmailField::create("Email", "What is your email?")
            )
            // You can add fields as strings, too.
            ->addField("Your message//Textarea")
            ->setSuccessMessage("Thanks for submitting the form!")
            ->setSuccessURL($this->Link('success'))
            ->setOnBeforeSend(function($data, $form) {
                  // Do stuff here. Return false to refuse the form.
            })
            ->setEmailTemplate("MyCustomTemplate")
            ->addOmittedField("SomeField")
            ->setIntroText("Someone submitted a form. Here's the data.")
            ->addSpamProtector(
                SimpleQuestionSpamProtector::create()
                  ->addQuestion("What's the opposite of skinny?","fat")
                  ->addQuestion("Which is bigger, a lake or an ocean?","ocean")
            )
            ->render();
}

What's with ->render()?

The ContactForm class is not actually a form. It is an object that serves as a proxy manager of a Form object. The ->render() method is critical to send the form to the template.

ContactFormPage

The ContactForm module comes with a page type that allows you to easily create contact forms based on user input in the CMS. The ContactFormPage class has fields for the "To" address, success messaging, and more.

To create a page with a contact form, simply create a descendant of ContactFormPage and call the parent Form() method.

<?php

class MyContactPage extends ContactFormPage {}

class MyContactPage_Controller extends ContactFormPage_Controller {

  public function Form() {
    return parent::Form()
        ->addFields(
          TextField::create("YourName","Your name"),
          EmailField::create("Email","Your email"),
          TextareaField::create("Message","Your message")
        )
        ->render();
  }
}

Setting up Postmark

Simply add your API key and confirmed "from" address to your _config.php.

<?php

define('POSTMARKAPP_API_KEY','xxxxxxxxxxxxxxxxxxxxx');
define('POSTMARKAPP_MAIL_FROM_ADDRESS', 'me@example.com');

Once these settings are in place, the ContactForm module will use Postmark as its delivery method.

Integrating with Bootstrap Forms

If you have the BootstrapForms module installed, the form will automatically render as a BootstrapForm, unless you tell it otherwise, using ->setUseBootstrap(false)

Setting the default spam protection

You can set up default spam protection that every form will use, unless configured otherwise.

_config.php

<?php

ContactForm::set_default_spam_protection(array(
  	SimpleQuestionSpamProtector::create()
			->setHeading("Prove you're human by answering a simple question")
			->addQuestion("Is fire hot or cold?", "hot")
			->addQuestion("What color is a stop sign?", "red")
			->addQuestion("Is water wet or dry?","wet")
			->addQuestion("Is the world flat?", "no")
			->addQuestion("What animal says \"Meow?\"", "cat"),

		HoneyPotSpamProtector::create()
			->setName("PleaseFillThisOutYouBot")

About

A contact form module for SilverStripe 3.0

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 53.5%
  • PHP 45.8%
  • Scheme 0.7%