diff --git a/code/Model/EditableFormField.php b/code/Model/EditableFormField.php index b85c67d..fd2f6d1 100755 --- a/code/Model/EditableFormField.php +++ b/code/Model/EditableFormField.php @@ -413,6 +413,11 @@ class EditableFormField extends DataObject { parent::onBeforeWrite(); + $formField = $this->getFormField(); + if ($formField && !$formField->hasData()) { + $this->Required = false; + } + // Set a field name. if (!$this->Name) { // New random name diff --git a/tests/Model/EditableFormFieldTest.php b/tests/Model/EditableFormFieldTest.php index a159384..3058c86 100644 --- a/tests/Model/EditableFormFieldTest.php +++ b/tests/Model/EditableFormFieldTest.php @@ -10,6 +10,7 @@ use SilverStripe\UserForms\Model\EditableFormField; use SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox; use SilverStripe\UserForms\Model\EditableFormField\EditableDropdown; use SilverStripe\UserForms\Model\EditableFormField\EditableFileField; +use SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField; use SilverStripe\UserForms\Model\EditableFormField\EditableOption; use SilverStripe\UserForms\Model\EditableFormField\EditableRadioField; use SilverStripe\UserForms\Model\EditableFormField\EditableTextField; @@ -292,4 +293,20 @@ class EditableFormFieldTest extends FunctionalTest $field = $this->objFromFixture(EditableTextField::class, $fieldName); $this->assertEquals($expected, $field->isDisplayed($data)); } + + public function testChangingDataFieldTypeToDatalessRemovesRequiredSetting() + { + $requiredTextField = $this->objFromFixture(EditableTextField::class, 'required-text'); + $fieldId = $requiredTextField->ID; + $this->assertTrue((bool)$requiredTextField->Required); + + $literalField = $requiredTextField->newClassInstance(EditableLiteralField::class); + $this->assertTrue((bool)$literalField->Required); + + $literalField->write(); + $this->assertFalse((bool)$literalField->Required); + + $updatedField = EditableFormField::get()->byId($fieldId); + $this->assertFalse((bool)$updatedField->Required); + } }