diff --git a/code/Control/UserDefinedFormController.php b/code/Control/UserDefinedFormController.php index 7aade34..3f36dce 100644 --- a/code/Control/UserDefinedFormController.php +++ b/code/Control/UserDefinedFormController.php @@ -364,10 +364,10 @@ JS if ($submittedFormField && trim($submittedFormField->Value)) { $email->setSubject($submittedFormField->Value); } else { - $email->setSubject($recipient->EmailSubject); + $email->setSubject(SSViewer::execute_string($recipient->EmailSubject, $mergeFields)); } } else { - $email->setSubject($recipient->EmailSubject); + $email->setSubject(SSViewer::execute_string($recipient->EmailSubject, $mergeFields)); } $this->extend('updateEmail', $email, $recipient, $emailData); diff --git a/tests/Control/UserDefinedFormControllerTest.php b/tests/Control/UserDefinedFormControllerTest.php index 2a3fe00..434edce 100644 --- a/tests/Control/UserDefinedFormControllerTest.php +++ b/tests/Control/UserDefinedFormControllerTest.php @@ -11,6 +11,7 @@ use SilverStripe\Forms\FormAction; use SilverStripe\ORM\DataObject; use SilverStripe\UserForms\Control\UserDefinedFormController; use SilverStripe\UserForms\Model\EditableFormField\EditableTextField; +use SilverStripe\UserForms\Model\Recipient\EmailRecipient; use SilverStripe\UserForms\Model\Submission\SubmittedFormField; use SilverStripe\UserForms\Model\UserDefinedForm; use SilverStripe\View\ArrayData; @@ -51,10 +52,10 @@ class UserDefinedFormControllerTest extends FunctionalTest $response = $this->submitForm('UserForm_Form_' . $form->ID, null, [$field->Name => 'Basic Value']); // should have a submitted form field now - $submitted = DataObject::get(SubmittedFormField::class, "\"Name\" = 'basic-text-name'"); + $submitted = DataObject::get(SubmittedFormField::class, "\"Name\" = 'basic_text_name'"); $this->assertListAllMatch( [ - 'Name' => 'basic-text-name', + 'Name' => 'basic_text_name', 'Value' => 'Basic Value', 'Title' => 'Basic Text Field' ], @@ -332,4 +333,38 @@ class UserDefinedFormControllerTest extends FunctionalTest $this->assertEquals((string) $action[0]['value'], "Submit", "Submit button has default text"); } + + + public function testRecipientSubjectMergeFields() + { + $form = $this->setupFormFrontend(); + + $recipient = $this->objFromFixture(EmailRecipient::class, 'recipient-1'); + $recipient->EmailSubject = 'Email Subject: $basic_text_name'; + $recipient->write(); + + $this->autoFollowRedirection = false; + $this->clearEmails(); + + // load the form + $this->get($form->URLSegment); + + $field = $this->objFromFixture(EditableTextField::class, 'basic-text'); + + $response = $this->submitForm('UserForm_Form_' . $form->ID, null, [$field->Name => 'Basic Value']); + + // should have a submitted form field now + $submitted = DataObject::get(SubmittedFormField::class, "\"Name\" = 'basic_text_name'"); + $this->assertListAllMatch( + [ + 'Name' => 'basic_text_name', + 'Value' => 'Basic Value', + 'Title' => 'Basic Text Field' + ], + $submitted + ); + + // check emails + $this->assertEmailSent('test@example.com', 'no-reply@example.com', 'Email Subject: Basic Value'); + } } diff --git a/tests/Model/EditableFormFieldTest.yml b/tests/Model/EditableFormFieldTest.yml index f165d5a..b514964 100644 --- a/tests/Model/EditableFormFieldTest.yml +++ b/tests/Model/EditableFormFieldTest.yml @@ -1,10 +1,10 @@ SilverStripe\UserForms\Model\EditableFormField\EditableTextField: basic-text: - Name: basic-text-name + Name: basic_text_name Title: Basic Text Field basic-text-2: - Name: basic-text-name + Name: basic_text_name Title: Basic Text Field required-text: diff --git a/tests/UserFormsTest.yml b/tests/UserFormsTest.yml index dcb4f7b..9098845 100644 --- a/tests/UserFormsTest.yml +++ b/tests/UserFormsTest.yml @@ -63,11 +63,11 @@ SilverStripe\UserForms\Model\EditableFormField\EditableOption: SilverStripe\UserForms\Model\EditableFormField\EditableTextField: basic-text: - Name: basic-text-name + Name: basic_text_name Title: Basic Text Field basic-text-2: - Name: basic-text-name + Name: basic_text_name Title: Basic Text Field your-name-field: