Bug #89078
Upgrade wizard: The migration of flexform sheets fails
0%
Description
Hello,
in MigrateFlexformSheetIdentifierUpdate.php the tab elements will get a new variable name.
It will not respect given names and/or the flexform xml in tt_content will be untouched. Therfore the elements have different tab variable names in comparison to the tt_content xml.
It crashed a lot of our dce's in the backend. The elements did not show entered data.
Upgraded from 2.0.6 to 2.2.1.
Typo3 8.7.27 / 9.5.9
PHP 7.2
Kind regards
Robert
Related issues
History
#1
Updated by Robert Wolle 3 months ago
- Subject changed from Upgrade wizard: The update of flexform sheets fails to Upgrade wizard: The migration of flexform sheets fails
#2
Updated by Armin Vieweg 3 months ago
- Status changed from New to Needs Feedback
- Assignee set to Robert Wolle
Hi Robert,
it is curious that this upgrade has been executed from 2.0.6 to 2.2.1.
The Flexform structure should already to migrated at this point.
However, the migration wizard should also update the tt_content records. If this does not happen, it's a bug.
Do you have an example of pi_flexform before upgrading for me?
#3
Updated by Robert Wolle 3 months ago
The upgrade wizard says:
There are 14 tab fields without identifier and 0 content elements with old xml structure existing.
Caution! Please make sure that you've migrated the mm-relation of dce fields to 1:n before executing this update wizard.
Example xml stored in pi_flexform field (tt_content table):
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3FlexForms> <data> <sheet index="sheet.tabGeneral"> <language index="lDEF"> <field index="settings.sliderelements"> <el index="el"> <field index="5bbc9147eb1d7807855560"> <value index="container_sliderelements"> <el> <field index="image"> <value index="vDEF">25184</value> </field> <field index="subheadline"> <value index="vDEF"></value> </field> <field index="headline"> <value index="vDEF">Verband Sächsischer Rechtspfleger</value> </field> <field index="link"> <value index="vDEF">t3://page?uid=3701</value> </field> <field index="pdfAttribut"> <value index="vDEF">0</value> </field> <field index="linkExt"> <value index="vDEF">0</value> </field> <field index="linkButtonLabel"> <value index="vDEF"></value> </field> <field index="text"> <value index="vDEF"></value> </field> </el> </value> <value index="_TOGGLE">0</value> </field> <field index="5bbc91a43c36f318203396"> <value index="container_sliderelements"> <el> <field index="image"> <value index="vDEF">25185</value> </field> <field index="subheadline"> <value index="vDEF"></value> </field> <field index="headline"> <value index="vDEF">Verband Sächsischer Rechtspfleger</value> </field> <field index="link"> <value index="vDEF">/BDR/www.bdr-vsr.de/Mainmenü/Der VSR/[3701]</value> </field> <field index="pdfAttribut"> <value index="vDEF">0</value> </field> <field index="linkExt"> <value index="vDEF">0</value> </field> <field index="linkButtonLabel"> <value index="vDEF"></value> </field> <field index="text"> <value index="vDEF"></value> </field> </el> </value> <value index="_TOGGLE">0</value> </field> <field index="5bbc91b5e7aa0096348147"> <value index="container_sliderelements"> <el> <field index="image"> <value index="vDEF">25186</value> </field> <field index="subheadline"> <value index="vDEF"></value> </field> <field index="headline"> <value index="vDEF">Verband Sächsischer Rechtspfleger</value> </field> <field index="link"> <value index="vDEF">t3://page?uid=3701</value> </field> <field index="pdfAttribut"> <value index="vDEF">0</value> </field> <field index="linkExt"> <value index="vDEF">0</value> </field> <field index="linkButtonLabel"> <value index="vDEF"></value> </field> <field index="text"> <value index="vDEF"></value> </field> </el> </value> <value index="_TOGGLE">0</value> </field> </el> </field> </language> </sheet> <sheet index="sheet.settingsTab"> <language index="lDEF"> <field index="settings.slidertype"> <value index="vDEF">0</value> </field> <field index="settings.effect"> <value index="vDEF">0</value> </field> <field index="settings.conversion"> <value index="vDEF">1</value> </field> <field index="settings.random"> <value index="vDEF">0</value> </field> <field index="settings.changetime"> <value index="vDEF">5</value> </field> <field index="settings.animationtime"> <value index="vDEF">1000</value> </field> <field index="settings.topHeadline"> <value index="vDEF"></value> </field> </language> </sheet> <sheet index="sheet.defaultSettingsTab"> <language index="lDEF"> <field index="settings.autoplay"> <value index="vDEF">1</value> </field> <field index="settings.infite"> <value index="vDEF">1</value> </field> <field index="settings.arrows"> <value index="vDEF">0</value> </field> <field index="settings.paging"> <value index="vDEF">0</value> </field> <field index="settings.slidesToShow"> <value index="vDEF">1</value> </field> <field index="settings.slidesToScroll"> <value index="vDEF">1</value> </field> </language> </sheet> </data> </T3FlexForms>
After executing the wizard, the the sheets will get updated:
i.e. The tab title is "Bilder" and the identifier in the dce field becomes tabBilder, instead of keeping the original title like "tabGeneral", how it's saved in pi_flexform field.
Greetings
Robert
#4
Updated by Armin Vieweg 3 months ago
This is weird. Your content elements already have got the correct sheet identifiers.
Could you please check in the tab fields inside of the DCEs, if the variables field is filled? Because they are empty, the wizard gets triggered. But if they would be empty, the Flexform would not look like this.
So probably the query to check fields with empty variables is broken. Could you confirm that the variables for tabs are not empty?
#5
Updated by Robert Wolle 3 months ago
- File dce-fields.jpg View added
The fields are filled. See screenshot.
I know, that this is the function to get all fields:
protected function getUpdatableDceFields() : array { $queryBuilder = DatabaseUtility::getConnectionPool()->getQueryBuilderForTable('tx_dce_domain_model_dcefield'); return $queryBuilder ->select('*') ->from('tx_dce_domain_model_dcefield') ->where( $queryBuilder->expr()->eq( 'type', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT) ), $queryBuilder->expr()->eq( 'variable', $queryBuilder->createNamedParameter('', \PDO::PARAM_INT) ) ) ->orderBy('sorting', 'ASC') ->execute() ->fetchAll(); }
I think, that it's the second where clause, which does not match correctly:
$queryBuilder->expr()->eq( 'variable', $queryBuilder->createNamedParameter('', \PDO::PARAM_INT) )
(It might be, that it has something to do with the doctrine DBAL in the core.)
We do use 5.5.60-MariaDB - MariaDB Server.
#6
Updated by Armin Vieweg 3 months ago
- Status changed from Needs Feedback to Accepted
Thanks for all the input!
I'm able to reproduce the issue. I just had no DCE's with tabs in my test environment ;-)
Also I've found a typo in variable names, when updating old tt_content elements.
#7
Updated by Armin Vieweg 3 months ago
- Status changed from Accepted to Resolved
- Assignee deleted (
Robert Wolle) - Priority changed from Should have to Must have
I've fixed this issue in this commit, which will be part of DCE 2.2.2.
#8
Updated by Armin Vieweg 3 months ago
- Precedes Task #89101: Upgrade Wizard API changed in TYPO3 9 added
#9
Updated by Franz Holzinger 6 days ago
- Related to Bug #89818: flexform sheets are not modified during upgrade added