From 1515178500a53f1197e87cf65263362c789bd249 Mon Sep 17 00:00:00 2001 From: Denis Flaven Date: Sat, 14 May 2016 17:38:07 +0000 Subject: [PATCH] Validate date/time fields using their regular expression during an import to avoid passing wrong formats as-is (e.g. 01/02/16 can become 01/02/0016 instead of 01/02/2016 if you use the 4 digits format for years and pass only 2 digits !) SVN:trunk[4090] --- core/bulkchange.class.inc.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/core/bulkchange.class.inc.php b/core/bulkchange.class.inc.php index 0e2fe52c9..d144f19c1 100644 --- a/core/bulkchange.class.inc.php +++ b/core/bulkchange.class.inc.php @@ -827,17 +827,24 @@ class BulkChange { $sFormat = $sDateFormat; } - $oDate = DateTime::createFromFormat($sFormat, $this->m_aData[$iRow][$iCol]); - if ($oDate !== false) + if (!preg_match('/'.$sRegExp.'/', $this->m_aData[$iRow][$iCol])) { - $sNewDate = $oDate->format($oAttDef->GetInternalFormat()); - $this->m_aData[$iRow][$iCol] = $sNewDate; + $aResult[$iRow]["__STATUS__"]= new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-DateFormat')); } else { - // Leave the cell unchanged - $aResult[$iRow]["__STATUS__"]= new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-DateFormat')); - $aResult[$iRow][$sAttCode] = new CellStatus_Issue(null, $this->m_aData[$iRow][$iCol], Dict::S('UI:CSVReport-Row-Issue-DateFormat')); + $oDate = DateTime::createFromFormat($sFormat, $this->m_aData[$iRow][$iCol]); + if ($oDate !== false) + { + $sNewDate = $oDate->format($oAttDef->GetInternalFormat()); + $this->m_aData[$iRow][$iCol] = $sNewDate; + } + else + { + // Leave the cell unchanged + $aResult[$iRow]["__STATUS__"]= new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-DateFormat')); + $aResult[$iRow][$sAttCode] = new CellStatus_Issue(null, $this->m_aData[$iRow][$iCol], Dict::S('UI:CSVReport-Row-Issue-DateFormat')); + } } } else