[BUGFIX] TCA: handle select renderMode=tree with minitems=1 AND maxitems=1 71/31171/3
authorAlexander Bigga <alexander.bigga@slub-dresden.de>
Fri, 27 Jun 2014 12:57:39 +0000 (14:57 +0200)
committerMarkus Klein <klein.t3@mfc-linz.at>
Mon, 7 Jul 2014 21:50:28 +0000 (23:50 +0200)
commit05fccb002a96c8d924bee19c342c148e8b726c33
tree3af64de9f3f7d68ce87a2a10eff205af83142253
parentbde08ecf763a507a640d7fd4b2d06ebf7f12f760
[BUGFIX] TCA: handle select renderMode=tree with minitems=1 AND maxitems=1

Using the TCA select renderMode=tree with the option
minitems=1 AND maxitems=1
leads to two bugs since TYPO3 4.5:

First #48943
* A new table entry won't mark the field selection as required. The yellow
  question mark is missing and you can save the entry.
* Once you select a checkbox in the tree and unselect it again, the
  required-check is working.

Second: #31637
* You load an existing table entry with a selection of e.g. a category
  which has been hidden or deleted. The selected checkbox won't be shown,
  but the required-check fails.
* Even worse: You can't select another category as the form thinks you
  have already selected one item (maxitem=1). You can fix this only by
  manipulating the database directly.

The reason for these bugs can be found in
DataPreprocessor::renderRecord_selectProc(). For maxitems = 1 the
foreign_table element ids for the tree will be fetched by getDataIdList().
These elements won't be checked whether they are valid (hidden/deleted).
This check is done in selectAddForeign() which is used for maxitems > 1.

The patch uses the same procedure as for maxitems > 1 in case
of renderMode = tree.

Resolves: #48943
Resolves: #31637
Releases: 6.3, 6.2, 6.1
Change-Id: I078ff524ea73951f2121d2c233a46bc2ae562952
Reviewed-on: https://review.typo3.org/31171
Reviewed-by: Wouter Wolters
Reviewed-by: Marcin Sągol
Tested-by: Frans Saris
Reviewed-by: Fabien Udriot
Reviewed-by: Nicole Cordes
Tested-by: Marcin Sągol
Reviewed-by: Markus Klein
Tested-by: Markus Klein
typo3/sysext/backend/Classes/Form/DataPreprocessor.php