Bug #82330
closedcant create inline records if ctrl > enablecolumns > endtime is not specified in childrens TCA
100%
Description
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 > languageField
specified) - 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"
Analysis:¶
In \TYPO3\CMS\Backend\Controller\FormInlineAjaxController L138-L140:
As $GLOBALS['TCA'][$parent['table']]['ctrl']['languageField'];
and $GLOBALS['TCA'][$child['table']]['ctrl']['languageField'];
are empty, an array like [0 => '']
will be added to $childData['databaseRow']
with an empty index key.
Later $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.
$row[$ctrl['endtime']]
(the [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