From 28b6838770ccf9fe0f8b57f26f6fa6860b32887e Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 2 Dec 2015 16:14:54 -0400 Subject: [PATCH 01/10] PM-4141 --- workflow/engine/classes/class.reportTables.php | 11 ++++++++++- .../src/ProcessMaker/BusinessModel/Consolidated.php | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/workflow/engine/classes/class.reportTables.php b/workflow/engine/classes/class.reportTables.php index 1827a86e4..392103346 100755 --- a/workflow/engine/classes/class.reportTables.php +++ b/workflow/engine/classes/class.reportTables.php @@ -553,6 +553,15 @@ class ReportTables public function updateTables ($sProcessUid, $sApplicationUid, $iApplicationNumber, $aFields) { try { + $c = new Criteria('workflow'); + $c->addSelectColumn(BpmnProjectPeer::PRJ_UID); + $c->add(BpmnProjectPeer::PRJ_UID, $sProcessUid, Criteria::EQUAL); + $ds = ProcessPeer::doSelectRS($c); + $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $ds->next(); + $row = $ds->getRow(); + $isBpmn = isset($row['PRJ_UID']); + if (!class_exists('ReportTablePeer')) { require_once 'classes/model/ReportTablePeer.php'; } @@ -583,7 +592,7 @@ class ReportTables foreach ($aTableFields as $aField) { $sQuery .= '`' . $aField['sFieldName'] . '` = '; - if(!isset($aFields[$aField['sFieldName']])){ + if(!$isBpmn && !isset($aFields[$aField['sFieldName']])){ foreach($aFields as $row){ if(is_array($row) && isset($row[count($row)])){ $aFields = $row[count($row)]; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php index a423d4ca8..63e9b684c 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php @@ -458,8 +458,8 @@ class Consolidated $dataTask = $oDyna->load($dyn_uid); if ($dataTask['DYN_VERSION'] > 0) { G::LoadClass("pmDynaform"); - $pmDyna = new \pmDynaform(array('APP_DATA' => array())); - $pmDyna->fields["CURRENT_DYNAFORM"] = $dyn_uid; + $_SESSION['PROCESS'] = $pro_uid; + $pmDyna = new \pmDynaform(array('APP_DATA' => array(), "CURRENT_DYNAFORM" => $dyn_uid)); $json = G::json_decode($dataTask["DYN_CONTENT"]); $pmDyna->jsonr($json); $fieldsDyna = $json->items[0]->items; From 1e2e86660208eaaaaf81b3faa3fe37794301920f Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 3 Dec 2015 09:55:19 -0400 Subject: [PATCH 02/10] PM-4033 --- workflow/engine/classes/class.pmFunctions.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 8edbbab2f..d7cd2d5a2 100755 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -1743,6 +1743,9 @@ function PMFGenerateOutputDocument ($outputID, $sApplication = null, $index = nu $aProperties['media'] = $aOD['OUT_DOC_MEDIA']; $aProperties['margins'] = array ('left' => $aOD['OUT_DOC_LEFT_MARGIN'],'right' => $aOD['OUT_DOC_RIGHT_MARGIN'],'top' => $aOD['OUT_DOC_TOP_MARGIN'],'bottom' => $aOD['OUT_DOC_BOTTOM_MARGIN'] ); + if ($aOD['OUT_DOC_PDF_SECURITY_ENABLED'] == '1') { + $aProperties['pdfSecurity'] = array('openPassword' => $aOD['OUT_DOC_PDF_SECURITY_OPEN_PASSWORD'], 'ownerPassword' => $aOD['OUT_DOC_PDF_SECURITY_OWNER_PASSWORD'], 'permissions' => $aOD['OUT_DOC_PDF_SECURITY_PERMISSIONS']); + } if (isset($aOD['OUT_DOC_REPORT_GENERATOR'])) { $aProperties['report_generator'] = $aOD['OUT_DOC_REPORT_GENERATOR']; } From b59044f19ce4ff77ca078de544ced32df327f0f6 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Thu, 3 Dec 2015 10:16:21 -0400 Subject: [PATCH 03/10] PM-3940 --- gulliver/system/class.g.php | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 154473d50..350eb1f7d 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5495,16 +5495,31 @@ class G } break; case 'docx': + if ($docType[1] == 'vnd.openxmlformats-officedocument.wordprocessingml.document') { + $res->status = true; + return $res; + } + break; case 'pptx': + if ($docType[1] == 'vnd.openxmlformats-officedocument.presentationml.presentation') { + $res->status = true; + return $res; + } + break; case 'xlsx': - if ($docType[1] == 'zip') { + if ($docType[1] == 'vnd.openxmlformats-officedocument.spreadsheetml.sheet') { $res->status = true; return $res; } break; case 'exe': + if ($docType[1] == 'x-msdownload' || $docType[1] == 'x-dosexec') { + $res->status = true; + return $res; + } + break; case 'wmv': - if($docType[1] == 'octet-stream'){ + if($docType[1] == 'x-ms-asf' || $docType[1] == 'x-ms-wmv'){ $res->status = true; return $res; } From 16bcbd58f3ed4d9e5393701720aedf87ce8c39ef Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 3 Dec 2015 14:12:41 -0400 Subject: [PATCH 04/10] 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; From 7d64569d9385d07d8d7c4529c336c1cc4e9059e3 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Thu, 3 Dec 2015 15:01:58 -0400 Subject: [PATCH 05/10] PM-4256 --- workflow/engine/methods/login/login.php | 14 +++++++++++-- workflow/engine/methods/login/sysLogin.php | 2 -- workflow/engine/methods/users/usersEdit.php | 8 ++++++++ workflow/engine/methods/users/usersInit.php | 8 ++++++++ workflow/engine/templates/users/users.js | 22 ++++++++++++++++----- 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index 329f1d838..ac8b24761 100755 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -216,7 +216,12 @@ $translationsTable = $Translations->getTranslationEnvironments(); $availableLangArray = array (); $availableLangArray [] = array ('LANG_ID' => 'char', 'LANG_NAME' => 'char' ); -$availableLangArray [] = array ('LANG_ID' => 'default', 'LANG_NAME' => G::LoadTranslation("ID_DEFAULT_LANGUAGE") ); +/*----------------------------------********---------------------------------*/ +$licensedFeatures = & PMLicensedFeatures::getSingleton(); +if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkdKR3ROS0VzWGdoLzNQYz0=')) { + $availableLangArray [] = array ('LANG_ID' => 'default', 'LANG_NAME' => G::LoadTranslation("ID_DEFAULT_LANGUAGE") ); +} +/*----------------------------------********---------------------------------*/ foreach ($translationsTable as $locale) { $row['LANG_ID'] = $locale['LOCALE']; @@ -240,7 +245,12 @@ $oConf->loadConfig($obj, 'ENVIRONMENT_SETTINGS', ''); if (isset($oConf->aConfig["login_defaultLanguage"]) && $oConf->aConfig["login_defaultLanguage"] != "") { $aFields["USER_LANG"] = $oConf->aConfig["login_defaultLanguage"]; - $aFields["USER_LANG"] = "default"; + /*----------------------------------********---------------------------------*/ + $licensedFeatures = & PMLicensedFeatures::getSingleton(); + if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkdKR3ROS0VzWGdoLzNQYz0=')) { + $aFields["USER_LANG"] = "default"; + } + /*----------------------------------********---------------------------------*/ } else { $myUrl = explode("/", $_SERVER["REQUEST_URI"]); diff --git a/workflow/engine/methods/login/sysLogin.php b/workflow/engine/methods/login/sysLogin.php index d8ee757fa..116d3c465 100755 --- a/workflow/engine/methods/login/sysLogin.php +++ b/workflow/engine/methods/login/sysLogin.php @@ -121,7 +121,6 @@ $translationsTable = $Translations->getTranslationEnvironments(); $availableLangArray = array (); $availableLangArray [] = array ('LANG_ID' => 'char', 'LANG_NAME' => 'char'); -$availableLangArray [] = array ('LANG_ID' => 'default', 'LANG_NAME' => G::LoadTranslation("ID_DEFAULT_LANGUAGE") ); foreach ($translationsTable as $locale) { $aFields['LANG_ID'] = $locale['LOCALE']; @@ -150,7 +149,6 @@ $_SESSION ['_DBArray'] = $_DBArray; $aField ['LOGIN_VERIFY_MSG'] = G::loadTranslation ('LOGIN_VERIFY_MSG'); $aField['USER_LANG'] = SYS_LANG; -$aField['USER_LANG'] = "default"; $G_PUBLISH = new Publisher (); if (!defined('WS_IN_LOGIN')) { diff --git a/workflow/engine/methods/users/usersEdit.php b/workflow/engine/methods/users/usersEdit.php index b928a824b..4b321099a 100644 --- a/workflow/engine/methods/users/usersEdit.php +++ b/workflow/engine/methods/users/usersEdit.php @@ -13,6 +13,13 @@ $uploadMaxSize = (int) $UPLOAD_MAX_SIZE * $mul; if ($postMaxSize < $uploadMaxSize) { $uploadMaxSize = $postMaxSize; } +$languageManagement = 0; +/*----------------------------------********---------------------------------*/ +$licensedFeatures = & PMLicensedFeatures::getSingleton(); +if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkdKR3ROS0VzWGdoLzNQYz0=')) { + $languageManagement = 1; +} +/*----------------------------------********---------------------------------*/ $arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); @@ -24,6 +31,7 @@ $oHeadPublisher->assign( 'MAX_FILES_SIZE', ' (' . $UPLOAD_MAX_SIZE . ') ' ); $oHeadPublisher->assign('SYSTEM_TIME_ZONE', $arraySystemConfiguration['time_zone']); $oHeadPublisher->assign('TIME_ZONE_DATA', array_map(function ($value) { return [$value, $value]; }, DateTimeZone::listIdentifiers())); $oHeadPublisher->assign('__SYSTEM_UTC_TIME_ZONE__', (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__'])? 1 : 0); +$oHeadPublisher->assign('LANGUAGE_MANAGEMENT', $languageManagement); G::RenderPage( 'publish', 'extJs' ); diff --git a/workflow/engine/methods/users/usersInit.php b/workflow/engine/methods/users/usersInit.php index fe4e70d4a..3a53ed036 100644 --- a/workflow/engine/methods/users/usersInit.php +++ b/workflow/engine/methods/users/usersInit.php @@ -26,6 +26,13 @@ $uploadMaxSize = (int) $UPLOAD_MAX_SIZE * $mul; if ($postMaxSize < $uploadMaxSize) { $uploadMaxSize = $postMaxSize; } +$languageManagement = 0; +/*----------------------------------********---------------------------------*/ +$licensedFeatures = & PMLicensedFeatures::getSingleton(); +if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkdKR3ROS0VzWGdoLzNQYz0=')) { + $languageManagement = 1; +} +/*----------------------------------********---------------------------------*/ $arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); @@ -41,5 +48,6 @@ $oHeadPublisher->assign( 'MODE', '' ); $oHeadPublisher->assign('SYSTEM_TIME_ZONE', $arraySystemConfiguration['time_zone']); $oHeadPublisher->assign('TIME_ZONE_DATA', array_map(function ($value) { return [$value, $value]; }, DateTimeZone::listIdentifiers())); $oHeadPublisher->assign('__SYSTEM_UTC_TIME_ZONE__', (isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__'])? 1 : 0); +$oHeadPublisher->assign('LANGUAGE_MANAGEMENT', $languageManagement); G::RenderPage( 'publish', 'extJs' ); diff --git a/workflow/engine/templates/users/users.js b/workflow/engine/templates/users/users.js index 61609080d..fe8ead2d7 100755 --- a/workflow/engine/templates/users/users.js +++ b/workflow/engine/templates/users/users.js @@ -427,6 +427,7 @@ Ext.onReady(function () { hidden: !(__SYSTEM_UTC_TIME_ZONE__ == 1) }); + /*----------------------------------********---------------------------------*/ storeLanguage = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: "usersAjax", @@ -457,8 +458,10 @@ Ext.onReady(function () { editable : false, allowBlank : false, triggerAction : 'all', - mode : 'local' + mode : 'local', + hidden : !(LANGUAGE_MANAGEMENT == 1) }); + /*----------------------------------********---------------------------------*/ var informationFields = new Ext.form.FieldSet({ title : _('ID_PERSONAL_INFORMATION'), @@ -570,8 +573,10 @@ Ext.onReady(function () { comboCalendar, comboStatus, comboRole, - cboTimeZone, - comboLanguage + cboTimeZone + /*----------------------------------********---------------------------------*/ + ,comboLanguage + /*----------------------------------********---------------------------------*/ ] }); /*----------------------------------********---------------------------------*/ @@ -999,7 +1004,8 @@ Ext.onReady(function () { id : 'USR_DEFAULT_LANG2', fieldLabel : _('ID_DEFAULT_LANGUAGE'), xtype : 'label', - width : 260 + width : 260, + hidden : !(LANGUAGE_MANAGEMENT == 1) } ] }); @@ -1397,10 +1403,12 @@ function loadData() }); comboRole.store.load(); + /*----------------------------------********---------------------------------*/ comboLanguage.store.on("load", function (store) { comboLanguage.setValue(store.getAt(1).get("LAN_ID")); }); comboLanguage.store.load(); + /*----------------------------------********---------------------------------*/ comboDefaultMainMenuOption.store.on("load", function (store) { comboDefaultMainMenuOption.setValue(store.getAt(0).get("id")); @@ -1465,8 +1473,8 @@ function loadUserData() Ext.getCmp("USR_STATUS2").setText(_('ID_' + data.user.USR_STATUS)); Ext.getCmp("USR_ROLE2").setText(data.user.USR_ROLE_NAME); Ext.getCmp("USR_TIME_ZONE2").setText((data.user.USR_TIME_ZONE != "")? data.user.USR_TIME_ZONE : SYSTEM_TIME_ZONE); - Ext.getCmp("USR_DEFAULT_LANG2").setText(data.user.USR_DEFAULT_LANG_NAME); /*----------------------------------********---------------------------------*/ + Ext.getCmp("USR_DEFAULT_LANG2").setText(data.user.USR_DEFAULT_LANG_NAME); Ext.getCmp("USR_COST_BY_HOUR2").setText(data.user.USR_COST_BY_HOUR); Ext.getCmp("USR_UNIT_COST2").setText(data.user.USR_UNIT_COST); /*----------------------------------********---------------------------------*/ @@ -1510,9 +1518,11 @@ function loadUserData() cboTimeZone.setValue((data.user.USR_TIME_ZONE != "")? data.user.USR_TIME_ZONE : SYSTEM_TIME_ZONE); + /*----------------------------------********---------------------------------*/ comboLanguage.store.on("load", function (store) { comboLanguage.setValue(data.user.USR_DEFAULT_LANG); }); + /*----------------------------------********---------------------------------*/ if (infoMode) { comboDefaultMainMenuOption.store.on("load", function (store) { @@ -1561,7 +1571,9 @@ function loadUserData() storeRole.load(); + /*----------------------------------********---------------------------------*/ storeLanguage.load(); + /*----------------------------------********---------------------------------*/ storeDefaultMainMenuOption.load(); From 7b13f67addbcde17b63a0c908ca8d802502f9b65 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Thu, 3 Dec 2015 15:54:41 -0400 Subject: [PATCH 06/10] PM-4291 --- .../src/ProcessMaker/BusinessModel/Light/PushMessageIOS.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light/PushMessageIOS.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light/PushMessageIOS.php index f762616e7..4cff8843d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light/PushMessageIOS.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light/PushMessageIOS.php @@ -112,7 +112,7 @@ class PushMessageIOS $fp = stream_socket_client($this->url, $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) { - throw (new \Exception( G::LoadTranslation( 'ID_FAILED' ).': ' ."$err $errstr")); + throw (new \Exception( \G::LoadTranslation( 'ID_FAILED' ).': ' ."$err $errstr")); } else { //echo 'Apple service is online. ' . '
'; } From 06763e1a36588544c4df6f7ceb61d58872da997b Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Thu, 3 Dec 2015 16:00:44 -0400 Subject: [PATCH 07/10] PM-4260: No existe el template por defecto 'alert_message.html' para enviar notificaciones correccion de observaciones --- workflow/engine/classes/class.case.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 11032a42f..e83fe2e92 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5392,7 +5392,21 @@ class Cases $fileTemplate = $pathEmail . $conf["TAS_DEF_MESSAGE_TEMPLATE"]; if (!file_exists($fileTemplate)) { - throw (new Exception("Template file \"$fileTemplate\" does not exist.")); + $tempale = PATH_CORE."templates".PATH_SEP."mails".PATH_SEP."alert_message.html"; + $copied = @copy($tempale,$fileTemplate); + if($copied) { + $dataTemplate = array("prf_filename"=>$conf["TAS_DEF_MESSAGE_TEMPLATE"], + "prf_path"=>$fileTemplate, + "pro_uid"=>$aTaskInfo["PRO_UID"], + "usr_uid"=>"00000000000000000000000000000001", + "prf_uid"=>G::generateUniqueID(), + "prf_type"=>"file", + "prf_create_date"=>date("Y-m-d H:i:s")); + $filesManager = new ProcessMaker\BusinessModel\FilesManager(); + $filesManager->addProcessFilesManagerInDb($dataTemplate); + } else { + throw (new Exception("Template file \"$fileTemplate\" does not exist.")); + } } $sBody = G::replaceDataGridField(file_get_contents($fileTemplate), $aFields, false); From 21660dbf206d5563e8b142558daabc00fc7bce6e Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Thu, 3 Dec 2015 17:05:28 -0400 Subject: [PATCH 08/10] PM-4285-3017 "Es posible entrar al disenador del flujo..." SOLVED --- workflow/engine/controllers/designer.php | 25 +++++++++++++++++-- .../templates/designer/accessDenied.html | 9 +++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 workflow/engine/templates/designer/accessDenied.html diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index 4d9be6067..c2803e051 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -131,10 +131,31 @@ class Designer extends Controller $translation = new Translation(); $translation->generateFileTranslationMafe(); } - + $this->setVar('sys_skin', SYS_SKIN); - $this->setView('designer/index'); + //Verify user + $criteria = new Criteria('workflow'); + + $criteria->addSelectColumn(OauthAccessTokensPeer::ACCESS_TOKEN); + $criteria->addSelectColumn(OauthAccessTokensPeer::USER_ID); + $criteria->add(OauthAccessTokensPeer::ACCESS_TOKEN, $clientToken['access_token'], Criteria::EQUAL); + $rsCriteria = OauthAccessTokensPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $user = new \ProcessMaker\BusinessModel\User(); + + if ($user->checkPermission($row['USER_ID'], 'PM_FACTORY')) { + $this->setView('designer/index'); + } else { + $this->setVar('accessDenied', G::LoadTranslation('ID_ACCESS_DENIED')); + $this->setView('designer/accessDenied'); + } + } + $this->render(); } diff --git a/workflow/engine/templates/designer/accessDenied.html b/workflow/engine/templates/designer/accessDenied.html new file mode 100644 index 000000000..9ffb3625c --- /dev/null +++ b/workflow/engine/templates/designer/accessDenied.html @@ -0,0 +1,9 @@ + + + + + + +

{$accessDenied}

+ + \ No newline at end of file From 933543fd29021f80b17bd923de54d4beae22ba26 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 3 Dec 2015 13:56:52 -0400 Subject: [PATCH 09/10] PM-4286 Notifica despues de derivar un paralelo aun cuando los hilos no terminaron undefined variables fix in del_index --- workflow/engine/classes/class.wsBase.php | 11 ++-- .../classes/model/NotificationDevice.php | 18 ++++++ .../engine/methods/cases/cases_Derivate.php | 59 ++++++++++--------- .../Light/NotificationDevice.php | 14 +++-- 4 files changed, 62 insertions(+), 40 deletions(-) diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index cc65076c0..9181d8db3 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -970,10 +970,10 @@ class wsBase $oCase = new Cases(); $oldFields = $oCase->loadCase( $caseId ); - if($gmail == 1){ - $pathEmail = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP; - }else { - $pathEmail = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP . $oldFields['PRO_UID'] . PATH_SEP; + if($gmail == 1){ + $pathEmail = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP; + }else { + $pathEmail = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP . $oldFields['PRO_UID'] . PATH_SEP; } $fileTemplate = $pathEmail . $sTemplate; G::mk_dir( $pathEmail, 0777, true ); @@ -2512,7 +2512,8 @@ class wsBase $oLight = new \ProcessMaker\BusinessModel\Light(); $nextIndex = $oLight->getInformationDerivatedCase($appFields['APP_UID'], $delIndex); $notificationMobile = new \ProcessMaker\BusinessModel\Light\NotificationDevice(); - $notificationMobile->routeCaseNotification($userId, $_SESSION["PROCESS"], $appdel['TAS_UID'], $appFields, $nextDelegations, $nextIndex); + $notificationMobile->routeCaseNotification($userId, $_SESSION["PROCESS"], $appdel['TAS_UID'], + $appFields, $nextDelegations, $nextIndex, $delIndex); } catch (Exception $e) { \G::log(G::loadTranslation( 'ID_NOTIFICATION_ERROR' ) . '|' . $e->getMessage() , PATH_DATA, "mobile.log"); } diff --git a/workflow/engine/classes/model/NotificationDevice.php b/workflow/engine/classes/model/NotificationDevice.php index 226cfa07b..34d0e24de 100644 --- a/workflow/engine/classes/model/NotificationDevice.php +++ b/workflow/engine/classes/model/NotificationDevice.php @@ -196,4 +196,22 @@ class NotificationDevice extends BaseNotificationDevice { return (( get_class ($oRow) == 'NotificationDevice' )&&(!is_null($oRow))); } + public function isExistNextNotification($app_uid, $del_index) + { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(AppDelegationPeer::APP_UID); + $oCriteria->add(AppDelegationPeer::APP_UID, $app_uid); + $oCriteria->add(AppDelegationPeer::DEL_PREVIOUS, $del_index); + $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oCriteria->setLimit(1); + //execute the query + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + if ($oDataset->next()) { + return true; + } else { + return false; + } + } + } // NotificationDevice diff --git a/workflow/engine/methods/cases/cases_Derivate.php b/workflow/engine/methods/cases/cases_Derivate.php index 8c2bd6e15..6c8de7614 100755 --- a/workflow/engine/methods/cases/cases_Derivate.php +++ b/workflow/engine/methods/cases/cases_Derivate.php @@ -21,34 +21,34 @@ * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ -if (!isset($_SESSION['USER_LOGGED'])) { - G::SendTemporalMessage( 'ID_LOGIN_AGAIN', 'warning', 'labels' ); - die( ''); +if (!isset($_SESSION['USER_LOGGED'])) { + G::SendTemporalMessage( 'ID_LOGIN_AGAIN', 'warning', 'labels' ); + die( ''); } /* Permissions */ switch ($RBAC->userCanAccess( 'PM_CASES' )) { @@ -163,7 +163,8 @@ try { $oLight = new \ProcessMaker\BusinessModel\Light(); $nextIndex = $oLight->getInformationDerivatedCase($appFields['APP_UID'], $appFields['DEL_INDEX']); $notificationMobile = new \ProcessMaker\BusinessModel\Light\NotificationDevice(); - $notificationMobile->routeCaseNotification($_SESSION['USER_LOGGED'], $_SESSION['PROCESS'], $_SESSION['TASK'], $appFields, $_POST['form']['TASKS'], $nextIndex); + $notificationMobile->routeCaseNotification($_SESSION['USER_LOGGED'], $_SESSION['PROCESS'], $_SESSION['TASK'], + $appFields, $_POST['form']['TASKS'], $nextIndex, $appFields['DEL_INDEX']); } catch (Exception $e) { \G::log(G::loadTranslation( 'ID_NOTIFICATION_ERROR' ) . '|' . $e->getMessage() , PATH_DATA, "mobile.log"); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php index a38bde7f9..fd885fd57 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php @@ -147,7 +147,8 @@ class NotificationDevice * @author Ronald Quenta * */ - public function routeCaseNotification($currentUserId, $processId, $currentTaskId, $appFields, $aTasks, $nextIndex) + public function routeCaseNotification($currentUserId, $processId, $currentTaskId, $appFields, $aTasks, + $nextIndex, $currentDelIndex) { try { $response = array(); @@ -166,7 +167,7 @@ class NotificationDevice $delIndex = null; foreach ($nextIndex as $nIndex) { - if($aTask['TAS_UID'] == $nIndex['TAS_UID']){ + if ($aTask['TAS_UID'] == $nIndex['TAS_UID']) { $delIndex = $nIndex['DEL_INDEX']; break; } @@ -184,10 +185,9 @@ class NotificationDevice ); if ($userIds) { - $oNoti = new \NotificationDevice(); $devices = array(); - if (is_array($userIds)){ + if (is_array($userIds)) { $devices = $oNoti->loadUsersArrayId($userIds); } else { $devices = $oNoti->loadByUsersId($userIds); @@ -210,13 +210,15 @@ class NotificationDevice break; } } - if (count($devicesAppleIds) > 0) { + $isExistNextNotifications = $oNoti->isExistNextNotification($appFields['APP_UID'], + $currentDelIndex); + if (count($devicesAppleIds) > 0 && $isExistNextNotifications) { $oNotification = new PushMessageIOS(); $oNotification->setSettingNotification(); $oNotification->setDevices($devicesAppleIds); $response['apple'] = $oNotification->send($message, $data); } - if (count($devicesAndroidIds) > 0) { + if (count($devicesAndroidIds) > 0 && $isExistNextNotifications) { $oNotification = new PushMessageAndroid(); $oNotification->setSettingNotification(); $oNotification->setDevices($devicesAndroidIds); From de4c22a704c30deef95b0c994549d7ef5b1ae07e Mon Sep 17 00:00:00 2001 From: Julio Cesar Laura Date: Fri, 4 Dec 2015 11:31:44 -0400 Subject: [PATCH 10/10] Validation added for issue found debuging Valeo process --- workflow/engine/classes/class.derivation.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 16659f03c..cc9806e35 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -1063,6 +1063,9 @@ class Derivation $this->case->closeAllDelegations( $currentDelegation['APP_UID'] ); $this->case->closeAllThreads( $currentDelegation['APP_UID'] ); //I think we need to change the APP_STATUS to completed, + if (!isset($nextDel['ROU_CONDITION'])) { + $nextDel['ROU_CONDITION'] = ''; + } if (isset($nextDel["TAS_UID_DUMMY"]) ) { $taskDummy = TaskPeer::retrieveByPK($nextDel["TAS_UID_DUMMY"]); if (preg_match("/^(?:END-MESSAGE-EVENT|END-EMAIL-EVENT)$/", $taskDummy->getTasType())) {