diff --git a/.upgrade.yml b/.upgrade.yml index 7ae535e..1f5fd04 100644 --- a/.upgrade.yml +++ b/.upgrade.yml @@ -55,3 +55,9 @@ mappings: EditableLiteralFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormField\EditableLiteralFieldTest SecureEditableFileFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormField\SecureEditableFileFieldTest UserDefinedForm_EmailRecipientConditionTest: SilverStripe\UserForms\Tests\Model\Recipient\EmailRecipientConditionTest + +warnings: + methods: + 'SilverStripe\UserForms\Model\EditableFormField->EffectiveDisplayRules()': + message: 'EffectiveDisplayRules deprecated because of new support for conditional required field' + url: 'https://github.com/silverstripe/silverstripe-userforms/pull/770/' diff --git a/code/Model/EditableFormField.php b/code/Model/EditableFormField.php index 2ec4f8f..b85c67d 100755 --- a/code/Model/EditableFormField.php +++ b/code/Model/EditableFormField.php @@ -926,6 +926,20 @@ class EditableFormField extends DataObject ->setRecord($this); } + /** + * Determine effective display rules for this field. + * + * @return SS_List + * @deprecated 5.6 No longer needed because of support for conditional required field. + */ + public function EffectiveDisplayRules() + { + if ($this->Required) { + return ArrayList::create(); + } + return $this->DisplayRules(); + } + /** * Extracts info from DisplayRules into array so UserDefinedForm->buildWatchJS can run through it. * @return array|null diff --git a/tests/Model/EditableFormFieldTest.php b/tests/Model/EditableFormFieldTest.php index 80de25b..227c8e8 100644 --- a/tests/Model/EditableFormFieldTest.php +++ b/tests/Model/EditableFormFieldTest.php @@ -73,12 +73,19 @@ class EditableFormFieldTest extends FunctionalTest // it has 1 rule - when ticked the checkbox hides the text field $this->assertEquals(1, $rules->Count()); + // EffectiveDisplayRules rule has been deprecated + $this->assertEquals($rules, $checkbox->EffectiveDisplayRules()); + $checkboxRule = $rules->First(); $checkboxRule->ConditionFieldID = $field->ID; $this->assertEquals($checkboxRule->Display, 'Hide'); $this->assertEquals($checkboxRule->ConditionOption, 'HasValue'); $this->assertEquals($checkboxRule->FieldValue, '6'); + + // If field is required then all custom rules are disabled + $checkbox->Required = true; + $this->assertEquals(0, $checkbox->EffectiveDisplayRules()->count()); } public function testEditableOptionEmptyValue() @@ -285,5 +292,4 @@ class EditableFormFieldTest extends FunctionalTest $field = $this->objFromFixture(EditableTextField::class, $fieldName); $this->assertEquals($expected, $field->isDisplayed($data)); } - }