Skip to content

Commit

Permalink
Deprecate + stop referencing FieldTrait::$required
Browse files Browse the repository at this point in the history
Fixes #11574
  • Loading branch information
brandonkelly committed Jul 11, 2022
1 parent deab3ac commit 5502c59
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 2 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@

## Unreleased

### Added
- Added `craft\models\FieldLayout::getVisibleCustomFieldElements()`.

### Changed
- Relation fields now focus on the next related element’s “Remove” button when an element is removed. ([#11577](https://github.com/craftcms/cms/issues/11577))

### Deprecated
- Deprecated `craft\base\FieldTrait::$required`. `craft\fieldlayoutelements\BaseField::$required` should be used instead.

### Fixed
- Fixed a bug where assets’ native Alternative Text fields were getting mislabeled as translatable. ([#11576](https://github.com/craftcms/cms/issues/11576))
- Fixed a bug where fields nested within Neo fields could be incorrectly validated as required. ([#11574](https://github.com/craftcms/cms/issues/11574))

## 4.1.3 - 2022-07-07

Expand Down
6 changes: 4 additions & 2 deletions src/base/Element.php
Original file line number Diff line number Diff line change
Expand Up @@ -2239,12 +2239,14 @@ public function afterValidate(): void
$fieldLayout = $this->getFieldLayout()
) {
$scenario = $this->getScenario();
$layoutElements = $fieldLayout->getVisibleCustomFieldElements($this);

foreach ($fieldLayout->getVisibleCustomFields($this) as $field) {
foreach ($layoutElements as $layoutElement) {
$field = $layoutElement->getField();
$attribute = "field:$field->handle";
$isEmpty = fn() => $field->isValueEmpty($this->getFieldValue($field->handle), $this);

if ($scenario === self::SCENARIO_LIVE && $field->required) {
if ($scenario === self::SCENARIO_LIVE && $layoutElement->required) {
(new RequiredValidator(['isEmpty' => $isEmpty]))
->validateAttribute($this, $attribute);
}
Expand Down
1 change: 1 addition & 0 deletions src/base/FieldTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ trait FieldTrait

/**
* @var bool|null Whether the field is required in the field layout it was fetched from
* @deprecated in 4.1.4. [[\craft\fieldlayoutelements\BaseField::$required]] should be used instead
*/
public ?bool $required = null;

Expand Down
13 changes: 13 additions & 0 deletions src/models/FieldLayout.php
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,19 @@ public function getCustomFieldElements(): array
return $this->getElementsByType(CustomField::class);
}

/**
* Returns the visible layout elements representing custom fields, taking conditions into account.
*
* @param ElementInterface $element
* @return CustomField[]
* @since 4.1.4
*/
public function getVisibleCustomFieldElements(ElementInterface $element): array
{
$filter = fn(FieldLayoutElement $layoutElement) => $layoutElement instanceof CustomField;
return iterator_to_array($this->_elements($filter, $element));
}

/**
* Returns the custom fields included in the layout.
*
Expand Down

0 comments on commit 5502c59

Please sign in to comment.