cant create inline records if ctrl > enablecolumns > endtime is not specified in childrens TCA
In 7.6.22 i can't create new inline child records, if the child TCA does not specify
ctrl >enablecolumns > endtime.
When trying to create a new inline record, the BE shows an "Error 500 Internal Server Error" notification and sys_log logs an "Uncaught TYPO3 Exception":
Core: Exception handler (WEB): Uncaught TYPO3 Exception: Unsupported operand types | Error thrown in file /Users/tobias/ownCloud/Projekte/etobi/devdev7/vendor/typo3/cms/typo3/sysext/backend/Classes/Utility/BackendUtility.php in line 1555. Requested URL: http://devdev7.dev/typo3/index.php?ajaxID=%%2Fajax%%2Frecord%%2Finline%%2Fcreate&ajaxToken=d3804bcc88a0d5127fbc06f7bf2bb7e7e48b5d9a
Setup/Steps to reproduce:¶
- TYPO3 7.6.22
- two tables (parent record and child record)
- the parent record have an inline relation to the child records
- both recors are NOT localizable (thus NO TCA
ctrl > languageFieldspecified)
- the child record DOES NOT specify
enablecolumns > endtime
- create a new parent record
- create a new inline child record
- the Ajax call will throw an "Uncaught TYPO3 Exception: Unsupported operand types"
In \TYPO3\CMS\Backend\Controller\FormInlineAjaxController L138-L140:
$GLOBALS['TCA'][$child['table']]['ctrl']['languageField']; are empty, an array like
[0 => ''] will be added to
$childData['databaseRow'] with an empty index key.
$childData['databaseRow'] will be passed to \TYPO3\CMS\Backend\Utility\BackendUtility::getRecordIconAltText.
At the end of
getRecordIconAltText L2025 the records
endtime is read. As
enablecolumns > endtime is not specified,
$ctrl['endtime'] will be empty and
$row[$ctrl['endtime']] will return the
[0 => ''] array added in FormInlineAjaxController L140.
[0 => ''] array) will be passed to \TYPO3\CMS\Backend\Utility\BackendUtility::daysUntil.
$delta_t = $tstamp - $GLOBALS['EXEC_TIME']; throws the "Unsupported operand types" as you can't subtract an int from an array.
This bug does not happen for starttime, as
$ctrl['starttime'] as this is checked in \TYPO3\CMS\Backend\Utility\BackendUtility L2020
- check if
['ctrl']['languageField'](both for parent and child) are not empty in \TYPO3\CMS\Backend\Controller\FormInlineAjaxController L136
- check if
$ctrl['endtime']is not empty in \TYPO3\CMS\Backend\Utility\BackendUtility L2025
Updated by Tobias Liebig about 3 years ago
umm.. i took a moment to think about it.
while the described issue itself does not occure in 8.* and master (because it's a combination of two missing checks) it totally makes sense to apply the part in "BackendUtility.php" to master and 8.7, too.
I'll take care of that.
Should I separate the part in "BackendUtility" (which then applies to 7.6, 8.7 and master) and "FormInlineAjaxController" (which only applies to 7.6) and push two separate changes?
Or could that all be handled in one review/changeset?