From ed66ccfd037838dbc18f23237de0685caa029942 Mon Sep 17 00:00:00 2001 From: Uma <uma.s@vtiger.com> Date: Tue, 7 Apr 2020 22:12:10 +0530 Subject: [PATCH] Fixes #1253 German UK date formats can be saved --- data/CRMEntity.php | 2 +- include/fields/DateTimeField.php | 90 ++++++++++---------------------- include/utils/utils.php | 32 ++++++++++-- 3 files changed, 56 insertions(+), 68 deletions(-) diff --git a/data/CRMEntity.php b/data/CRMEntity.php index 041febdb4..bfd70408c 100644 --- a/data/CRMEntity.php +++ b/data/CRMEntity.php @@ -522,7 +522,7 @@ class CRMEntity { } elseif ($uitype == 5 || $uitype == 6 || $uitype == 23) { //Added to avoid function call getDBInsertDateValue in ajax save if (isset($current_user->date_format) && !$ajaxSave) { - $fldvalue = getValidDBInsertDateValue($this->column_fields[$fieldname]); + $fldvalue = getValidDBInsertDateTimeValue($this->column_fields[$fieldname]); } else { $fldvalue = $this->column_fields[$fieldname]; } diff --git a/include/fields/DateTimeField.php b/include/fields/DateTimeField.php index 4425c3a36..db58cbeab 100644 --- a/include/fields/DateTimeField.php +++ b/include/fields/DateTimeField.php @@ -80,24 +80,16 @@ class DateTimeField { public static function convertToDBFormat($date, $user = null) { global $current_user; - if (empty($user)) { - $user = $current_user; - } - 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'; - } else if (false !== strpos($date, '/')) { - $format = 'dd/mm/yyyy'; - } else { - $format = 'dd-mm-yyyy'; - } - } + if(empty($user)) { + $user = $current_user; + } + + $format = $current_user->date_format; + if(empty($format)) { + $format = 'dd-mm-yyyy'; + } - return self::__convertToDBFormat($date, $format); + return self::__convertToDBFormat($date, $format); } /** @@ -109,53 +101,25 @@ class DateTimeField { */ public static function __convertToDBFormat($date, $format) { - $dbDate = ''; - - if (empty($format)) { - if (false !== strpos($date, '.')) { - $format = 'dd.mm.yyyy'; - } else if (false !== strpos($date, '/')) { - $format = 'dd/mm/yyyy'; - } else { - $format = 'dd-mm-yyyy'; - } - } - - switch ($format) { - case 'dd.mm.yyyy': - list($d, $m, $y) = explode('.', $date); - break; - case 'mm.dd.yyyy': - list($m, $d, $y) = explode('.', $date); - break; - case 'yyyy.mm.dd': - list($y, $m, $d) = explode('.', $date); - break; - case 'dd/mm/yyyy': - list($d, $m, $y) = explode('/', $date); - break; - case 'mm/dd/yyyy': - list($m, $d, $y) = explode('/', $date); - break; - case 'yyyy/mm/dd': - list($y, $m, $d) = explode('/', $date); - break; - case 'dd-mm-yyyy': - list($d, $m, $y) = explode('-', $date); - break; - case 'mm-dd-yyyy': - list($m, $d, $y) = explode('-', $date); - break; - case 'yyyy-mm-dd': - list($y, $m, $d) = explode('-', $date); - break; - } - - if (!empty($y) && !empty($m) && !empty($d)) { - $dbDate = $y . '-' . $m . '-' . $d; - } + if ($format == '') { + $format = 'dd-mm-yyyy'; + } + $dbDate = ''; + $dateFormats = ['dd-mm-yyyy', 'dd/mm/yyyy', 'dd.mm.yyyy']; + if (in_array($format, $dateFormats)) { + list($d, $m, $y) = explode('-', $date); + } elseif ($format == 'mm-dd-yyyy') { + list($m, $d, $y) = explode('-', $date); + } elseif ($format == 'yyyy-mm-dd') { + list($y, $m, $d) = explode('-', $date); + } - return $dbDate; + if (!$y && !$m && !$d) { + $dbDate = ''; + } else { + $dbDate = $y . '-' . $m . '-' . $d; + } + return $dbDate; } /** diff --git a/include/utils/utils.php b/include/utils/utils.php index fd46ecd56..0029639a1 100755 --- a/include/utils/utils.php +++ b/include/utils/utils.php @@ -1786,9 +1786,32 @@ function isRecordExists($recordId) { function getValidDBInsertDateValue($value) { global $log; $log->debug("Entering getValidDBInsertDateValue(".$value.") method ..."); - - $insert_date = DateTimeField::convertToDBFormat($value); - + $value = trim($value); + $delim = array('/','.'); + foreach ($delim as $delimiter){ + $x = strpos($value, $delimiter); + if($x === false) continue; + else{ + $value=str_replace($delimiter, '-', $value); + break; + } + } + 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 ''; + } + $log->debug("Exiting getValidDBInsertDateValue method ..."); return $insert_date; } @@ -1796,7 +1819,8 @@ function getValidDBInsertDateValue($value) { function getValidDBInsertDateTimeValue($value) { $value = trim($value); $valueList = explode(' ',$value); - if(count($valueList) == 2) { + //checking array count = 3 if datatime format is 12hr. + if(count($valueList) == 2 || count($valueList) == 3) { $dbDateValue = getValidDBInsertDateValue($valueList[0]); $dbTimeValue = $valueList[1]; if(!empty($dbTimeValue) && strpos($dbTimeValue, ':') === false) { -- GitLab