Bug #89152

renderType='selectTree' generates warning with single value select

Added by Thomas Luzat about 2 years ago. Updated 7 months ago.

Status:
Needs Feedback
Priority:
Should have
Assignee:
-
Category:
Backend User Interface
Target version:
-
Start date:
2019-09-11
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
9
PHP Version:
7.3
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

When configuring a 'select' field like this:

'config' => [
'minitems' => 1,
'maxitems' => 1,
'type' => 'select',
'renderType' => 'selectTree',
'foreign_table' => 'foo',
'treeConfig' => [
'parentField' => 'parent',
],
],

... TYPO3 9.5.9 (and probably 8, possibly 10) generates a warning (which may be converted to an exception) when rendering the tree in the backend:

PHP Warning: implode(): Invalid arguments passed in /var/www/htdocs/web/typo3/sysext/backend/Classes/Form/Element/SelectTreeElement.php line 164

This was introduced earlier in 2019 with 18411d12528454d1b71574da5a86837bc11e189e: https://review.typo3.org/c/Packages/TYPO3.CMS/+/60415

Changing the line

$html[] = ' value="' . htmlspecialchars(implode(',', $parameterArray['itemFormElValue'])) . '"';

to

$html[] = ' value="' . htmlspecialchars(is_array($parameterArray['itemFormElValue']) ? implode(',', $parameterArray['itemFormElValue']) : $parameterArray['itemFormElValue']) . '"';

seems to reasonably fix the case here.


Files


Related issues

Related to TYPO3 Core - Bug #86954: Categories are lost, when saving before category tree is loaded completelyClosed2018-11-20

Actions
#1

Updated by Thomas Luzat about 2 years ago

  • Related to Bug #86954: Categories are lost, when saving before category tree is loaded completely added
#2

Updated by Georg Ringer over 1 year ago

  • Status changed from New to Needs Feedback

I tested that on current master (10.4) and can't reproduct that, itemFormElValue is always an array. can you recheck master as well if it is fixed.

I used

$GLOBALS['TCA']['pages']['columns']['categories']['config'] = [
    'minitems' => 1,
    'maxitems' => 1,
    'type' => 'select',
    'renderType' => 'selectTree',
    'foreign_table' => 'foo',
    'treeConfig' => [
        'parentField' => 'parent',
    ],
];
#3

Updated by Tim Karliczek about 1 year ago

In TYPO3 9.5.21 and 10.4.8 i am able to force the same error with a different TCA.

In your extension create extension_name/Configuration/TCA/Overrides/tt_content.php file with the following content:

<?php
defined('TYPO3_MODE') or die();

$GLOBALS['TCA']['tt_content']['columns']['categories']['l10n_mode'] = 'exclude';
$GLOBALS['TCA']['tt_content']['columns']['categories']['l10n_display'] = 'defaultAsReadonly';

Now create a new content element, translate the page, switch to the list module, translate the content element by clicking on the "localize to" icon.
Depending on your error level the following Exception is thrown:

PHP Warning: implode(): Invalid arguments passed in /var/www/html/public/typo3/sysext/backend/Classes/Form/Element/SelectTreeElement.php line 168

I think the above TCA config is a valid use case. For strict translations it makes no sense to allow the editor to choose other categories in the translation.

#4

Updated by Vladimir Falcon 7 months ago

I was able to reproduce this error.

TYPO3 10.4.14
PHP 7.4

PHP Warning
Core: Error handler (BE): PHP Warning: implode(): Invalid arguments passed in /var/www/html/app/web/typo3/sysext/backend/Classes/Form/Element/SelectTreeElement.php line 168

Steps:

1. Extended pages table with a new field for category records.
2. Set TCA options renderType = selectTree, l10n_mode = exclude and l10n_display = defaultAsReadonly.
3. Add some categories
4. Create a new page and select one or more categories.
5. Localize the previously created page.

Attached a patch to fix this problem

Also available in: Atom PDF