From d7273913c5f79cb39c98cf6dd4c42f4eb6d0001e Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 10 Dec 2015 15:21:42 -0400 Subject: [PATCH] PM-4413 "Cuando se tiene habilitado el timezone, el due date..." SOLVED Issue: Cuando se tiene habilitado el timezone, el due date del correo que envia processmaker no es correcto Cause: No se realiza la conversion de los datos al Time Zone del usuario Solution: Se hace la conversion de los datos al Time Zone del usuario --- workflow/engine/classes/class.case.php | 10 ++++++++ .../src/ProcessMaker/BusinessModel/User.php | 12 ++-------- .../engine/src/ProcessMaker/Util/DateTime.php | 11 +++++---- .../engine/src/ProcessMaker/Util/System.php | 23 +++++++++++++++++++ 4 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Util/System.php diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 6d708d59e..121b630f7 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5470,6 +5470,16 @@ class Cases $arrayData2 = $arrayData; } + if (isset($aTask['USR_UID']) && !empty($aTask['USR_UID'])) { + $user = new \ProcessMaker\BusinessModel\User(); + + $arrayUserData = $user->getUser($aTask['USR_UID'], true); + + $arrayData2 = \ProcessMaker\Util\DateTime::convertUtcToTimeZone($arrayData2, (trim($arrayUserData['USR_TIME_ZONE']) != '')? trim($arrayUserData['USR_TIME_ZONE']) : \ProcessMaker\Util\System::getTimeZone()); + } else { + $arrayData2 = \ProcessMaker\Util\DateTime::convertUtcToTimeZone($arrayData2); + } + $sBody2 = G::replaceDataGridField($sBody, $arrayData2, false); switch ($aTask["TAS_ASSIGN_TYPE"]) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/User.php b/workflow/engine/src/ProcessMaker/BusinessModel/User.php index e56af4c71..2449e92d7 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/User.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/User.php @@ -393,15 +393,7 @@ class User $arrayResult[$this->getFieldNameByFormatFieldName('USR_PHOTO_PATH')] = $pathPhotoUser; if (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__']) { - $userTimeZone = $record['USR_TIME_ZONE']; - - if (trim($userTimeZone) == '') { - $arraySystemConfiguration = \System::getSystemConfiguration('', '', SYS_SYS); - - $userTimeZone = $arraySystemConfiguration['time_zone']; - } - - $arrayResult[$this->getFieldNameByFormatFieldName('USR_TIME_ZONE')] = $userTimeZone; + $arrayResult[$this->getFieldNameByFormatFieldName('USR_TIME_ZONE')] = (trim($record['USR_TIME_ZONE']) != '')? trim($record['USR_TIME_ZONE']) : \ProcessMaker\Util\System::getTimeZone(); } //Return @@ -774,7 +766,7 @@ class User $rsCriteria = \UsersPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - $rsCriteria->next(); + $result = $rsCriteria->next(); $row = $rsCriteria->getRow(); diff --git a/workflow/engine/src/ProcessMaker/Util/DateTime.php b/workflow/engine/src/ProcessMaker/Util/DateTime.php index 10b6be850..26dba185f 100644 --- a/workflow/engine/src/ProcessMaker/Util/DateTime.php +++ b/workflow/engine/src/ProcessMaker/Util/DateTime.php @@ -341,13 +341,14 @@ class DateTime /** * Convert UTC to Time Zone * - * @param mixed $data Data - * @param array $arrayKey Keys that convert to Time Zone - * @param string $format Format to return data + * @param mixed $data Data + * @param string $toTimeZone Time Zone to convert + * @param array $arrayKey Keys that convert to Time Zone + * @param string $format Format to return data * * @return mixed Return data */ - public static function convertUtcToTimeZone($data, array $arrayKey = [], $format = 'Y-m-d H:i:s') + public static function convertUtcToTimeZone($data, $toTimeZone = null, array $arrayKey = [], $format = 'Y-m-d H:i:s') { try { if (!(isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__'])) { @@ -356,7 +357,7 @@ class DateTime } $fromTimeZone = 'UTC'; - $toTimeZone = \ProcessMaker\BusinessModel\User::getUserLoggedTimeZone(); + $toTimeZone = (!is_null($toTimeZone))? $toTimeZone : \ProcessMaker\BusinessModel\User::getUserLoggedTimeZone(); //Return return (new \ProcessMaker\Util\DateTime())->convertDataToTimeZone($data, $fromTimeZone, $toTimeZone, $arrayKey, $format); diff --git a/workflow/engine/src/ProcessMaker/Util/System.php b/workflow/engine/src/ProcessMaker/Util/System.php new file mode 100644 index 000000000..25ba3c2aa --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Util/System.php @@ -0,0 +1,23 @@ +