From d17e8a773f88d9a93faaf754373cd99bce543236 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 13 Jul 2015 15:36:20 +1200 Subject: [PATCH] API Custom rules for email recipients --- .travis.yml | 8 +- code/model/UserDefinedForm.php | 392 +++++++++++++++++++----- composer.json | 3 +- css/FieldEditor.css | 13 + docs/en/_images/add-email-recipient.png | Bin 0 -> 37458 bytes docs/en/_images/viewing-submissions.png | Bin 0 -> 48858 bytes docs/en/user-documentation.md | 83 ++++- tests/UserDefinedFormTest.php | 199 ++++++++---- tests/UserDefinedFormTest.yml | 303 +++++++++++------- 9 files changed, 749 insertions(+), 252 deletions(-) create mode 100644 docs/en/_images/add-email-recipient.png create mode 100644 docs/en/_images/viewing-submissions.png diff --git a/.travis.yml b/.travis.yml index 926fd2f..640a63d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,17 +2,17 @@ language: php php: - - 5.3 + - 5.4 env: - - DB=MYSQL CORE_RELEASE=3.1 - DB=MYSQL CORE_RELEASE=3 + - DB=MYSQL CORE_RELEASE=3.1 - DB=PGSQL CORE_RELEASE=3.1 matrix: include: - - php: 5.4 - env: DB=MYSQL CORE_RELEASE=master + - php: 5.3 + env: DB=MYSQL CORE_RELEASE=3.1 before_script: - git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support diff --git a/code/model/UserDefinedForm.php b/code/model/UserDefinedForm.php index ec6a6c7..be69c81 100755 --- a/code/model/UserDefinedForm.php +++ b/code/model/UserDefinedForm.php @@ -83,6 +83,7 @@ class UserDefinedForm extends Page { // define tabs $fields->findOrMakeTab('Root.FormContent', _t('UserDefinedForm.FORM', 'Form')); $fields->findOrMakeTab('Root.FormOptions', _t('UserDefinedForm.CONFIGURATION', 'Configuration')); + $fields->findOrMakeTab('Root.Recipients', _t('UserDefinedForm.RECIPIENTS', 'Recipients')); $fields->findOrMakeTab('Root.Submissions', _t('UserDefinedForm.SUBMISSIONS', 'Submissions')); // field editor @@ -99,21 +100,19 @@ class UserDefinedForm extends Page { $editor->setRows(3); $label->addExtraClass('left'); - // Set the summary fields of UserDefinedForm_EmailRecipient dynamically via config system - Config::inst()->update( - 'UserDefinedForm_EmailRecipient', - 'summary_fields', - array( - 'EmailAddress' => _t('UserDefinedForm.EMAILADDRESS', 'Email'), - 'EmailSubject' => _t('UserDefinedForm.EMAILSUBJECT', 'Subject'), - 'EmailFrom' => _t('UserDefinedForm.EMAILFROM', 'From'), - ) - ); + // Define config for email recipients + $emailRecipientsConfig = GridFieldConfig_RecordEditor::create(10); + $emailRecipientsConfig->getComponentByType('GridFieldAddNewButton') + ->setButtonName( + _t('UserDefinedForm.ADDEMAILRECIPIENT', 'Add Email Recipient') + ); // who do we email on submission - $emailRecipients = new GridField('EmailRecipients', _t('UserDefinedForm.EMAILRECIPIENTS', 'Email Recipients'), $self->EmailRecipients(), GridFieldConfig_RecordEditor::create(10)); - $emailRecipients->getConfig()->getComponentByType('GridFieldAddNewButton')->setButtonName( - _t('UserDefinedForm.ADDEMAILRECIPIENT', 'Add Email Recipient') + $emailRecipients = new GridField( + 'EmailRecipients', + _t('UserDefinedForm.EMAILRECIPIENTS', 'Email Recipients'), + $self->EmailRecipients(), + $emailRecipientsConfig ); $emailRecipients ->getConfig() @@ -121,7 +120,7 @@ class UserDefinedForm extends Page { ->setItemRequestClass('UserDefinedForm_EmailRecipient_ItemRequest'); $fields->addFieldsToTab('Root.FormOptions', $onCompleteFieldSet); - $fields->addFieldToTab('Root.FormOptions', $emailRecipients); + $fields->addFieldToTab('Root.Recipients', $emailRecipients); $fields->addFieldsToTab('Root.FormOptions', $self->getFormOptions()); @@ -322,7 +321,12 @@ SQL; * @return ArrayList */ public function FilteredEmailRecipients($data = null, $form = null) { - $recipients = new ArrayList($this->getComponents('EmailRecipients')->toArray()); + $recipients = new ArrayList($this->EmailRecipients()->toArray()); + + // Filter by rules + $recipients = $recipients->filterByCallback(function($recipient) use ($data, $form) { + return $recipient->canSend($data, $form); + }); $this->extend('updateFilteredEmailRecipients', $recipients, $data, $form); @@ -1169,13 +1173,13 @@ JS } /** - * A Form can have multiply members / emails to email the submission + * A Form can have multiply members / emails to email the submission * to and custom subjects - * + * * @package userforms */ class UserDefinedForm_EmailRecipient extends DataObject { - + private static $db = array( 'EmailAddress' => 'Varchar(200)', 'EmailSubject' => 'Varchar(200)', @@ -1185,90 +1189,236 @@ class UserDefinedForm_EmailRecipient extends DataObject { 'EmailBodyHtml' => 'HTMLText', 'EmailTemplate' => 'Varchar', 'SendPlain' => 'Boolean', - 'HideFormData' => 'Boolean' + 'HideFormData' => 'Boolean', + 'CustomRulesCondition' => 'Enum("And,Or")' ); - + private static $has_one = array( 'Form' => 'UserDefinedForm', 'SendEmailFromField' => 'EditableFormField', 'SendEmailToField' => 'EditableFormField', 'SendEmailSubjectField' => 'EditableFormField' ); - - private static $summary_fields = array(); + + private static $has_many = array( + 'CustomRules' => 'UserDefinedForm_EmailRecipientCondition' + ); + + private static $summary_fields = array( + 'EmailAddress', + 'EmailSubject', + 'EmailFrom' + ); + + public function summaryFields() { + $fields = parent::summaryFields(); + if(isset($fields['EmailAddress'])) { + $fields['EmailAddress'] = _t('UserDefinedForm.EMAILADDRESS', 'Email'); + } + if(isset($fields['EmailSubject'])) { + $fields['EmailSubject'] = _t('UserDefinedForm.EMAILSUBJECT', 'Subject'); + } + if(isset($fields['EmailFrom'])) { + $fields['EmailFrom'] = _t('UserDefinedForm.EMAILFROM', 'From'); + } + return $fields; + } + + /** + * Get instance of UserDefinedForm when editing in getCMSFields + * + * @return UserDefinedFrom + */ + protected function getFormParent() { + $formID = $this->FormID + ? $this->FormID + : Session::get('CMSMain.currentPage'); + return UserDefinedForm::get()->byID($formID); + } + + public function getTitle() { + if($this->EmailAddress) { + return $this->EmailAddress; + } + if($this->EmailSubject) { + return $this->EmailSubject; + } + return parent::getTitle(); + } + + /** + * Generate a gridfield config for editing filter rules + * + * @return GridFieldConfig + */ + protected function getRulesConfig() { + $formFields = $this->getFormParent()->Fields(); + + $config = GridFieldConfig::create() + ->addComponents( + new GridFieldButtonRow('before'), + new GridFieldToolbarHeader(), + new GridFieldAddNewInlineButton(), + new GridState_Component(), + new GridFieldDeleteAction(), + $columns = new GridFieldEditableColumns() + ); + + $columns->setDisplayFields(array( + 'ConditionFieldID' => function($record, $column, $grid) use ($formFields) { + return DropdownField::create($column, false, $formFields->map('ID', 'Title')); + }, + 'ConditionOption' => function($record, $column, $grid) { + $options = UserDefinedForm_EmailRecipientCondition::config()->condition_options; + return DropdownField::create($column, false, $options); + }, + 'ConditionValue' => function($record, $column, $grid) { + return TextField::create($column); + } + )); + + return $config; + } /** * @return FieldList */ public function getCMSFields() { + // Determine optional field values + $form = $this->getFormParent(); + // predefined choices are also candidates + $multiOptionFields = EditableMultipleOptionField::get()->filter('ParentID', $form->ID); + + // if they have email fields then we could send from it + $validEmailFromFields = EditableEmailField::get()->filter('ParentID', $form->ID); + + // For the subject, only one-line entry boxes make sense + $validSubjectFields = EditableTextField::get() + ->filter('ParentID', $form->ID) + ->filterByCallback(function($item, $list) { + return (int)$item->getSetting('Rows') === 1; + }); + $validSubjectFields->merge($multiOptionFields); + + // To address can only be email fields or multi option fields + $validEmailToFields = new ArrayList($validEmailFromFields->toArray()); + $validEmailToFields->merge($multiOptionFields); + + // Build fieldlist + $fields = FieldList::create(Tabset::create('Root')->addExtraClass('EmailRecipientForm')); + + // Configuration fields + $fields->addFieldsToTab('Root.EmailDetails', array( + // Subject + FieldGroup::create( + TextField::create('EmailSubject', _t('UserDefinedForm.TYPESUBJECT', 'Type subject')) + ->setAttribute('style', 'min-width: 400px;'), + DropdownField::create( + 'SendEmailSubjectFieldID', + _t('UserDefinedForm.SELECTAFIELDTOSETSUBJECT', '.. or select a field to use as the subject'), + $validSubjectFields->map('ID', 'Title') + )->setEmptyString('') + ) + ->setTitle(_t('UserDefinedForm.EMAILSUBJECT', 'Email subject')), + + // To + FieldGroup::create( + TextField::create('EmailAddress', _t('UserDefinedForm.TYPETO', 'Type to address')) + ->setAttribute('style', 'min-width: 400px;'), + DropdownField::create( + 'SendEmailToFieldID', + _t('UserDefinedForm.ORSELECTAFIELDTOUSEASTO', '.. or select a field to use as the to address'), + $validEmailToFields->map('ID', 'Title') + )->setEmptyString(' ') + ) + ->setTitle(_t('UserDefinedForm.SENDEMAILTO','Send email to')) + ->setDescription(_t( + 'UserDefinedForm.SENDEMAILTO_DESCRIPTION', + 'You may enter multiple email addresses as a comma separated list.' + )), + + + // From + TextField::create('EmailFrom', _t('UserDefinedForm.FROMADDRESS','Send email from')) + ->setDescription(_t( + 'UserDefinedForm.EmailFromContent', + "The from address allows you to set who the email comes from. On most servers this ". + "will need to be set to an email address on the same domain name as your site. ". + "For example on yoursite.com the from address may need to be something@yoursite.com. ". + "You can however, set any email address you wish as the reply to address." + )), + + + // Reply-To + FieldGroup::create( + TextField::create('EmailReplyTo', _t('UserDefinedForm.TYPEREPLY', 'Type reply address')) + ->setAttribute('style', 'min-width: 400px;'), + DropdownField::create( + 'SendEmailFromFieldID', + _t('UserDefinedForm.ORSELECTAFIELDTOUSEASFROM', '.. or select a field to use as reply to address'), + $validEmailFromFields->map('ID', 'Title') + )->setEmptyString(' ') + ) + ->setTitle(_t('UserDefinedForm.REPLYADDRESS', 'Email for reply to')) + ->setDescription(_t( + 'UserDefinedForm.REPLYADDRESS_DESCRIPTION', + 'The email address which the recipient is able to \'reply\' to.' + )) + )); + // Only show the preview link if the recipient has been saved. if (!empty($this->EmailTemplate)) { - $translatableKey = 'UserDefinedForm.EMAILPREVIEWAVAILABLE'; - $previewHTML = '

Preview email

' . - 'Note: Unsaved changes will not appear in the preview.'; + $preview = sprintf( + '

%s

%s', + "admin/pages/edit/EditForm/field/EmailRecipients/item/{$this->ID}/preview", + _t('UserDefinedForm.PREVIEW_EMAIL', 'Preview email'), + _t('UserDefinedForm.PREVIEW_EMAIL_DESCRIPTION', 'Note: Unsaved changes will not appear in the preview.') + ); } else { - $translatableKey = 'UserDefinedForm.EMAILPREVIEWUNAVAILABLE'; - $previewHTML = 'You can preview this email once you have saved the Recipient.'; + $preview = sprintf( + '%s', + _t( + 'UserDefinedForm.PREVIEW_EMAIL_UNAVAILABLE', + 'You can preview this email once you have saved the Recipient.' + ) + ); } - - $fields = new FieldList( - new TextField('EmailSubject', _t('UserDefinedForm.EMAILSUBJECT', 'Email subject')), - new LiteralField('EmailFromContent', '

'._t( - 'UserDefinedForm.EmailFromContent', - "The from address allows you to set who the email comes from. On most servers this ". - "will need to be set to an email address on the same domain name as your site. ". - "For example on yoursite.com the from address may need to be something@yoursite.com. ". - "You can however, set any email address you wish as the reply to address." - ) . "

"), - new TextField('EmailFrom', _t('UserDefinedForm.FROMADDRESS','Send email from')), - new TextField('EmailReplyTo', _t('UserDefinedForm.REPLYADDRESS', 'Email for reply to')), - new TextField('EmailAddress', _t('UserDefinedForm.SENDEMAILTO','Send email to')), + + // Email templates + $fields->addFieldsToTab('Root.EmailContent', array( new CheckboxField('HideFormData', _t('UserDefinedForm.HIDEFORMDATA', 'Hide form data from email?')), new CheckboxField('SendPlain', _t('UserDefinedForm.SENDPLAIN', 'Send email as plain text? (HTML will be stripped)')), new DropdownField('EmailTemplate', _t('UserDefinedForm.EMAILTEMPLATE', 'Email template'), $this->getEmailTemplateDropdownValues()), new HTMLEditorField('EmailBodyHtml', _t('UserDefinedForm.EMAILBODYHTML','Body')), new TextareaField('EmailBody', _t('UserDefinedForm.EMAILBODY','Body')), - new LiteralField('EmailPreview', '
' . _t($translatableKey, $previewHTML) . '
') + new LiteralField('EmailPreview', '
' . $preview . '
') + )); + + // Custom rules for sending this field + $grid = new GridField( + "CustomRules", + _t('EditableFormField.CUSTOMRULES', 'Custom Rules'), + $this->CustomRules(), + $this->getRulesConfig() ); - - $formID = ($this->FormID != 0) ? $this->FormID : Session::get('CMSMain.currentPage'); - $dropdowns = array(); - // if they have email fields then we could send from it - $validEmailFields = EditableEmailField::get()->filter('ParentID', (int)$formID); - // for the subject, only one-line entry boxes make sense - $validSubjectFields = EditableTextField::get()->filter('ParentID', (int)$formID)->filterByCallback(function($item, $list) { return (int)$item->getSetting('Rows') === 1; }); - // predefined choices are also candidates - $multiOptionFields = EditableMultipleOptionField::get()->filter('ParentID', (int)$formID); - - $fields->insertAfter($dropdowns[] = new DropdownField( - 'SendEmailFromFieldID', - _t('UserDefinedForm.ORSELECTAFIELDTOUSEASFROM', '.. or select a field to use as reply to address'), - $validEmailFields->map('ID', 'Title') - ), 'EmailReplyTo'); - - $validEmailFields = new ArrayList($validEmailFields->toArray()); - $validEmailFields->merge($multiOptionFields); - $validSubjectFields->merge($multiOptionFields); - - $fields->insertAfter($dropdowns[] = new DropdownField( - 'SendEmailToFieldID', - _t('UserDefinedForm.ORSELECTAFIELDTOUSEASTO', '.. or select a field to use as the to address'), - $validEmailFields->map('ID', 'Title') - ), 'EmailAddress'); - $fields->insertAfter($dropdowns[] = new DropdownField( - 'SendEmailSubjectFieldID', - _t('UserDefinedForm.SELECTAFIELDTOSETSUBJECT', '.. or select a field to use as the subject'), - $validSubjectFields->map('ID', 'Title') - ), 'EmailSubject'); - - foreach($dropdowns as $dropdown) { - $dropdown->setHasEmptyDefault(true); - $dropdown->setEmptyString(" "); - } + $grid->setDescription(_t( + 'UserDefinedForm.RulesDescription', + 'Emails will only be sent to the recipient if the custom rules are met. If no rules are defined, this receipient will receive notifications for every submission.' + )); + $fields->addFieldsToTab('Root.CustomRules', array( + new DropdownField( + 'CustomRulesCondition', + _t('UserDefinedForm.SENDIF', 'Send condition'), + array( + 'Or' => 'Any conditions are true', + 'And' => 'All conditions are true' + ) + ), + $grid + )); $this->extend('updateCMSFields', $fields); - return $fields; } @@ -1289,7 +1439,7 @@ class UserDefinedForm_EmailRecipient extends DataObject { public function canView($member = null) { return $this->Form()->canView(); } - + /** * @param Member * @@ -1298,7 +1448,7 @@ class UserDefinedForm_EmailRecipient extends DataObject { public function canEdit($member = null) { return $this->Form()->canEdit(); } - + /** * @param Member * @@ -1308,6 +1458,36 @@ class UserDefinedForm_EmailRecipient extends DataObject { return $this->Form()->canDelete(); } + /* + * Determine if this recipient may receive notifications for this submission + * + * @param array $data + * @param Form $form + * @return bool + */ + public function canSend($data, $form) { + // Skip if no rules configured + $customRules = $this->CustomRules(); + if(!$customRules->count()) { + return true; + } + + // Check all rules + $isAnd = $this->CustomRulesCondition === 'And'; + foreach($customRules as $customRule) { + $matches = $customRule->matches($data, $form); + if($isAnd && !$matches) { + return false; + } + if(!$isAnd && $matches) { + return true; + } + } + + // Once all rules are checked + return $isAnd; + } + /** * Make sure the email template saved against the recipient exists on the file system. * @@ -1382,6 +1562,58 @@ class UserDefinedForm_EmailRecipient_ItemRequest extends GridFieldDetailForm_Ite } } +/** + * Declares a condition that determines whether an email can be sent to a given recipient + */ +class UserDefinedForm_EmailRecipientCondition extends DataObject { + + /** + * List of options + * + * @config + * @var array + */ + private static $condition_options = array( + "IsBlank" => "Is blank", + "IsNotBlank" => "Is not blank", + "Equals" => "Equals", + "NotEquals" => "Doesn't equal" + ); + + private static $db = array( + 'ConditionOption' => 'Enum("IsBlank,IsNotBlank,Equals,NotEquals")', + 'ConditionValue' => 'Varchar' + ); + + private static $has_one = array( + 'Parent' => 'UserDefinedForm_EmailRecipient', + 'ConditionField' => 'EditableFormField' + ); + + /** + * Determine if this rule matches the given condition + * + * @param array $data + * @param Form $form + * @return bool + */ + public function matches($data, $form) { + $fieldName = $this->ConditionField()->Name; + $fieldValue = isset($data[$fieldName]) ? $data[$fieldName] : null; + switch($this->ConditionOption) { + case 'IsBlank': + return empty($fieldValue); + case 'IsNotBlank': + return !empty($fieldValue); + default: + $matches = is_array($fieldValue) + ? in_array($this->ConditionValue, $fieldValue) + : $this->ConditionValue === (string)$fieldValue; + return ($this->ConditionOption === 'Equals') === (bool)$matches; + } + } +} + /** * Email that gets sent to the people listed in the Email Recipients when a * submission is made. @@ -1407,5 +1639,5 @@ class UserDefinedForm_SubmittedFormEmail extends Email { */ public function setReplyTo($email) { $this->customHeaders['Reply-To'] = $email; - } + } } diff --git a/composer.json b/composer.json index 33a027d..e1ef7f8 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,8 @@ }], "require": { "silverstripe/framework": ">=3.1.0", - "silverstripe/cms": ">=3.1.0" + "silverstripe/cms": ">=3.1.0", + "silverstripe-australia/gridfieldextensions": "1.1.0" }, "suggest": { "colymba/gridfield-bulk-editing-tools": "Allows for bulk management of form submissions" diff --git a/css/FieldEditor.css b/css/FieldEditor.css index 5d39220..7b4cced 100755 --- a/css/FieldEditor.css +++ b/css/FieldEditor.css @@ -51,6 +51,19 @@ li.class-UserDefinedForm > a .jstree-pageicon { background-position: 0 -64px; } } */ +/* Email Recipient Form +---------------------------------------- */ +.EmailRecipientForm .fieldgroup .fieldgroup-field { + padding-top: 0; +} + +.EmailRecipientForm .fieldgroup .fieldgroup-field.last { + padding-bottom: 0; +} + +.EmailRecipientForm .ss-ui-button { + margin-bottom: 4px; +} /* Field Listing diff --git a/docs/en/_images/add-email-recipient.png b/docs/en/_images/add-email-recipient.png new file mode 100644 index 0000000000000000000000000000000000000000..9518ccb89180f27db49ea77d86aa30ef2d4e9105 GIT binary patch literal 37458 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 -### Notes: - Don't worry if you create your page in the "wrong" place. Pages can be moved and re-ordered easily, and we will cover that under "Managing Your Site." @@ -175,9 +174,19 @@ to determine the size and the number of rows in a text field. * Use [HTML Block](#html-block), with the appropriate level [Heading](#heading). -## Sending emails +## Viewing form submissions -The UserForms module allows you to email form submissions to multiple people. +To view form submissions navigate to the 'Submissions' tab. You can click any of the listed submissions to view the content of each submission. + +![Viewing submissions](_images/viewing-submissions.png) + +## Setting up automated emails + +It is possible to set up automated emails upon each form submission, to do this navigate to the "Recipients" tab and click "Add Email Recipient". + +![Add email recipient](_images/add-email-recipient.png) + +You will be prompted with a form where you can fill in the details of the email. ### Using form fields in submission emails @@ -188,3 +197,67 @@ Each form field has a unique merge field located under the field's options. Simply insert the merge field into the email content, and the field's value will be displayed, when the email is sent. ![Merge field in content](_images/mergefieldcontent.png) + +### Email details + +#### Email Subject + +The subject of the email, you can either type a custom subject here or select a field from the form to use as the email subject. + +#### Send email to + +This is the recipient's address where the email will be sent. + +#### Send email from + +This shows where the email was sent from, and will most likely need to be an email address on the same domain as your site. For example If your website is yoursite.com, the email address for this field should be something@yoursite.com. + +#### Email for reply to + +This will be the address which the email recipient will be able to 'reply' to. + +#### Email content + +In this field you can add a custom message to add to the email + +#### Hide form data from email? + +You can check this if you do not wish for the email recipient to see the form submission's data in the email. + +#### Send email as plain text? + +You can check this if you want to remove all of the HTML from the email, this means the email +will have no custom styling and the recipient will only see the plain text. + +If `Send email as plain text?` is unselected, several additional options for HTML editing are displayed. + +If sending as HTML, there is the option to preview the HTML that is sent in the editor. Additionally, a HTML +template can be selected to provide a standard formatted email to contain the editable HTML content. + +The list of available templates can be controlled by specifying the folder for these template files in yaml config. + + + :::yaml + UserDefinedForm: + email_template_directory: mysite/templates/useremails/ + + +### Custom Rules + +In this section you can determine whether to send the email to the recipient based on the data in the form submission. + +#### Send conditions + +This decides whether to send the email based on two options + +1. *All* conditions are true (Every single custom rule must be met in order to send the email) +2. *Any* conditions are true (At least one of the custom rules must be met in order to send the email) + +#### Adding a custom rule + +* Click 'Add' to add a custom sending rule. +* Select the field which you want the custom rule to apply to +* Select the condition the field must follow +* enter for the condition (the 'is blank' and 'is not blank' conditions do not require any text) + + diff --git a/tests/UserDefinedFormTest.php b/tests/UserDefinedFormTest.php index 1856cd9..082f681 100644 --- a/tests/UserDefinedFormTest.php +++ b/tests/UserDefinedFormTest.php @@ -13,8 +13,8 @@ class UserDefinedFormTest extends FunctionalTest { $this->markTestSkipped( 'UserDefinedForm::rollback() has not been implemented completely' ); - - // @todo + + // @todo $this->logInWithPermission('ADMIN'); $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); @@ -22,7 +22,7 @@ class UserDefinedFormTest extends FunctionalTest { $form->write(); $form->doPublish(); $origVersion = $form->Version; - + $form->SubmitButtonText = 'Updated Button Text'; $form->write(); $form->doPublish(); @@ -32,15 +32,15 @@ class UserDefinedFormTest extends FunctionalTest { $this->assertEquals($updated->SubmitButtonText, 'Updated Button Text'); $form->doRollbackTo($origVersion); - + $orignal = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID"); $this->assertEquals($orignal->SubmitButtonText, 'Button Text'); } - + function testGetCMSFields() { $this->logInWithPermission('ADMIN'); $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); - + $fields = $form->getCMSFields(); $this->assertTrue($fields->dataFieldByName('Fields') !== null); @@ -51,37 +51,37 @@ class UserDefinedFormTest extends FunctionalTest { function testEmailRecipientPopup() { $this->logInWithPermission('ADMIN'); - + $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); - + $popup = new UserDefinedForm_EmailRecipient(); - + $popup->FormID = $form->ID; + $fields = $popup->getCMSFields(); - + $this->assertTrue($fields->dataFieldByName('EmailSubject') !== null); $this->assertTrue($fields->dataFieldByName('EmailFrom') !== null); $this->assertTrue($fields->dataFieldByName('EmailAddress') !== null); $this->assertTrue($fields->dataFieldByName('HideFormData') !== null); $this->assertTrue($fields->dataFieldByName('SendPlain') !== null); $this->assertTrue($fields->dataFieldByName('EmailBody') !== null); - + // add an email field, it should now add a or from X address picker $email = $this->objFromFixture('EditableEmailField','email-field'); $form->Fields()->add($email); - $popup->FormID = $form->ID; $popup->write(); $fields = $popup->getCMSFields(); - $this->assertThat($fields->fieldByName('SendEmailToFieldID'), $this->isInstanceOf('DropdownField')); - + $this->assertThat($fields->dataFieldByName('SendEmailToFieldID'), $this->isInstanceOf('DropdownField')); + // if the front end has checkboxs or dropdown they can select from that can also be used to send things $dropdown = $this->objFromFixture('EditableDropdown', 'department-dropdown'); $form->Fields()->add($dropdown); - + $fields = $popup->getCMSFields(); $this->assertTrue($fields->dataFieldByName('SendEmailToFieldID') !== null); - + $popup->delete(); } @@ -138,95 +138,95 @@ class UserDefinedFormTest extends FunctionalTest { $this->assertTrue($recipient->canEdit()); $this->assertTrue($recipient->canDelete()); } - + $member = Member::currentUser(); $member->logOut(); - + $this->logInWithPermission('SITETREE_VIEW_ALL'); foreach($form->EmailRecipients() as $recipient) { $this->assertFalse($recipient->canEdit()); $this->assertFalse($recipient->canDelete()); } } - + function testPublishing() { $this->logInWithPermission('ADMIN'); - + $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); $form->write(); - + $form->doPublish(); - + $live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID"); - + $this->assertNotNull($live); $this->assertEquals($live->Fields()->Count(), 1); - + $dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown'); $form->Fields()->add($dropdown); - + $stage = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID"); $this->assertEquals($stage->Fields()->Count(), 2); - + // should not have published the dropdown $liveDropdown = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $dropdown->ID"); $this->assertNull($liveDropdown); - + // when publishing it should have added it $form->doPublish(); - + $live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID"); $this->assertEquals($live->Fields()->Count(), 2); - - // edit the title + + // edit the title $text = $form->Fields()->First(); - + $text->Title = 'Edited title'; $text->write(); - + $liveText = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $text->ID"); $this->assertFalse($liveText->Title == $text->Title); - + $form->doPublish(); - + $liveText = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $text->ID"); $this->assertTrue($liveText->Title == $text->Title); } - + function testUnpublishing() { $this->logInWithPermission('ADMIN'); $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); $form->write(); - + $form->doPublish(); // assert that it exists and has a field $live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID"); - + $this->assertTrue(isset($live)); $this->assertEquals(DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value(), 1); - + // unpublish $form->doUnpublish(); - + $this->assertNull(Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID")); - $this->assertEquals(DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value(), 0); - + $this->assertEquals(DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value(), 0); + } - + function testDoRevertToLive() { $this->logInWithPermission('ADMIN'); $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); $field = $form->Fields()->First(); - + $field->Title = 'Title'; $field->write(); - + $form->doPublish(); - + $field->Title = 'Edited title'; $field->write(); - + // check that the published version is not updated $live = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $field->ID"); $this->assertEquals('Title', $live->Title); @@ -234,21 +234,21 @@ class UserDefinedFormTest extends FunctionalTest { // revert back to the live data $form->doRevertToLive(); $form->flushCache(); - + $check = Versioned::get_one_by_stage("EditableFormField", "Stage", "\"EditableFormField\".\"ID\" = $field->ID"); - + $this->assertEquals('Title', $check->Title); } - + function testDuplicatingForm() { $this->logInWithPermission('ADMIN'); $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); - + $duplicate = $form->duplicate(); - + $this->assertEquals($form->Fields()->Count(), $duplicate->Fields()->Count()); $this->assertEquals($form->EmailRecipients()->Count(), $form->EmailRecipients()->Count()); - + // can't compare object since the dates/ids change $this->assertEquals($form->Fields()->First()->Title, $duplicate->Fields()->First()->Title); } @@ -256,7 +256,7 @@ class UserDefinedFormTest extends FunctionalTest { function testFormOptions() { $this->logInWithPermission('ADMIN'); $form = $this->objFromFixture('UserDefinedForm', 'basic-form-page'); - + $fields = $form->getFormOptions(); $submit = $fields->fieldByName('SubmitButtonText'); $reset = $fields->fieldByName('ShowClearButton'); @@ -264,4 +264,97 @@ class UserDefinedFormTest extends FunctionalTest { $this->assertEquals($submit->Title(), 'Text on submit button:'); $this->assertEquals($reset->Title(), 'Show Clear Form Button'); } + + public function testEmailRecipientFilters() { + $form = $this->objFromFixture('UserDefinedForm', 'filtered-form-page'); + + // Check unfiltered recipients + $result0 = $form + ->EmailRecipients() + ->sort('EmailAddress') + ->column('EmailAddress'); + $this->assertEquals( + array( + 'filtered1@example.com', + 'filtered2@example.com', + 'unfiltered@example.com' + ), + $result0 + ); + + // check filters based on given data + $result1 = $form->FilteredEmailRecipients( + array( + 'your-name' => 'Value', + 'address' => '', + 'street' => 'Anything', + 'city' => 'Matches Not Equals', + 'colours' => array('Red') // matches 2 + ), null + ) + ->sort('EmailAddress') + ->column('EmailAddress'); + $this->assertEquals( + array( + 'filtered2@example.com', + 'unfiltered@example.com' + ), + $result1 + ); + + // Check all positive matches + $result2 = $form->FilteredEmailRecipients( + array( + 'your-name' => '', + 'address' => 'Anything', + 'street' => 'Matches Equals', + 'city' => 'Anything', + 'colours' => array('Red', 'Blue') // matches 2 + ), null + ) + ->sort('EmailAddress') + ->column('EmailAddress'); + $this->assertEquals( + array( + 'filtered1@example.com', + 'filtered2@example.com', + 'unfiltered@example.com' + ), + $result2 + ); + + + $result3 = $form->FilteredEmailRecipients( + array( + 'your-name' => 'Should be blank but is not', + 'address' => 'Anything', + 'street' => 'Matches Equals', + 'city' => 'Anything', + 'colours' => array('Blue') + ), null + )->column('EmailAddress'); + $this->assertEquals( + array( + 'unfiltered@example.com' + ), + $result3 + ); + + + $result4 = $form->FilteredEmailRecipients( + array( + 'your-name' => '', + 'address' => 'Anything', + 'street' => 'Wrong value for this field', + 'city' => '', + 'colours' => array('Blue', 'Green') + ), null + )->column('EmailAddress'); + $this->assertEquals( + array( + 'unfiltered@example.com' + ), + $result4 + ); + } } \ No newline at end of file diff --git a/tests/UserDefinedFormTest.yml b/tests/UserDefinedFormTest.yml index 7b95324..ef657e0 100644 --- a/tests/UserDefinedFormTest.yml +++ b/tests/UserDefinedFormTest.yml @@ -1,127 +1,212 @@ EditableOption: - option-1: - Name: Option1 - Title: Option 1 - - option-2: - Name: Option2 - Title: Option 2 + option-1: + Name: Option1 + Title: Option 1 + + option-2: + Name: Option2 + Title: Option 2 - department-1: - Name: dept1 - Title: sales@example.com + department-1: + Name: dept1 + Title: sales@example.com - department-2: - Name: dept2 - Title: accounts@example.com + department-2: + Name: dept2 + Title: accounts@example.com - option-3: - Name: Option3 - Title: Option 3 + option-3: + Name: Option3 + Title: Option 3 - option-4: - Name: Option4 - Title: Option 4 + option-4: + Name: Option4 + Title: Option 4 - option-5: - Name: Option5 - Title: Option 5 + option-5: + Name: Option5 + Title: Option 5 - option-6: - Name: Option6 - Title: Option 6 - -UserDefinedForm_EmailRecipient: - recipient-1: - EmailAddress: test@example.com - EmailSubject: Email Subject - EmailFrom: no-reply@example.com - - no-html: - EmailAddress: nohtml@example.com - EmailSubject: Email Subject - EmailFrom: no-reply@example.com - SendPlain: true - - no-data: - EmailAddress: nodata@example.com - EmailSubject: Email Subject - EmailFrom: no-reply@example.com - HideFormData: true - + option-6: + Name: Option6 + Title: Option 6 + + option-7: + Name: Option7 + Title: Red + + option-8: + Name: Option8 + Title: Blue + + option-9: + Name: Option9 + Title: Green + EditableTextField: - basic-text: - Name: basic-text-name - Title: Basic Text Field + basic-text: + Name: basic-text-name + Title: Basic Text Field - basic-text-2: - Name: basic-text-name - Title: Basic Text Field - - required-text: - Name: required-text-field - Title: Required Text Field - CustomErrorMessage: Custom Error Message - Required: true - + basic-text-2: + Name: basic-text-name + Title: Basic Text Field + + your-name-field: + Name: your-name + Title: Name + + address-field: + Name: address + Title: Address + + street-field: + Name: street + Title: Street + + city-field: + Name: city + Title: City + + required-text: + Name: required-text-field + Title: Required Text Field + CustomErrorMessage: Custom Error Message + Required: true + EditableDropdown: - basic-dropdown: - Name: basic-dropdown - Title: Basic Dropdown Field - Options: =>EditableOption.option-1, =>EditableOption.option-2 - - department-dropdown: - Name: department - Title: Department - Options: =>EditableOption.department-1, =>EditableOption.department-2 - + basic-dropdown: + Name: basic-dropdown + Title: Basic Dropdown Field + Options: =>EditableOption.option-1, =>EditableOption.option-2 + + department-dropdown: + Name: department + Title: Department + Options: =>EditableOption.department-1, =>EditableOption.department-2 + EditableCheckbox: - checkbox-1: - Name: checkbox-1 - Title: Checkbox 1 - - checkbox-2: - Name: checkbox-1 - Title: Checkbox 1 - + checkbox-1: + Name: checkbox-1 + Title: Checkbox 1 + + checkbox-2: + Name: checkbox-1 + Title: Checkbox 1 + EditableCheckboxGroupField: - checkbox-group: - Name: check-box-group - Title: Check box group - Options: =>EditableOption.option-3, =>EditableOption.option-4 - + checkbox-group: + Name: check-box-group + Title: Check box group + Options: =>EditableOption.option-3, =>EditableOption.option-4 + + colour-checkbox-group: + Name: colours + Title: 'Select Colours' + Options: =>EditableOption.option-7, =>EditableOption.option-8, =>EditableOption.option-9 + EditableEmailField: - email-field: - Name: email-field - Title: Email - + email-field: + Name: email-field + Title: Email EditableRadioField: - radio-field: - Name: radio-option - Title: Radio Option - Options: =>EditableOption.option-5, =>EditableOption.option-6 + radio-field: + Name: radio-option + Title: Radio Option + Options: =>EditableOption.option-5, =>EditableOption.option-6 +UserDefinedForm_EmailRecipientCondition: +# filtered recipient 1 + blank-rule: + ConditionOption: IsBlank + ConditionField: =>EditableTextField.your-name-field + + not-blank-rule: + ConditionOption: IsNotBlank + ConditionField: =>EditableTextField.address-field + + equals-rule: + ConditionOption: Equals + ConditionField: =>EditableTextField.street-field + ConditionValue: 'Matches Equals' + + not-equals-rule: + ConditionOption: NotEquals + ConditionField: =>EditableTextField.city-field + ConditionValue: 'Matches Not Equals' + +# filtered recipient 2 + group-equals-rule: + ConditionOption: Equals + ConditionField: =>EditableCheckboxGroupField.colour-checkbox-group + ConditionValue: Red + + group-not-equals-rule: + ConditionOption: NotEquals + ConditionField: =>EditableCheckboxGroupField.colour-checkbox-group + ConditionValue: Blue + + +UserDefinedForm_EmailRecipient: + recipient-1: + EmailAddress: test@example.com + EmailSubject: Email Subject + EmailFrom: no-reply@example.com + + no-html: + EmailAddress: nohtml@example.com + EmailSubject: Email Subject + EmailFrom: no-reply@example.com + SendPlain: true + + no-data: + EmailAddress: nodata@example.com + EmailSubject: Email Subject + EmailFrom: no-reply@example.com + HideFormData: true + + unfiltered-recipient-1: + EmailAddress: unfiltered@example.com + EmailSubject: Email Subject + EmailFrom: no-reply@example.com + + filtered-recipient-1: + EmailAddress: filtered1@example.com + EmailSubject: Email Subject + EmailFrom: no-reply@example.com + CustomRules: =>UserDefinedForm_EmailRecipientCondition.blank-rule, =>UserDefinedForm_EmailRecipientCondition.not-blank-rule, =>UserDefinedForm_EmailRecipientCondition.equals-rule, =>UserDefinedForm_EmailRecipientCondition.not-equals-rule + CustomRulesCondition: 'And' + + filtered-recipient-2: + EmailAddress: filtered2@example.com + EmailSubject: Email Subject + EmailFrom: no-reply@example.com + CustomRules: =>UserDefinedForm_EmailRecipientCondition.group-equals-rule, =>UserDefinedForm_EmailRecipientCondition.group-not-equals-rule + CustomRulesCondition: 'Or' UserDefinedForm: - basic-form-page: - Title: User Defined Form - Fields: =>EditableTextField.basic-text - EmailRecipients: =>UserDefinedForm_EmailRecipient.recipient-1, =>UserDefinedForm_EmailRecipient.no-html, =>UserDefinedForm_EmailRecipient.no-data - - form-with-reset-and-custom-action: - Title: Form with Reset Action - SubmitButtonText: Custom Button - ShowClearButton: true - - validation-form: - Title: Validation Form - Fields: =>EditableTextField.required-text - - custom-rules-form: - Title: Custom Rules Form - Fields: =>EditableCheckbox.checkbox-2, =>EditableTextField.basic-text-2 - empty-form: - Title: Empty Form - - + basic-form-page: + Title: User Defined Form + Fields: =>EditableTextField.basic-text + EmailRecipients: =>UserDefinedForm_EmailRecipient.recipient-1, =>UserDefinedForm_EmailRecipient.no-html, =>UserDefinedForm_EmailRecipient.no-data + + form-with-reset-and-custom-action: + Title: Form with Reset Action + SubmitButtonText: Custom Button + ShowClearButton: true + + validation-form: + Title: Validation Form + Fields: =>EditableTextField.required-text + + custom-rules-form: + Title: Custom Rules Form + Fields: =>EditableCheckbox.checkbox-2, =>EditableTextField.basic-text-2 + empty-form: + Title: Empty Form + + filtered-form-page: + Title: 'Page with filtered recipients' + Fields: =>EditableCheckboxGroupField.checkbox-group, =>EditableTextField.your-name-field, =>EditableTextField.street-field, =>EditableTextField.city-field + EmailRecipients: =>UserDefinedForm_EmailRecipient.unfiltered-recipient-1, =>UserDefinedForm_EmailRecipient.filtered-recipient-1, =>UserDefinedForm_EmailRecipient.filtered-recipient-2