From 99f54d42536acf90616e5deae5ed2e754b1c478d Mon Sep 17 00:00:00 2001
From: Frank Naegler <frank.naegler@typo3.org>
Date: Fri, 24 Mar 2017 12:12:43 +0100
Subject: [PATCH] [BUGFIX] Avoid warning dialog when closing records with
 dateTime fields

In case a record contains a DateTimePicker field, the validation is triggered to early
and mark each DateTime field as changed. This patch fix this wrong behavior.

Resolves: #80008
Releases: master
Change-Id: I9a2d81c6cf5b544d5a6f08f43fd2fea86b415d6a
Reviewed-on: https://review.typo3.org/52140
Tested-by: TYPO3com <no-reply@typo3.com>
Tested-by: Joerg Kummer <service@enobe.de>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
---
 .../Public/JavaScript/DateTimePicker.js       |  1 +
 .../Resources/Public/JavaScript/FormEngine.js |  3 +++
 .../Public/JavaScript/FormEngineValidation.js | 22 ++++++++++---------
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/DateTimePicker.js b/typo3/sysext/backend/Resources/Public/JavaScript/DateTimePicker.js
index 6fbb0e0fa1df..1a053b18e4f5 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/DateTimePicker.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/DateTimePicker.js
@@ -173,6 +173,7 @@ define(['jquery'], function($) {
 						}
 						$hiddenField.val(value);
 					}
+					$(document).trigger('formengine.dp.change', [$(this)]);
 				});
 			});
 		}
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js
index e1e246db0024..a4c9c3551bfc 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js
@@ -729,6 +729,9 @@ define(['jquery',
 				$input.val($(this).attr('data-original-language-value')).trigger('change');
 				$input.data('last-l10n-state', $(this).val());
 			}
+		}).on('formengine.dp.change', function(event, $field) {
+			FormEngine.Validation.validate();
+			FormEngine.Validation.markFieldAsChanged($field);
 		});
 	};
 
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js
index feba8af35288..ac9f619beb1c 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js
@@ -21,14 +21,13 @@ define(['jquery', 'TYPO3/CMS/Backend/FormEngine', 'moment'], function ($, FormEn
 	/**
 	 * The main FormEngineValidation object
 	 *
-	 * @type {{rulesSelector: string, inputSelector: string, markerSelector: string, dateTimeSelector: string, groupFieldHiddenElement: string, relatedFieldSelector: string, errorClass: string, lastYear: number, lastDate: number, lastTime: number, refDate: Date, USmode: number, passwordDummy: string}}
+	 * @type {{rulesSelector: string, inputSelector: string, markerSelector: string, groupFieldHiddenElement: string, relatedFieldSelector: string, errorClass: string, lastYear: number, lastDate: number, lastTime: number, refDate: Date, USmode: number, passwordDummy: string}}
 	 * @exports TYPO3/CMS/Backend/FormEngineValidation
 	 */
 	var FormEngineValidation = {
 		rulesSelector: '[data-formengine-validation-rules]',
 		inputSelector: '[data-formengine-input-params]',
 		markerSelector: '.t3js-formengine-validation-marker',
-		dateTimeSelector: '.t3js-datetimepicker',
 		groupFieldHiddenElement: '.t3js-formengine-field-group input[type=hidden]',
 		relatedFieldSelector: '[data-relatedfieldname]',
 		errorClass: 'has-error',
@@ -51,14 +50,7 @@ define(['jquery', 'TYPO3/CMS/Backend/FormEngine', 'moment'], function ($, FormEn
 			// Bind to field changes
 			$(document).on('change', FormEngineValidation.rulesSelector, function() {
 				FormEngineValidation.validate();
-				var $paletteField = $(this).closest('.t3js-formengine-palette-field');
-				$paletteField.addClass('has-change');
-			});
-
-			$(document).on('dp.change', FormEngineValidation.dateTimeSelector, function(event) {
-				FormEngineValidation.validate();
-				var $paletteField = $(this).closest('.t3js-formengine-palette-field');
-				$paletteField.addClass('has-change');
+				FormEngineValidation.markFieldAsChanged($(this));
 			});
 		});
 
@@ -539,6 +531,16 @@ define(['jquery', 'TYPO3/CMS/Backend/FormEngine', 'moment'], function ($, FormEn
 		$(document).trigger('t3-formengine-postfieldvalidation');
 	};
 
+	/**
+	 * Helper function to mark a field as changed.
+	 *
+	 * @param {Object} $field
+	 */
+	FormEngineValidation.markFieldAsChanged = function($field) {
+		var $paletteField = $field.closest('.t3js-formengine-palette-field');
+		$paletteField.addClass('has-change');
+	};
+
 	/**
 	 * Helper function to get clean trimmed array from comma list
 	 *
-- 
GitLab