when entry type changes, reset element container fields & content #16076
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
When switching an entry type for an Entry, ensure that if the old and new fields have the same handle, they also have compatible field types. If not, remove that handle from the memoized
_fieldsByHandle
array and un-normalize that field’s value. The same should happen if both the old and new fields implementElementContainerFieldInterface
and the two fields are not the exact same field.Test case 1:
entryType1
has a matrix field with a handle ofpageContent
;entryType2
has a different matrix field with an overwritten field handle set topageContent
;entryType2
, leading you to believe that it would be saved when you save your changes. If you reloaded the page or saved the entry, the content was gone.Test case 2:
entryType1
has a matrix field with a handlepageContent
;entryType2
has a plain text field with a handlepageContent
;entryType2
was getting a value ofcraft\elements\db\ElementQuery
.Test case 3:
entryType1
has a plain text field with a handlepageContent
;entryType2
has a matrix field with a handlepageContent
;entryType2
an error was thrownCall to a member function all() on string
.Related issues
#16056