From 3ec0b60f03b4627ee6844ce2bf1f61e17d5bd98e Mon Sep 17 00:00:00 2001
From: Uma <uma.s@vtiger.com>
Date: Mon, 16 Mar 2020 21:10:39 +0530
Subject: [PATCH] Fixes #1253 German and UK date formats cannot be saved

---
 data/CRMEntity.php               |  2 +-
 include/fields/DateTimeField.php |  6 ++++--
 include/utils/utils.php          | 37 +++-----------------------------
 3 files changed, 8 insertions(+), 37 deletions(-)

diff --git a/data/CRMEntity.php b/data/CRMEntity.php
index b0c7008f4..041febdb4 100644
--- a/data/CRMEntity.php
+++ b/data/CRMEntity.php
@@ -945,7 +945,7 @@ class CRMEntity {
 			$em->triggerEvent("vtiger.entity.beforesave.modifiable", $entityData);
 			$em->triggerEvent("vtiger.entity.beforesave", $entityData);
 			$em->triggerEvent("vtiger.entity.beforesave.final", $entityData);
-		}
+        }
 		//Event triggering code ends
 
 		//GS Save entity being called with the modulename as parameter
diff --git a/include/fields/DateTimeField.php b/include/fields/DateTimeField.php
index 56cdfb0e7..4425c3a36 100644
--- a/include/fields/DateTimeField.php
+++ b/include/fields/DateTimeField.php
@@ -83,8 +83,10 @@ class DateTimeField {
         if (empty($user)) {
             $user = $current_user;
         }
-
-        $format = $current_user->date_format;
+        if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2}$/", $date) == 1) {
+            return $date;
+        }
+        $format = $user->date_format;
         if (empty($format)) {
             if (false !== strpos($date, '.')) {
 				$format = 'dd.mm.yyyy';
diff --git a/include/utils/utils.php b/include/utils/utils.php
index 7dd268dcd..fd46ecd56 100755
--- a/include/utils/utils.php
+++ b/include/utils/utils.php
@@ -1786,40 +1786,9 @@ function isRecordExists($recordId) {
 function getValidDBInsertDateValue($value) {
 	global $log;
 	$log->debug("Entering getValidDBInsertDateValue(".$value.") method ...");
-	$value = trim($value);
-	$delim = array('/','.');
-	foreach ($delim as $delimiter){
-		$x = strpos($value, $delimiter);
-		if($x === false) continue;
-		else{
-			if (false !== strpos($value, '-')) {
-				$value = str_replace($delimiter, '-', $value);
-			}
-			break;
-		}
-	}
-	if (false !== strpos($value, '.')) {
-		list($y, $m, $d) = explode('.', $value);
-	} else if (false !== strpos($value, '/')) {
-		list($y, $m, $d) = explode('/', $value);
-	} else {
-		list($y, $m, $d) = explode('-', $value);
-	}
-	if(strlen($y) == 1) $y = '0'.$y;
-	if(strlen($m) == 1) $m = '0'.$m;
-	if(strlen($d) == 1) $d = '0'.$d;
-	$value = implode('-', array($y,$m,$d));
-
-	if(strlen($y)<4){
-		$insert_date = DateTimeField::convertToDBFormat($value);
-	} else {
-		$insert_date = $value;
-	}
-
-	if (preg_match("/^[0-9]{2,4}[-][0-1]{1,2}?[0-9]{1,2}[-][0-3]{1,2}?[0-9]{1,2}$/", $insert_date) == 0) {
-		return '';
-	}
-
+	
+    $insert_date = DateTimeField::convertToDBFormat($value);
+	
 	$log->debug("Exiting getValidDBInsertDateValue method ...");
 	return $insert_date;
 		}
-- 
GitLab