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;
}
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);
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())) {
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'];
}
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/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/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/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/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..51e1c5472 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
];
@@ -216,7 +231,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 +260,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/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;
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);
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. ' . '
';
}
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/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
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();
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;