I figured out somekind of real big and ugly bug.
When using IRRE in an extension like powermail, the child fields won't get created in the workspace mode.
I thinks that since Workspace is part of the core now, this kind of has got its place here.
Here how to reproduce:
Install powermail (don't event need to configure highly)
- Create a content element of type powermail
- Create a fieldset
- Create a field in this fieldset
- Set a recipient (since it's somekind of needed in some versions)
Now go to workspace mode. Copy the element and paste it. You can be a adminstrator or normal TYPO3 user, this doesn't matter. When you open the newly copied element, you'll see, that the element has no fieldset nor fields and they aren't in the database though.
What I firgured out:
- The content get's processed properly
- The fields of the child elements get processed, event the child elements of the content child element
- for some reason, there is nothing written to the child tables.
I tested this with the latest trunk version of class.t3lib_tcemain.php of TYPO3 4.5.3
I'll continue watching out for a solution, but since I didn't find yet the point where it get's problematic, I'm not very confident...
Thanks for your support.
Updated by Oliver Hader almost 9 years ago
In general there are some issues that need to be tackled (all on workspaces)
localization of IRRE parent records and related children¶
Localization works like copying internally and thus at the end gets back to the copy logic.
discarding elements on workspaces¶
That's the most funny thing that, since discarding/deleting element is basically the same as creating a copy, but with accordant data to set deleted flags (the delete placeholder).
All actions that are related to that need to use versionizeRecord() for dependent children.
copying IRRE parent records and related children¶
The copy logic tries to determine whether a "copy action" is a localization or a real copy of an accordant parent.
If on workspaces, currently versionizeRecord() is used which just creates a new version, but without using a placeholder - thus, there is no indication that it's a plain new record and not related to to any existing record. This means, that versionizeRecord() only shall be used if this was the initial command (the indication is done by using the $workspaceOptions) array.
resolving concrete version record instead of placeholder record¶
In case the parent record was copied on a workspace, then this results in a new-placeholder which is overlaid by the concrete version in the workspace.
In any kind all children need to point to the concrete version instead of the placeholder record.