mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 02:28:44 +02:00
N.497 Continuation of the fix done in [r4461], to correctly handle validation patterns containing a slash (AttributeURL in the enhanced customer portal). The initial fix has broken the validation of date (+time) fields because the slash was escaped twice, leading to an invalid regular expression. Requires testing of synchro, CSV import, console, customer portal...
SVN:trunk[4538]
This commit is contained in:
@@ -828,8 +828,8 @@ class BulkChange
|
||||
$sFormat = $sDateFormat;
|
||||
}
|
||||
$oFormat = new DateTimeFormat($sFormat);
|
||||
$sRegExp = $oFormat->ToRegExpr();
|
||||
if (!preg_match('/'.$sRegExp.'/', $this->m_aData[$iRow][$iCol]))
|
||||
$sRegExp = $oFormat->ToRegExpr('/');
|
||||
if (!preg_match($sRegExp, $this->m_aData[$iRow][$iCol]))
|
||||
{
|
||||
$aResult[$iRow]["__STATUS__"]= new RowStatus_Issue(Dict::S('UI:CSVReport-Row-Issue-DateFormat'));
|
||||
}
|
||||
|
||||
@@ -413,10 +413,16 @@ EOF
|
||||
/**
|
||||
* Get the regular expression to (approximately) validate a date/time for the current format
|
||||
* The validation does not take into account the number of days in a month (i.e. June 31st will pass, as well as Feb 30th!)
|
||||
* @param string $sDelimiter Surround the regexp (and escape) if needed
|
||||
* @return string The regular expression in PCRE syntax
|
||||
*/
|
||||
public function ToRegExpr()
|
||||
public function ToRegExpr($sDelimiter = null)
|
||||
{
|
||||
return '^'.$this->Transform('regexpr', "\\%s", false /* escape all */, '.?*$^()[]/:').'$';
|
||||
$sRet = '^'.$this->Transform('regexpr', "\\%s", false /* escape all */, '.?*$^()[]:').'$';
|
||||
if ($sDelimiter !== null)
|
||||
{
|
||||
$sRet = $sDelimiter.str_replace($sDelimiter, '\\'.$sDelimiter, $sRet).$sDelimiter;
|
||||
}
|
||||
return $sRet;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,8 +218,8 @@ function ChangeDateFormat($sProposedDate, $sFormat)
|
||||
{
|
||||
// Convert to a valid MySQL datetime
|
||||
$oFormat = new DateTimeFormat($sFormat);
|
||||
$sRegExpr = $oFormat->ToRegExpr();
|
||||
if (!preg_match('/'.$sRegExpr.'/', $sProposedDate))
|
||||
$sRegExpr = $oFormat->ToRegExpr('/');
|
||||
if (!preg_match($sRegExpr, $sProposedDate))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4930,14 +4930,14 @@ class TestDateTimeFormats extends TestBizModel
|
||||
$oDate = new DateTime($sTestDate);
|
||||
$sFormattedDate = $oFormat->Format($oDate);
|
||||
$oParsedDate = $oFormat->Parse($sFormattedDate);
|
||||
$sPattern = $oFormat->ToRegExpr();
|
||||
$sPattern = $oFormat->ToRegExpr('/');
|
||||
$bParseOk = ($oParsedDate->format('Y-m-d H:i:s') == $sTestDate);
|
||||
if (!$bParseOk)
|
||||
{
|
||||
$this->ReportError('Parsed ('.$sFormattedDate.') date different from initial date (difference of '.((int)$oParsedDate->format('U')- (int)$oDate->format('U')).'s)');
|
||||
$bRet = false;
|
||||
}
|
||||
$bValidateOk = preg_match('/'.$sPattern.'/', $sFormattedDate);
|
||||
$bValidateOk = preg_match($sPattern, $sFormattedDate);
|
||||
if (!$bValidateOk)
|
||||
{
|
||||
$this->ReportError('Formatted date ('.$sFormattedDate.') does not match the validation pattern ('.$sPattern.')');
|
||||
@@ -4963,8 +4963,8 @@ class TestDateTimeFormats extends TestBizModel
|
||||
$this->ReportSuccess("Test of the '$sFormatName' format: '$sFormat':");
|
||||
foreach($aDatesToParse as $sDate)
|
||||
{
|
||||
$sPattern = $oFormat->ToRegExpr();
|
||||
$bValidateOk = preg_match('/'.$sPattern.'/', $sDate);
|
||||
$sPattern = $oFormat->ToRegExpr('/');
|
||||
$bValidateOk = preg_match($sPattern, $sDate);
|
||||
if ($bValidateOk)
|
||||
{
|
||||
$this->ReportError('Formatted date ('.$sFormattedDate.') matches the validation pattern ('.$sPattern.') whereas it should not!');
|
||||
|
||||
Reference in New Issue
Block a user