From ec7b2297c3ef498a39fa53a2a755193c37926748 Mon Sep 17 00:00:00 2001
From: Frans Saris <franssaris@gmail.com>
Date: Wed, 20 Apr 2016 15:45:10 +0200
Subject: [PATCH] [BUGFIX] Remember not rendered checkboxes in TCA treeSelect

When you have a select field of rendertype selectTree it looses the
selected values of the not rendered checkboxes.

This changes makes sure that also the not rendered values are kept.

Change-Id: I8649e83c56a0265a7de069ef9654ed13b90b3239
Resolves: #75519
Releases: master, 7.6, 6.2
Reviewed-on: https://review.typo3.org/47900
Reviewed-by: Frans Saris <franssaris@gmail.com>
Tested-by: Frans Saris <franssaris@gmail.com>
---
 .../Resources/Public/JavaScript/tree.js       | 23 ++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/tree.js b/typo3/sysext/backend/Resources/Public/JavaScript/tree.js
index 65bfe0657f74..27b8495663a6 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/tree.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/tree.js
@@ -60,6 +60,14 @@ TYPO3.Components.Tree.StandardTree = function(config) {
 Ext.extend(TYPO3.Components.Tree.StandardTree, Ext.tree.TreePanel, {
 
 	initComponent: function() {
+		// prepare hidden input field (make sure only comma separated uids are present)
+		var selected = Ext.fly('treeinput' + this.id).dom.value.split(',');
+		for (var i = 0; i < selected.length; i++) {
+			var value = selected[i].split('|');
+			selected[i] = value[0];
+		}
+		Ext.fly('treeinput' + this.id).dom.value = selected.join(',');
+
 		Ext.apply(this, {
 			tbar: this.initialConfig.showHeader ? TYPO3.Components.Tree.Toolbar([], this) : null
 		});
@@ -182,7 +190,8 @@ TYPO3.Components.Tree.EmptySelectionModel = new Ext.tree.DefaultSelectionModel({
 
 TYPO3.Components.Tree.TcaCheckChangeHandler = function(checkedNode, checked) {
 	var exclusiveKeys = this.tcaExclusiveKeys.split(','),
-		uid = '' + checkedNode.attributes.uid;
+		uid = '' + checkedNode.attributes.uid,
+		selected = Ext.fly('treeinput' + this.id).dom.value.split(',');
 
 	this.suspendEvents();
 
@@ -226,12 +235,20 @@ TYPO3.Components.Tree.TcaCheckChangeHandler = function(checkedNode, checked) {
 			node.ui.toggleCheck(checkedNode.attributes.checked);
 		})
 	}
-	var selected = [];
+
 	this.root.cascade(function(node) {
 		if (node.ui.isChecked()) {
-			selected.push(node.attributes.uid);
+			if (selected.indexOf(node.attributes.uid) < 0) {
+				selected.push(node.attributes.uid)
+			}
+		} else {
+			var index = selected.indexOf(node.attributes.uid);
+			if (index >= 0) {
+				selected.splice(index, 1);
+			}
 		}
 	});
+
 	this.countSelectedNodes = selected.length;
 	Ext.fly('treeinput' + this.id).dom.value = selected.join(',');
 	eval(this.onChange);
-- 
GitLab