Bug #82330

cant create inline records if ctrl > enablecolumns > endtime is not specified in childrens TCA

Added by Tobias Liebig about 3 years ago. Updated about 2 years ago.

Status:
Closed
Priority:
Should have
Assignee:
-
Category:
-
Target version:
Start date:
2017-09-07
Due date:
% Done:

100%

Estimated time:
TYPO3 Version:
7
PHP Version:
Tags:
Complexity:
easy
Is Regression:
Yes
Sprint Focus:

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

Solution:
  • 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

Related issues

Related to TYPO3 Core - Bug #48883: Wrong sys_language_uid in sys_file_referenceClosed2013-06-05

Actions
Related to TYPO3 Core - Bug #76048: IRRE: Child records - New record doesn't get language of parent (non localized records but using new button)ClosedJo Hasenau2016-05-04

Actions
Related to TYPO3 Core - Bug #73609: Creating IRRE child element without language of parent elementClosed2016-02-22

Actions
Has duplicate TYPO3 Core - Bug #82391: Inline records in TYPO3 v. 7.6.22 crash when NOT having sys_language_uid on childrenClosed2017-09-08

Actions
Has duplicate TYPO3 Core - Bug #82564: Error when adding inline record that has no endtime column configuredRejected2017-09-26

Actions
#2

Updated by Sven Juergens about 3 years ago

same problem here, thanks for explanation Tobias

#3

Updated by Tobias Liebig about 3 years ago

Does not occur in 7.6.21 and 8.7.6

#5

Updated by Gerrit Code Review about 3 years ago

  • Status changed from New to Under Review

Patch set 1 for branch TYPO3_7-6 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53944

#6

Updated by Gerrit Code Review about 3 years ago

Patch set 2 for branch TYPO3_7-6 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53944

#7

Updated by Tymoteusz Motylewski about 3 years ago

@Tobias - does it, or does it NOT occurs in 7.6 and 8.6 ?

#8

Updated by Gerrit Code Review about 3 years ago

Patch set 3 for branch TYPO3_7-6 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53944

#9

Updated by Tobias Liebig about 3 years ago

Tymoteusz Motylewski wrote:

@Tobias - does it, or does it NOT occurs in 7.6 and 8.6 ?

  • It DOES occur in 7.6.22 (a regression introduced with 7.6.22)
  • It DOES NOT occur in 7.6.21
  • It DOES NOT occur in 8.*
  • It DOES NOT occur in master
#10

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?

#11

Updated by Mathias Brodala about 3 years ago

  • Has duplicate Bug #82391: Inline records in TYPO3 v. 7.6.22 crash when NOT having sys_language_uid on children added
#12

Updated by Mathias Brodala about 3 years ago

  • Related to Bug #48883: Wrong sys_language_uid in sys_file_reference added
#13

Updated by Mathias Brodala about 3 years ago

  • Related to Bug #76048: IRRE: Child records - New record doesn't get language of parent (non localized records but using new button) added
#14

Updated by Mathias Brodala about 3 years ago

  • Related to Bug #73609: Creating IRRE child element without language of parent element added
#15

Updated by Gerrit Code Review about 3 years ago

Patch set 4 for branch TYPO3_7-6 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53944

#16

Updated by Oliver Hader about 3 years ago

  • Status changed from Under Review to Resolved
  • % Done changed from 0 to 100
#17

Updated by Stephan Großberndt about 3 years ago

  • Has duplicate Bug #82564: Error when adding inline record that has no endtime column configured added
#18

Updated by Benni Mack about 2 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF