Story #69712: Further FormEngine development
Flex: Better encapsulation
getFlexIdentifier() of TcaFlex.php calculates the "pointer" that determines which defined data structure should be chosen.
The implementation is only sparse, documented stuff ( https://docs.typo3.org/typo3cms/TCAReference/Reference/Columns/Flex/Index.html ) like ds_pointerfield_searchparent is not handled.
getFlexFormDS() currently does two things: The pointer calculation and then fetching and parsing the structure. This should be split and unit tested put to FlexFormTools of ext:core (the only non-static class we have that handles flex form related stuff). Unsure about the error handling that is also happening - maybe better throw exceptions. Also the hint from resolvePossibleExternalFile() of TcaFlex should be taken into account and merged to the parser method.
There is a second (similar) method in BackendUtility::getRegisteredFlexForms that has a slightly different scope, though. The second one is used by the SelectItem data provider of flex forms, iirc.
In the end, the following methods should be deprecated and substituted by unit tested code within FlexFormTools that is split into sane capsules:
It might be required to split this issue here into multiple smaller issues.
[!!!][TASK] Improve flex and TCA handling in FormEngine
The patch adapts a series of nasty form engine areas to more solid
code. The evaluate condition code is rewritten and works much better
in flex form scenarios. The suggest wizard and svg tree are much
more solid in flex forms. The group element is rewritten
towards a better readable and easier to refactor code, dropping
method dbFileIcons(). A bunch of issues is resolved along the way.
- TCA "default" now works in flex form section container elements
- The "displayCond" parser is now strict and throws exceptions on
invalid syntax and wrong referenced fields to help debugging
faulty display conditions
- TCA displayCond on flex fields can now be prefixed with the
sheet name and can reference field values from neighbor sheets
- TCA displayCond now works with flex section containers
- TCA flex section container now throw an exception if select or
group fields configure a MM relation - this is not supported
- TCA ctrl requestUpdate field is dropped, onChange=reload is now allowed
not only on flex form fields, but also on normal columns fields
- TCA tree now works as section container element and initializes
correctly on new records and new containers
- GroupElement rewrite to drop dbFileIcons()
- config option maxitems now optional for type=group and type=select
and defaults to "many items allowed"
- inline now works in "fancy" flex situations with "new" records
by handing the final dataStructureIdentifier around
- FormEngine no longer loads extJS
Tested-by: TYPO3com <firstname.lastname@example.org>
Reviewed-by: Benni Mack <email@example.com>
Tested-by: Benni Mack <firstname.lastname@example.org>
Reviewed-by: Anja Leichsenring <email@example.com>
Tested-by: Anja Leichsenring <firstname.lastname@example.org>