Project

General

Profile

Bug #92483

Updated by Simon Schaufelberger about 2 years ago

The following-column-example will produce the error `Data Structure ERROR: No [\'ROOT\'][\'el\'] element found in flex form definition.';`. because the file is not resolved. 
 <pre> @ 
         'tx_timer_timer' => [ 
             'exclude' => true, 
             'label' => 'LLL:EXT:timer/Resources/Private/Language/locallang_db.xlf:tx_timer_general.field.tx_timer_timer', 
             'config' => [ 
                 'type' => 'flex', 
                 'ds_pointerField' => 'tx_timer_selector', 
                 'ds' => [ 
                     'default' => 'EXT:timer/Configuration/FlexForms/TimerDef/Default.xml', 
                     'porthDaily' => 'EXT:timer/Configuration/FlexForms/TimerDef/DailyTimer.xml', 
                     'porthYearly' => 'EXT:timer/Configuration/FlexForms/TimerDef/YearlyTimer.xml' 
                 ], 
             ], 
         ], 
 </pre> @ 

 In the comment of `parseDataStructureByIdentifier` in TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools is written: 

 <pre> 
 @ 
    * After the data structure definition is found, the method resolves: 
      * * FILE:EXT: prefix of the data structure itself - the ds is in a file 
      * * FILE:EXT: prefix for sheets - if single sheets are in files 
      * * EXT: prefix for sheets - if single sheets are in files (slightly different b/w compat syntax) 
      * * Create an sDEF sheet if the data structure has non, yet. 
 </pre> @ 
 But the method fulfill fullfill it not. 
 Extend in the middle methe middl of the method the code, to fix the problem.  

 <pre> 
              
 @ 

             // Resolve FILE: prefix pointing to a DS in a file 
             if (strpos(trim($dataStructure), 'FILE:') === 0) { 
                 $file = GeneralUtility::getFileAbsFileName(substr(trim($dataStructure), 5)); 
                 if (empty($file) || !@is_file($file)) { 
                     throw new \RuntimeException( 
                         'Data structure file ' . $file . ' could not be resolved to an existing file', 
                         1478105826 
                     ); 
                 } 
                 $dataStructure = file_get_contents($file); 
             // } beginn of additional code in Line 692 
             } else if (strpos(trim($dataStructure), 'EXT:') === 0) { 
                 $file = GeneralUtility::getFileAbsFileName(substr(trim($dataStructure), 0)); 
                 if (empty($file) || !@is_file($file)) { 
                     throw new \RuntimeException( 
                         'Data structure file ' . $file . ' could not be resolved to an existing file', 
                         1478105826 
                     ); 
                 } 
                 $dataStructure = file_get_contents($file); 
             } // End of additional code 
 </pre> @

Back