From 16bcbd58f3ed4d9e5393701720aedf87ce8c39ef Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 3 Dec 2015 14:12:41 -0400 Subject: [PATCH] PM-4280 "(time zone) La validacion del login del time zone..." SOLVED Issue: (time zone) La validacion del login del time zone no establece el time zone correcto Cause: New feature Solution: Added Dropdown --- .../engine/methods/login/authentication.php | 2 +- workflow/engine/methods/login/login.php | 17 ++++++- .../engine/src/ProcessMaker/Util/DateTime.php | 47 ++++++++++++++++--- .../engine/xmlform/login/TimeZoneAlert.html | 4 +- .../engine/xmlform/login/TimeZoneAlert.xml | 12 ++++- 5 files changed, 69 insertions(+), 13 deletions(-) diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index 618519c4b..c4c57122d 100755 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -212,7 +212,7 @@ try { $_SESSION['USR_USERNAME'] = $usr; $_SESSION['USR_PASSWORD'] = $pwd; - $_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)($_POST['form']['BROWSER_TIME_ZONE_OFFSET'])); + $_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)($_POST['form']['BROWSER_TIME_ZONE_OFFSET']), false); if (strpos($_SERVER['HTTP_REFERER'], 'home/login') !== false) { $d = serialize(['u' => $usr, 'p' => $pwd, 'm' => '', 'timeZoneFailed' => 1, 'userTimeZone' => $_SESSION['USR_TIME_ZONE'], 'browserTimeZone' => $_SESSION['BROWSER_TIME_ZONE']]); diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index 329f1d838..527be52be 100755 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -194,10 +194,25 @@ if (in_array(G::encryptOld($licenseManager->result), array('38afd7ae34bd5e3e6fc1 /*----------------------------------********---------------------------------*/ if ($timeZoneFailed) { + $dateTime = new \ProcessMaker\Util\DateTime(); + + $userTimeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($userTimeZone); + $browserTimeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($browserTimeZone); + + $userUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($userTimeZoneOffset); + $browserUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($browserTimeZoneOffset); + + $arrayTimeZoneId = $dateTime->getTimeZoneIdByTimeZoneOffset($browserTimeZoneOffset); + + array_unshift($arrayTimeZoneId, 'false'); + array_walk($arrayTimeZoneId, function (&$value, $key, $parameter) { $value = ['TZ_UID' => $value, 'TZ_NAME' => '(UTC' . $parameter . ') ' . $value]; }, $browserUtcOffset); + + $_SESSION['_DBArray'] = ['TIME_ZONE' => $arrayTimeZoneId]; + $arrayData = [ 'USR_USERNAME' => $userUsername, 'USR_PASSWORD' => $userPassword, - 'USR_TIME_ZONE' => $userTimeZone, + 'USR_TIME_ZONE' => '(UTC' . $userUtcOffset . ') ' . $userTimeZone, 'BROWSER_TIME_ZONE' => $browserTimeZone ]; diff --git a/workflow/engine/src/ProcessMaker/Util/DateTime.php b/workflow/engine/src/ProcessMaker/Util/DateTime.php index 3240b24ef..10b6be850 100644 --- a/workflow/engine/src/ProcessMaker/Util/DateTime.php +++ b/workflow/engine/src/ProcessMaker/Util/DateTime.php @@ -30,24 +30,33 @@ class DateTime /** * Get Time Zone ID by Time Zone Offset * - * @param int $offset Time Zone Offset + * @param int $offset Time Zone Offset + * @param bool $flagAllResults Flag which sets include all the results * - * @return string Return the Time Zone ID; UTC ID otherwise + * @return mixed Return the Time Zone ID; UTC ID otherwise */ - public function getTimeZoneIdByTimeZoneOffset($offset) + public function getTimeZoneIdByTimeZoneOffset($offset, $flagAllResults = true) { try { + $timeZoneId = ($flagAllResults)? [] : ''; + foreach (\DateTimeZone::listIdentifiers() as $value) { $timeZoneOffset = $this->getTimeZoneOffsetByTimeZoneId($value); if ($timeZoneOffset !== false && $timeZoneOffset == $offset) { - //Return - return $value; + if ($flagAllResults) { + $timeZoneId[] = $value; + } else { + $timeZoneId = $value; + break; + } } } + $timeZoneId = (!empty($timeZoneId))? $timeZoneId : (($flagAllResults)? ['UTC'] : 'UTC'); + //Return - return 'UTC'; + return $timeZoneId; } catch (\Exception $e) { throw $e; } @@ -75,7 +84,31 @@ class DateTime $offset = (($sign == '+')? '' : '-') . (($h * 60 * 60) + ($m * 60)); //Convert UTC Offset to seconds //Return - return $this->getTimeZoneIdByTimeZoneOffset((int)($offset)); + return $this->getTimeZoneIdByTimeZoneOffset((int)($offset), false); + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Get UTC Offset by Time Zone Offset + * + * @param int $offset Time Zone Offset + * + * @return string Return the UTC Offset + */ + public function getUtcOffsetByTimeZoneOffset($offset) + { + try { + $sign = ($offset >= 0)? '+' : '-'; + + $offset = abs($offset) / 60; //Convert seconds to minutes + + $h = floor($offset / 60); + $m = $offset - ($h * 60); + + //Return + return $sign . sprintf('%02d:%02d', $h, $m); } catch (\Exception $e) { throw $e; } diff --git a/workflow/engine/xmlform/login/TimeZoneAlert.html b/workflow/engine/xmlform/login/TimeZoneAlert.html index 435066514..b47c077ae 100644 --- a/workflow/engine/xmlform/login/TimeZoneAlert.html +++ b/workflow/engine/xmlform/login/TimeZoneAlert.html @@ -7,9 +7,7 @@ {$form.USR_USERNAME} {$form.USR_PASSWORD} - {$form.USR_TIME_ZONE} - {$form.BROWSER_TIME_ZONE}
diff --git a/workflow/engine/xmlform/login/TimeZoneAlert.xml b/workflow/engine/xmlform/login/TimeZoneAlert.xml index 1980bbe7a..adebaea36 100644 --- a/workflow/engine/xmlform/login/TimeZoneAlert.xml +++ b/workflow/engine/xmlform/login/TimeZoneAlert.xml @@ -6,7 +6,14 @@ - + + + + + @@ -20,7 +27,8 @@ var strHtml = document.getElementById("details").innerHTML; strHtml = stringReplace("\\{0\\}", document.getElementById("form[USR_TIME_ZONE]").value, strHtml); - strHtml = stringReplace("\\{1\\}", document.getElementById("form[BROWSER_TIME_ZONE]").value, strHtml); + strHtml = stringReplace("\\{1\\}.", "", strHtml); + strHtml = stringReplace("\\{1\\}", "", strHtml); document.getElementById("details").innerHTML = strHtml;