From d00b8a0dff3d557962931f94f21a5448e28149b8 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 15 May 2015 13:08:27 -0400 Subject: [PATCH 01/19] PM-31 Refactor output document / 0016759: Output Document pmGrids 0016760: Output Document Variables Se agrego "Grid variables" a las opciones de Type Variable en el pmVariablePicker, que despliega los campos de las grillas que tiene en el proceso --- .../engine/classes/class.xmlfield_InputPM.php | 63 ++++++++++++++----- workflow/engine/methods/controls/varsAjax.php | 1 + .../methods/processes/processes_Ajax.php | 16 +++-- 3 files changed, 59 insertions(+), 21 deletions(-) diff --git a/workflow/engine/classes/class.xmlfield_InputPM.php b/workflow/engine/classes/class.xmlfield_InputPM.php index e44b35d38..5632e4f73 100755 --- a/workflow/engine/classes/class.xmlfield_InputPM.php +++ b/workflow/engine/classes/class.xmlfield_InputPM.php @@ -373,11 +373,11 @@ class XmlForm_Field_hours extends XmlForm_Field_SimpleText * @param eter boolean $bSystemVars * @return array */ -function getDynaformsVars ($sProcessUID, $bSystemVars = true, $bIncMulSelFields = 0) +function getDynaformsVars ($sProcessUID, $typeVars = 'all', $bIncMulSelFields = 0) { $aFields = array (); $aFieldsNames = array (); - if ($bSystemVars) { + if ($typeVars == 'system' || $typeVars == 'all') { $aAux = G::getSystemConstants(); foreach ($aAux as $sName => $sValue) { $aFields[] = array ('sName' => $sName,'sType' => 'system','sLabel' => G::LoadTranslation('ID_TINY_SYSTEM_VARIABLES')); @@ -401,21 +401,52 @@ function getDynaformsVars ($sProcessUID, $bSystemVars = true, $bIncMulSelFields $oDataset->next(); $row = $oDataset->getRow(); if (isset($row["PRJ_UID"])) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_UID); - $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_NAME); - $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_FIELD_TYPE); - $oCriteria->add(ProcessVariablesPeer::PRJ_UID, $sProcessUID); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - while ($oDataset->next()) { - $row = $oDataset->getRow(); - array_push($aFields, array( - "sName" => $row["VAR_NAME"], - "sType" => $row["VAR_FIELD_TYPE"], - "sLabel" => $row["VAR_NAME"] . " [" . $row["VAR_FIELD_TYPE"] . "]" - )); + if($typeVars == 'process' || $typeVars == 'all') { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_UID); + $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_NAME); + $oCriteria->addSelectColumn(ProcessVariablesPeer::VAR_FIELD_TYPE); + $oCriteria->add(ProcessVariablesPeer::PRJ_UID, $sProcessUID); + $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($oDataset->next()) { + $row = $oDataset->getRow(); + array_push($aFields, array( + "sName" => $row["VAR_NAME"], + "sType" => $row["VAR_FIELD_TYPE"], + "sLabel" => $row["VAR_NAME"] . " [" . $row["VAR_FIELD_TYPE"] . "]" + )); + } + } + if($typeVars == 'grid' || $typeVars == 'all') { + $oC = new Criteria( 'workflow' ); + $oC->addSelectColumn( DynaformPeer::DYN_CONTENT ); + $oC->add( DynaformPeer::PRO_UID, $sProcessUID ); + $oC->add( DynaformPeer::DYN_TYPE, 'xmlform' ); + $oData = DynaformPeer::doSelectRS( $oC ); + $oData->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oData->next(); + while ($aRowd = $oData->getRow()) { + $dynaform = G::json_decode($aRowd['DYN_CONTENT'],true); + $items = $dynaform['items'][0]['items']; + foreach($items as $key => $val){ + if($val[0]['type'] == 'grid'){ + if(sizeof($val[0]['columns'])) { + $columns = $val[0]['columns']; + foreach($columns as $column) { + array_push($aFields, array( + "sName" => $column['name'], + "sType" => $column['dataType'], + "sLabel" => $column['name'] . " [" . $column['dataType']. "]" + )); + } + } + } + } + $oData->next(); + } } + } else { require_once 'classes/model/Dynaform.php'; $oCriteria = new Criteria( 'workflow' ); diff --git a/workflow/engine/methods/controls/varsAjax.php b/workflow/engine/methods/controls/varsAjax.php index a00050846..157246242 100755 --- a/workflow/engine/methods/controls/varsAjax.php +++ b/workflow/engine/methods/controls/varsAjax.php @@ -66,6 +66,7 @@ $html .= '     '; $html .= ''; diff --git a/workflow/engine/methods/processes/processes_Ajax.php b/workflow/engine/methods/processes/processes_Ajax.php index 17a4ab221..cbb76bd70 100755 --- a/workflow/engine/methods/processes/processes_Ajax.php +++ b/workflow/engine/methods/processes/processes_Ajax.php @@ -806,15 +806,21 @@ try { G::LoadClass('xmlfield_InputPM'); $proUid = isset($_REQUEST['process']) ? $_REQUEST['process'] : ''; $queryText = isset($_REQUEST['queryText']) ? $_REQUEST['queryText'] : ''; - if ($_REQUEST['type'] == 'system') { - $isSystem = true; - } else { - $isSystem = false; + switch($_REQUEST['type']) { + case 'system'; + $typeVars = $_REQUEST['type']; + break; + case 'process'; + $typeVars = $_REQUEST['type']; + break; + case 'grid'; + $typeVars = $_REQUEST['type']; + break; } if ($_REQUEST['type'] == 'all') { $aFields = getDynaformsVars($proUid); } else { - $aFields = getDynaformsVars($proUid, $isSystem, isset($_REQUEST['bIncMulSelFields']) ? $_REQUEST['bIncMulSelFields'] : 1); + $aFields = getDynaformsVars($proUid, $typeVars, isset($_REQUEST['bIncMulSelFields']) ? $_REQUEST['bIncMulSelFields'] : 1); } $aVariables = array(); From eabfe30c0c0b4a3a7586bf05327bc908f6b424b2 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 15 May 2015 14:44:27 -0400 Subject: [PATCH 02/19] PM-31 Refactor output document / 0016759: Output Document pmGrids 0016760: Output Document Variables Se agrego "Grid variables" a las opciones de Type Variable en el pmVariablePicker, que despliega los campos de las grillas que tiene en el proceso --- .../engine/classes/class.xmlfield_InputPM.php | 24 ++++++++++--------- workflow/engine/methods/controls/varsAjax.php | 13 +++++++++- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/workflow/engine/classes/class.xmlfield_InputPM.php b/workflow/engine/classes/class.xmlfield_InputPM.php index 5632e4f73..797ee68ec 100755 --- a/workflow/engine/classes/class.xmlfield_InputPM.php +++ b/workflow/engine/classes/class.xmlfield_InputPM.php @@ -428,17 +428,19 @@ function getDynaformsVars ($sProcessUID, $typeVars = 'all', $bIncMulSelFields = $oData->next(); while ($aRowd = $oData->getRow()) { $dynaform = G::json_decode($aRowd['DYN_CONTENT'],true); - $items = $dynaform['items'][0]['items']; - foreach($items as $key => $val){ - if($val[0]['type'] == 'grid'){ - if(sizeof($val[0]['columns'])) { - $columns = $val[0]['columns']; - foreach($columns as $column) { - array_push($aFields, array( - "sName" => $column['name'], - "sType" => $column['dataType'], - "sLabel" => $column['name'] . " [" . $column['dataType']. "]" - )); + if(is_array($dynaform) && sizeof($dynaform)) { + $items = $dynaform['items'][0]['items']; + foreach($items as $key => $val){ + if($val[0]['type'] == 'grid'){ + if(sizeof($val[0]['columns'])) { + $columns = $val[0]['columns']; + foreach($columns as $column) { + array_push($aFields, array( + "sName" => $column['name'], + "sType" => $column['dataType'], + "sLabel" => $column['name'] . " [" . $column['dataType']. "]" + )); + } } } } diff --git a/workflow/engine/methods/controls/varsAjax.php b/workflow/engine/methods/controls/varsAjax.php index 157246242..96aa71c3f 100755 --- a/workflow/engine/methods/controls/varsAjax.php +++ b/workflow/engine/methods/controls/varsAjax.php @@ -66,7 +66,18 @@ $html .= '     '; $html .= ''; From d1a7e5c9ab283339865ec945fc32277c4cc6b2ec Mon Sep 17 00:00:00 2001 From: dheeyi Date: Thu, 21 May 2015 15:01:53 -0400 Subject: [PATCH 03/19] PM-2325 0017197: Unneccessary vertical scroll bar in Step 5 of the Manual Installer Wizard --- workflow/engine/skinEngine/base/css/xtheme-gray.css | 1 + workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css | 2 ++ 2 files changed, 3 insertions(+) diff --git a/workflow/engine/skinEngine/base/css/xtheme-gray.css b/workflow/engine/skinEngine/base/css/xtheme-gray.css index 947474ffb..17debd275 100755 --- a/workflow/engine/skinEngine/base/css/xtheme-gray.css +++ b/workflow/engine/skinEngine/base/css/xtheme-gray.css @@ -304,6 +304,7 @@ ul.x-tab-strip-bottom{ .x-fieldset { border-color:#CCCCCC; + margin-top: -5px; } .x-fieldset legend { diff --git a/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css b/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css index 5eadb6da4..5d7446257 100644 --- a/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css +++ b/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css @@ -431,6 +431,7 @@ textarea.x-form-inner-invalid { } .x-fieldset { border-color: #CCCCCC; + margin-top: -5px; } .x-fieldset legend { font: bold 11px "Open Sans", Tahoma, sans-serif, MiscFixed; @@ -1465,6 +1466,7 @@ a.x-menu-item { } .x-panel-body .x-panel-body { border: #dddddd 1px solid; + overflow: hidden !important; } .x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { From 210b4c4883a3b45c29a0dd2098030484ad16af6e Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Thu, 21 May 2015 15:19:42 -0400 Subject: [PATCH 04/19] PM-2795: I solved the problem with port --- workflow/engine/bin/tasks/cliWorkspaces.php | 4 +++- workflow/engine/classes/class.wsTools.php | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 103e70fa2..f2bc099f6 100755 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -75,6 +75,7 @@ CLI::taskOpt("multiple", "Restore from multiple compresed enumerated files.", "m CLI::taskOpt("workspace", "Select which workspace to restore if multiple workspaces are present in the archive.", "w:", "workspace="); CLI::taskOpt("lang", "You must specify language on which rebuild of the case cache list builder will be done; if you don't specify this, it will use 'en' by default", "l:","lang="); +CLI::taskOpt("port", "You must specify mysql port.", "p:"); CLI::taskRun("run_workspace_restore"); CLI::taskName('cacheview-repair'); @@ -551,6 +552,7 @@ function run_workspace_restore($args, $opts) { } $info = array_key_exists("info", $opts); $lang = array_key_exists("lang", $opts) ? $opts['lang'] : 'en'; + $port = array_key_exists("port", $opts) ? $opts['port'] : ''; if ($info) { workspaceTools::getBackupInfo($filename); } else { @@ -578,7 +580,7 @@ function run_workspace_restore($args, $opts) { CLI::error("Please, you should use -m parameter to restore them.\n"); return; } - workspaceTools::restore($filename, $workspace, $dstWorkspace, $overwrite, $lang); + workspaceTools::restore($filename, $workspace, $dstWorkspace, $overwrite, $lang, $port ); } } } diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 23ff0a97c..730d4e785 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -1434,7 +1434,7 @@ class workspaceTools * @param string $newWorkspaceName if defined, supplies the name for the * workspace to restore to */ - static public function restore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true, $lang = 'en') + static public function restore($filename, $srcWorkspace, $dstWorkspace = null, $overwrite = true, $lang = 'en', $port = '') { G::LoadThirdParty('pear/Archive', 'Tar'); $backup = new Archive_Tar($filename); @@ -1553,6 +1553,9 @@ class workspaceTools CLI::logging(CLI::error("Could not get the shared folder permissions, not changing workspace permissions") . "\n"); } list ($dbHost, $dbUser, $dbPass) = @explode(SYSTEM_HASH, G::decrypt(HASH_INSTALLATION, SYSTEM_HASH)); + if($port != ''){ + $dbHost = $dbHost.$port; + } $aParameters = array('dbHost'=>$dbHost,'dbUser'=>$dbUser,'dbPass'=>$dbPass); CLI::logging("> Connecting to system database in '$dbHost'\n"); $link = mysql_connect($dbHost, $dbUser, $dbPass); @@ -2011,6 +2014,7 @@ class workspaceTools $data = $row; $data["DEL_INDEX"] = $row["APP_DEL_INDEX"]; $listPaused = new ListPaused(); + $listPaused ->remove($row["APP_UID"],$row["APP_DEL_INDEX"],$data); $listPaused->setDeleted(false); $listPaused->create($data); } From f46a7c322a131c9d0cb901d53ccda5e4bc4c794d Mon Sep 17 00:00:00 2001 From: dheeyi Date: Thu, 21 May 2015 15:53:51 -0400 Subject: [PATCH 05/19] PM-2654 --- workflow/engine/skinEngine/base/extJsInitLoad.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/skinEngine/base/extJsInitLoad.html b/workflow/engine/skinEngine/base/extJsInitLoad.html index 3aaf2fdc9..e6f66b1a7 100755 --- a/workflow/engine/skinEngine/base/extJsInitLoad.html +++ b/workflow/engine/skinEngine/base/extJsInitLoad.html @@ -15,7 +15,7 @@ } #loading{ position:absolute; - left:40%; + left:46%; top:37%; padding:2px; z-index:20001; From 7a823492cfff3297dc1e9316e51eaaa4a2cc1178 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Fri, 22 May 2015 10:07:44 -0400 Subject: [PATCH 06/19] PM-2791: Replace TYPE by ENGINE in sql file --- workflow/engine/classes/class.wsTools.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 730d4e785..76e227e65 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -1303,6 +1303,8 @@ class workspaceTools mysql_select_db($database); $script = file_get_contents($filename); + //Replace TYPE by ENGINE + $script = preg_replace('/\)TYPE\=|\)\sTYPE\=/', ')ENGINE=', $script); $lines = explode("\n", $script); $previous = null; $insert = false; From 2799f20d4665c22a48ab2a69a8f295ae1429472a Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 22 May 2015 13:19:52 -0400 Subject: [PATCH 07/19] PM-2325 --- workflow/engine/skinEngine/base/css/xtheme-gray.css | 1 + workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css | 1 + 2 files changed, 2 insertions(+) diff --git a/workflow/engine/skinEngine/base/css/xtheme-gray.css b/workflow/engine/skinEngine/base/css/xtheme-gray.css index 17debd275..f7b78432f 100755 --- a/workflow/engine/skinEngine/base/css/xtheme-gray.css +++ b/workflow/engine/skinEngine/base/css/xtheme-gray.css @@ -221,6 +221,7 @@ ul.x-tab-strip-bottom{ .x-editor .x-form-check-wrap { background-color:#fff; + overflow:hidden !important; } .x-form-field-wrap .x-form-trigger{ diff --git a/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css b/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css index 5d7446257..39f78016e 100644 --- a/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css +++ b/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css @@ -364,6 +364,7 @@ textarea.x-form-field { } .x-editor .x-form-check-wrap { background-color: #fff; + overflow:hidden !important; } .x-form-field-wrap .x-form-trigger { background-image: url(/skins/neoclassic/images/ext/gray/form/trigger.gif); From a8ddba2dbcacf0d7f3a6e3196b14dc32009544e0 Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 22 May 2015 15:03:46 -0400 Subject: [PATCH 08/19] PM-2325 --- workflow/engine/skinEngine/base/css/xtheme-gray.css | 5 ++++- workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/workflow/engine/skinEngine/base/css/xtheme-gray.css b/workflow/engine/skinEngine/base/css/xtheme-gray.css index f7b78432f..0b76c5990 100755 --- a/workflow/engine/skinEngine/base/css/xtheme-gray.css +++ b/workflow/engine/skinEngine/base/css/xtheme-gray.css @@ -219,9 +219,12 @@ ul.x-tab-strip-bottom{ color: #333; } +.x-form-check-wrap { + overflow: hidden !important; +} + .x-editor .x-form-check-wrap { background-color:#fff; - overflow:hidden !important; } .x-form-field-wrap .x-form-trigger{ diff --git a/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css b/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css index 39f78016e..84b5d1bdd 100644 --- a/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css +++ b/workflow/engine/skinEngine/neoclassic/css/xtheme-gray.css @@ -362,9 +362,13 @@ textarea.x-form-field { border-bottom: 1px solid #dddddd; color: #333; } + +.x-form-check-wrap { + overflow: hidden !important; +} + .x-editor .x-form-check-wrap { background-color: #fff; - overflow:hidden !important; } .x-form-field-wrap .x-form-trigger { background-image: url(/skins/neoclassic/images/ext/gray/form/trigger.gif); From dd4d24187599fe8ae9154f21d318407d6f862e5a Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 22 May 2015 15:35:27 -0400 Subject: [PATCH 09/19] PM-2654 --- workflow/engine/skinEngine/base/extJsInitLoad.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/skinEngine/base/extJsInitLoad.html b/workflow/engine/skinEngine/base/extJsInitLoad.html index e6f66b1a7..4c8ad2f90 100755 --- a/workflow/engine/skinEngine/base/extJsInitLoad.html +++ b/workflow/engine/skinEngine/base/extJsInitLoad.html @@ -15,7 +15,7 @@ } #loading{ position:absolute; - left:46%; + left:45%; top:37%; padding:2px; z-index:20001; From a20ca8983734dae290bedbfdfe0bea6f7f8309a9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Fri, 22 May 2015 16:07:42 -0400 Subject: [PATCH 10/19] PM-2765 "Processmaker Email Servers Disabled" SOLVED > Code Isuue: Processmaker Email Servers Disabled > Solution: Se agrega validacion cuando se realizar el upgrade de la version 2.5.2 a 3.0 community de processmaker, la configuracion de correo que se tenia en la version 2.5.2, se visualizar en la version 3.0 mostrando como unico registro, el mismo podra ser editado. --- workflow/engine/bin/tasks/cliWorkspaces.php | 52 +----------- workflow/engine/classes/class.wsTools.php | 94 ++++++++++++++++++--- 2 files changed, 85 insertions(+), 61 deletions(-) diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 103e70fa2..9a3d3bdd1 100755 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -327,6 +327,7 @@ function database_upgrade($command, $args) { print_r("Checking database in ".pakeColor::colorize($workspace->name, "INFO")."\n"); else print_r("Upgrading database in ".pakeColor::colorize($workspace->name, "INFO")."\n"); + try { $changes = $workspace->upgradeDatabase($checkOnly); if ($changes != false) { @@ -346,51 +347,6 @@ function database_upgrade($command, $args) { echo "> Error: ".CLI::error($e->getMessage()) . "\n"; } } - - //There records in table "EMAIL_SERVER" - $criteria = new Criteria("workflow"); - - $criteria->addSelectColumn(EmailServerPeer::MESS_UID); - $criteria->setOffset(0); - $criteria->setLimit(1); - - $rsCriteria = EmailServerPeer::doSelectRS($criteria); - - if (!$rsCriteria->next()) { - //Insert the first record - $emailSever = new \ProcessMaker\BusinessModel\EmailServer(); - - $emailConfiguration = System::getEmailConfiguration(); - - if (count($emailConfiguration) > 0) { - $arrayData = array(); - - $arrayData["MESS_ENGINE"] = $emailConfiguration["MESS_ENGINE"]; - $arrayData["MESS_SERVER"] = $emailConfiguration["MESS_SERVER"]; - $arrayData["MESS_PORT"] = (int)($emailConfiguration["MESS_PORT"]); - $arrayData["MESS_RAUTH"] = (int)($emailConfiguration["MESS_RAUTH"]); - $arrayData["MESS_ACCOUNT"] = $emailConfiguration["MESS_ACCOUNT"]; - $arrayData["MESS_PASSWORD"] = $emailConfiguration["MESS_PASSWORD"]; - $arrayData["MESS_FROM_MAIL"] = isset($emailConfiguration["MESS_FROM_MAIL"]) ? $emailConfiguration["MESS_FROM_MAIL"] : ""; - $arrayData["MESS_FROM_NAME"] = isset($emailConfiguration["MESS_FROM_NAME"]) ? $emailConfiguration["MESS_FROM_NAME"] : ""; - $arrayData["SMTPSECURE"] = $emailConfiguration["SMTPSecure"]; - $arrayData["MESS_TRY_SEND_INMEDIATLY"] = (int)($emailConfiguration["MESS_TRY_SEND_INMEDIATLY"]); - $arrayData["MAIL_TO"] = $emailConfiguration["MAIL_TO"]; - $arrayData["MESS_DEFAULT"] = (isset($emailConfiguration["MESS_ENABLED"]) && $emailConfiguration["MESS_ENABLED"] . "" == "1")? 1 : 0; - - $arrayData = $emailSever->create($arrayData); - } else { - /*----------------------------------********---------------------------------*/ - if (true) { - // - } else { - /*----------------------------------********---------------------------------*/ - $arrayData = $emailSever->create2(array("MESS_ENGINE" => "MAIL")); - /*----------------------------------********---------------------------------*/ - } - /*----------------------------------********---------------------------------*/ - } - } } function delete_app_from_table($con, $tableName, $appUid, $col="APP_UID") { @@ -680,7 +636,7 @@ function run_check_workspace_disabled_code($args, $opts) } } -function migrate_new_cases_lists($command, $args) { +function migrate_new_cases_lists($command, $args) { $workspaces = get_workspaces_from_args($args); $checkOnly = (strcmp($command, "migrate") == 0); foreach ($workspaces as $workspace) { @@ -701,11 +657,11 @@ function migrate_new_cases_lists($command, $args) { $changes = $workspace->listFirstExecution('check'); if ($workspace->onedb && $changes != true) { $workspace->migrateList($workspace->name); - } + } if ($changes) { if ($checkOnly) { echo "-> List tables are done\n"; - } + } } else { echo "> List tables are done\n"; } diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 23ff0a97c..92c3c1b46 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -781,7 +781,75 @@ class workspaceTools $this->upgradeSchema( $systemSchema ); $this->upgradeSchema( $systemSchemaRbac, false, true, $onedb ); // perform Upgrade to Rbac $this->upgradeData(); + + //There records in table "EMAIL_SERVER" + $criteria = new Criteria("workflow"); + + $criteria->addSelectColumn(EmailServerPeer::MESS_UID); + $criteria->setOffset(0); + $criteria->setLimit(1); + + $rsCriteria = EmailServerPeer::doSelectRS($criteria); + + if (!$rsCriteria->next()) { + //Insert the first record + $arrayData = array(); + + $emailSever = new \ProcessMaker\BusinessModel\EmailServer(); + $emailConfiguration = System::getEmailConfiguration(); + + if (count($emailConfiguration) > 0) { + $arrayData["MESS_ENGINE"] = $emailConfiguration["MESS_ENGINE"]; + + switch ($emailConfiguration["MESS_ENGINE"]) { + case "PHPMAILER": + $arrayData["MESS_SERVER"] = $emailConfiguration["MESS_SERVER"]; + $arrayData["MESS_PORT"] = (int)($emailConfiguration["MESS_PORT"]); + $arrayData["MESS_RAUTH"] = (is_numeric($emailConfiguration["MESS_RAUTH"]))? (int)($emailConfiguration["MESS_RAUTH"]) : (($emailConfiguration["MESS_RAUTH"] . "" == "true")? 1 : 0); + $arrayData["MESS_ACCOUNT"] = $emailConfiguration["MESS_ACCOUNT"]; + $arrayData["MESS_PASSWORD"] = $emailConfiguration["MESS_PASSWORD"]; + $arrayData["MESS_FROM_MAIL"] = (isset($emailConfiguration["MESS_FROM_MAIL"]))? $emailConfiguration["MESS_FROM_MAIL"] : ""; + $arrayData["MESS_FROM_NAME"] = (isset($emailConfiguration["MESS_FROM_NAME"]))? $emailConfiguration["MESS_FROM_NAME"] : ""; + $arrayData["SMTPSECURE"] = $emailConfiguration["SMTPSecure"]; + $arrayData["MESS_TRY_SEND_INMEDIATLY"] = (isset($emailConfiguration["MESS_TRY_SEND_INMEDIATLY"]) && ($emailConfiguration["MESS_TRY_SEND_INMEDIATLY"] . "" == "true" || $emailConfiguration["MESS_TRY_SEND_INMEDIATLY"] . "" == "1"))? 1 : 0; + $arrayData["MAIL_TO"] = $emailConfiguration["MAIL_TO"]; + $arrayData["MESS_DEFAULT"] = (isset($emailConfiguration["MESS_ENABLED"]) && $emailConfiguration["MESS_ENABLED"] . "" == "1")? 1 : 0; + break; + case "MAIL": + $arrayData["MESS_SERVER"] = ""; + $arrayData["MESS_FROM_MAIL"] = (isset($emailConfiguration["MESS_FROM_MAIL"]))? $emailConfiguration["MESS_FROM_MAIL"] : ""; + $arrayData["MESS_FROM_NAME"] = (isset($emailConfiguration["MESS_FROM_NAME"]))? $emailConfiguration["MESS_FROM_NAME"] : ""; + $arrayData["MESS_TRY_SEND_INMEDIATLY"] = (isset($emailConfiguration["MESS_TRY_SEND_INMEDIATLY"]) && ($emailConfiguration["MESS_TRY_SEND_INMEDIATLY"] . "" == "true" || $emailConfiguration["MESS_TRY_SEND_INMEDIATLY"] . "" == "1"))? 1 : 0; + $arrayData["MESS_ACCOUNT"] = ""; + $arrayData["MESS_PASSWORD"] = ""; + $arrayData["MAIL_TO"] = (isset($emailConfiguration["MAIL_TO"]))? $emailConfiguration["MAIL_TO"] : ""; + $arrayData["MESS_DEFAULT"] = (isset($emailConfiguration["MESS_ENABLED"]) && $emailConfiguration["MESS_ENABLED"] . "" == "1")? 1 : 0; + break; + } + + $arrayData = $emailSever->create($arrayData); + } else { + /*----------------------------------********---------------------------------*/ + if (true) { + // + } else { + /*----------------------------------********---------------------------------*/ + $arrayData["MESS_ENGINE"] = "MAIL"; + $arrayData["MESS_SERVER"] = ""; + $arrayData["MESS_ACCOUNT"] = ""; + $arrayData["MESS_PASSWORD"] = ""; + $arrayData["MAIL_TO"] = ""; + $arrayData["MESS_DEFAULT"] = 1; + + $arrayData = $emailSever->create2($arrayData); + /*----------------------------------********---------------------------------*/ + } + /*----------------------------------********---------------------------------*/ + } + } + p11835::execute(); + return true; } @@ -1886,7 +1954,7 @@ class workspaceTools $users = new Users(); G::LoadClass("case"); $case = new Cases(); - + //Select data CANCELLED $canCriteria = $appCache->getSelAllColumns(); $canCriteria->add(AppCacheViewPeer::APP_STATUS, "CANCELLED", CRITERIA::EQUAL); @@ -1902,7 +1970,7 @@ class workspaceTools $listCanceled->create($row); } CLI::logging("> Completed table LIST_CANCELED\n"); - + //Select data COMPLETED $comCriteria = $appCache->getSelAllColumns(); $comCriteria->add(AppCacheViewPeer::APP_STATUS, "COMPLETED", CRITERIA::EQUAL); @@ -1918,7 +1986,7 @@ class workspaceTools $listCompleted->create($row); } CLI::logging("> Completed table LIST_COMPLETED\n"); - + //Select data TO_DO OR DRAFT $inbCriteria = $appCache->getSelAllColumns(); $rsCriteria = AppCacheViewPeer::doSelectRS($inbCriteria); @@ -1967,14 +2035,14 @@ class workspaceTools $listParticipatedLast = new ListParticipatedLast(); $listParticipatedLast->refresh($row); } - + } CLI::logging("> Completed table LIST_INBOX\n"); //With this List is populated the LIST_PARTICIPATED_HISTORY and LIST_PARTICIPATED_LAST CLI::logging("> Completed table LIST_PARTICIPATED_HISTORY\n"); CLI::logging("> Completed table LIST_PARTICIPATED_LAST\n"); - + //Select data TO_DO OR DRAFT CASES CREATED BY AN USER $myiCriteria = $appCache->getSelAllColumns(); $myiCriteria->add(AppCacheViewPeer::DEL_INDEX, "1", CRITERIA::EQUAL); @@ -1982,14 +2050,14 @@ class workspaceTools $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); //Insert new data LIST_MY_INBOX while ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); + $row = $rsCriteria->getRow(); $listMyInbox = new ListMyInbox(); $listMyInbox ->remove($row["APP_UID"],$row["USR_UID"]); $listMyInbox->setDeleted(false); $listMyInbox->create($row); } CLI::logging("> Completed table LIST_MY_INBOX\n"); - + //Select data PAUSED $delaycriteria = new Criteria("workflow"); $delaycriteria->addSelectColumn(AppDelayPeer::APP_UID); @@ -2015,7 +2083,7 @@ class workspaceTools $listPaused->create($data); } CLI::logging("> Completed table LIST_PAUSED\n"); - + //Select and Insert LIST_UNASSIGNED $unaCriteria = $appCache->getSelAllColumns(); $unaCriteria->add(AppCacheViewPeer::USR_UID, "", CRITERIA::EQUAL); @@ -2024,12 +2092,12 @@ class workspaceTools $del = new ListUnassignedPeer(); $del->doDeleteAll(); $del = new ListUnassignedGroupPeer(); - $del->doDeleteAll(); + $del->doDeleteAll(); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $listUnassigned = new ListUnassigned(); - $unaUid = $listUnassigned->generateData($row["APP_UID"],$row["PREVIOUS_USR_UID"]); - } + $unaUid = $listUnassigned->generateData($row["APP_UID"],$row["PREVIOUS_USR_UID"]); + } CLI::logging("> Completed table LIST_UNASSIGNED\n"); CLI::logging("> Completed table LIST_UNASSIGNED_GROUP\n"); @@ -2070,7 +2138,7 @@ class workspaceTools } /** - * This function checks if List tables are going to migrated + * This function checks if List tables are going to migrated * * return boolean value */ @@ -2109,6 +2177,6 @@ class workspaceTools default: return true; } - } + } } From 5b46d3e65a1bcfca30104bc4e5feb8b469564a1e Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 22 May 2015 16:21:55 -0400 Subject: [PATCH 11/19] PM-31 Refactor output document / 0016759: Output Document pmGrids 0016760: Output Document Variables Se agrego "Grid variables" a las opciones de Type Variable en el pmVariablePicker, que despliega los campos de las grillas que tiene en el proceso --- .../engine/classes/class.xmlfield_InputPM.php | 6 +-- workflow/engine/js/controls/variablePicker.js | 47 +++++++++++++++---- workflow/engine/methods/controls/varsAjax.php | 18 ++++++- 3 files changed, 58 insertions(+), 13 deletions(-) diff --git a/workflow/engine/classes/class.xmlfield_InputPM.php b/workflow/engine/classes/class.xmlfield_InputPM.php index 797ee68ec..1b9e334d6 100755 --- a/workflow/engine/classes/class.xmlfield_InputPM.php +++ b/workflow/engine/classes/class.xmlfield_InputPM.php @@ -414,7 +414,7 @@ function getDynaformsVars ($sProcessUID, $typeVars = 'all', $bIncMulSelFields = array_push($aFields, array( "sName" => $row["VAR_NAME"], "sType" => $row["VAR_FIELD_TYPE"], - "sLabel" => $row["VAR_NAME"] . " [" . $row["VAR_FIELD_TYPE"] . "]" + "sLabel" => $row["VAR_FIELD_TYPE"] )); } } @@ -437,8 +437,8 @@ function getDynaformsVars ($sProcessUID, $typeVars = 'all', $bIncMulSelFields = foreach($columns as $column) { array_push($aFields, array( "sName" => $column['name'], - "sType" => $column['dataType'], - "sLabel" => $column['name'] . " [" . $column['dataType']. "]" + "sType" => $column['type'], + "sLabel" => $column['type'] )); } } diff --git a/workflow/engine/js/controls/variablePicker.js b/workflow/engine/js/controls/variablePicker.js index 25d53eb50..c3b39db45 100755 --- a/workflow/engine/js/controls/variablePicker.js +++ b/workflow/engine/js/controls/variablePicker.js @@ -1,19 +1,35 @@ var setVariablePickerJS = function(){ if (document.getElementById('_Var_Form_').addEventListener) // W3C DOM document.getElementById('_Var_Form_').addEventListener('dblclick', function(){ - if (this.getAttribute('displayOption')=='event'){ - e.insertFormVar(this.value.substring(2), this.value.substring(2), 'dyn' ); + if(this.value.substring(0,5) == 'gridt') { + try { + updateEditorContent(this.value.substring(5)); + } catch(err) { + closePluginPopup(); + } } else { - insertFormVar(document.getElementById('selectedField').value, this.value); + if (this.getAttribute('displayOption')=='event'){ + e.insertFormVar(this.value.substring(2), this.value.substring(2), 'dyn' ); + } else { + insertFormVar(document.getElementById('selectedField').value, this.value); + } } }); else if (document.getElementById('selectedField').attachEvent) { // IE DOM var element = document.getElementById('_Var_Form_'); element.attachEvent("ondblclick", function(){ - if (element.displayOption=='event'){ - e.insertFormVar(element.value.substring(2), element.value.substring(2), 'dyn' ); - } else { - insertFormVar(document.getElementById('selectedField').value, element.value); + if(element.value.substring(0,5) == 'gridt') { + try { + updateEditorContent(element.value.substring(5)); + } catch(err) { + closePluginPopup(); + } + } else { + if (element.displayOption=='event'){ + e.insertFormVar(element.value.substring(2), element.value.substring(2), 'dyn' ); + } else { + insertFormVar(document.getElementById('selectedField').value, element.value); + } } }); } @@ -99,7 +115,12 @@ var setVariablePickerJS = function(){ }); leimnud.event.add(document.getElementById('_Var_Form_'), 'change', function(event) { - document.getElementById('selectedVariableLabel').textContent = document.getElementById('_Var_Form_').value + var selectElement = document.getElementById('_Var_Form_'); + if(selectElement.value.substring(0,5) == 'gridt') { + document.getElementById('selectedVariableLabel').textContent = selectElement.options[selectElement.selectedIndex].text; + } else { + document.getElementById('selectedVariableLabel').textContent = selectElement.value + } }); leimnud.event.add(document.getElementById('search'), 'keypress', function(e) { @@ -130,6 +151,7 @@ var setVariablePickerJS = function(){ var list = getVariableList(document.getElementById('search').value, document.getElementById('process').value, document.getElementById('type_variables').value); var combo = document.getElementById("_Var_Form_"); var option = document.createElement('option'); + var isBpmn = document.getElementById('isBpmn').value; for(i=(combo.length-1); i>=0; i--) { @@ -140,8 +162,15 @@ var setVariablePickerJS = function(){ if(list.length>0){ for(i=0; icolumn_name1'; + optionValue = gridValue; + } + } option = document.createElement("OPTION"); - option.value = prefix+list[i].sName; + option.value = optionValue; option.text = prefix+list[i].sName+' ('+list[i].sLabel+')'; combo.add(option); } diff --git a/workflow/engine/methods/controls/varsAjax.php b/workflow/engine/methods/controls/varsAjax.php index 96aa71c3f..8d3acc993 100755 --- a/workflow/engine/methods/controls/varsAjax.php +++ b/workflow/engine/methods/controls/varsAjax.php @@ -74,7 +74,9 @@ $oDataset = ProcessPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflo $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $row = $oDataset->getRow(); +$isBpmn = false; if (isset($row["PRJ_UID"])) { + $isBpmn = true; $html .= ''; } @@ -116,7 +118,14 @@ if (isset($_REQUEST['displayOption'])){ $html .= ''; +if ($isBpmn) { + $valueBpmn = 1; +} else { + $valueBpmn = 0; +} +$html .= ''; + $html .= ''; $html .= ''; $html .= ''; From 913303d1df20d667f4dd8283d0513701abc0b55a Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Mon, 25 May 2015 09:22:48 -0400 Subject: [PATCH 12/19] pm-2731 --- workflow/engine/classes/class.processes.php | 83 +++++-------------- .../methods/processes/processes_Export.php | 19 +++-- .../src/ProcessMaker/Exporter/XmlExporter.php | 38 ++++++++- .../src/ProcessMaker/Services/Api/Project.php | 7 +- workflow/engine/templates/processes/main.js | 9 +- 5 files changed, 80 insertions(+), 76 deletions(-) diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index cf076c52c..e7a575df9 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -969,18 +969,6 @@ class Processes } } - if (isset($oData->taskExtraProperties)) { - foreach ($oData->taskExtraProperties as $key => $value) { - $record = $value; - - if (isset($map[$record["OBJ_UID"]])) { - $newUid = $map[$record["OBJ_UID"]]; - - $oData->taskExtraProperties[$key]["OBJ_UID"] = $newUid; - } - } - } - if (isset($oData->webEntry)) { foreach ($oData->webEntry as $key => $value) { $record = $value; @@ -3642,8 +3630,12 @@ class Processes //Calculating the maximum length of file name $pathLength = strlen( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP ); $length = strlen( $proTitle ) + $pathLength; - if ($length >= 250) { - $proTitle = myTruncate( $proTitle, 250 - $pathLength, '_', '' ); + $limit = 200; + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $limit = 150; + } + if ($length >= $limit) { + $proTitle = $this->truncateName($proTitle); } $index = ''; @@ -3751,25 +3743,9 @@ class Processes } } - //For public files + // for public files $PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP . $data->process['PRO_UID']; - //Get WebEntry file names - $arrayWebEntryFile = array(); - - if (is_dir($PUBLIC_ROOT_PATH)) { - if ($dirh = opendir($PUBLIC_ROOT_PATH)) { - while (($file = readdir($dirh)) !== false) { - if (preg_match("/^(.+)Post\.php$/", $file, $arrayMatch)) { - $arrayWebEntryFile[] = $arrayMatch[1] . ".php"; - $arrayWebEntryFile[] = $arrayMatch[1] . "Post.php"; - } - } - - closedir($dirh); - } - } - //if this process have any mailfile if (is_dir( $PUBLIC_ROOT_PATH )) { //get mail files list from this directory @@ -3777,10 +3753,6 @@ class Processes foreach ($file_list as $filename) { // verify if this filename is a valid file, because it could be . or .. on *nix systems if ($filename != '.' && $filename != '..') { - if (in_array($filename, $arrayWebEntryFile)) { - continue; - } - if (@is_readable( $PUBLIC_ROOT_PATH . PATH_SEP . $filename )) { $sFileName = $PUBLIC_ROOT_PATH . PATH_SEP . $filename; if (file_exists( $sFileName )) { @@ -4126,6 +4098,7 @@ class Processes $fsData = intval( fread( $fp, 9 ) ); //reading the size of $oData $contents = fread( $fp, $fsData ); //reading string $oData + $path = PATH_DYNAFORM . $oData->process['PRO_UID'] . PATH_SEP; if (! is_dir( $path )) { G::verifyPath( $path, true ); @@ -4211,28 +4184,6 @@ class Processes } if (trim( $sIdentifier ) == 'PUBLIC') { - //Get WebEntry file names - $arrayWebEntryFile = array(); - - $fh = fopen($pmFilename, "rb"); - $contents = fread($fh, intval(fread($fh, 9))); //Reading string $oData - - while (!feof($fh)) { - $fsFileName = intval(fread($fh, 9)); //Reading the size of $filename - - if ($fsFileName > 0) { - $sFileName = fread($fh, $fsFileName); //Reading filename string - - if (preg_match("/^(.+)Post\.php$/", $sFileName, $arrayMatch)) { - $arrayWebEntryFile[] = $arrayMatch[1] . ".php"; - $arrayWebEntryFile[] = $arrayMatch[1] . "Post.php"; - } - } - } - - fclose($fh); - - //Public files $sIdentifier = 1; while (! feof( $fp ) && is_numeric( $sIdentifier )) { $sIdentifier = fread( $fp, 9 ); //reading the size of $filename @@ -4245,11 +4196,6 @@ class Processes if ($fsContent > 0) { $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent $newFileName = $pathPublic . $sFileName; - - if (in_array($sFileName, $arrayWebEntryFile)) { - continue; - } - $bytesSaved = @file_put_contents( $newFileName, $fileContent ); if ($bytesSaved != $fsContent) { throw (new Exception( 'Error writing Public file in directory : ' . $pathPublic )); @@ -4262,6 +4208,7 @@ class Processes fclose( $fp ); return true; + } /** @@ -5161,6 +5108,18 @@ class Processes throw $e; } } + + public function truncateName($proTitle) + { + $proTitle = str_replace(".","_",$proTitle); + $limit = 200; + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $limit = 150; + } + $excess = strlen($proTitle) - $limit; + $proTitle = substr($proTitle,0,strlen($proTitle)-$excess); + return $proTitle; + } } //end class processes diff --git a/workflow/engine/methods/processes/processes_Export.php b/workflow/engine/methods/processes/processes_Export.php index 023f1a82f..7df589120 100755 --- a/workflow/engine/methods/processes/processes_Export.php +++ b/workflow/engine/methods/processes/processes_Export.php @@ -32,10 +32,11 @@ try { } if (\BpmnProject::exists($_GET["pro_uid"])) { $exporter = new ProcessMaker\Exporter\XmlExporter($_GET["pro_uid"]); + $getProjectName = $exporter->truncateName($exporter->getProjectName(),false); - $version = ProcessMaker\Util\Common::getLastVersion($outputDir . $exporter->getProjectName() . "-*.pmx") + 1; - $outputFilename = sprintf("%s-%s.%s", str_replace(" ", "_", $exporter->getProjectName()), $version, "pmx"); - $exporter->saveExport($outputDir . $outputFilename); + $version = ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; + $outputFilename = sprintf("%s-%s.%s", str_replace(" ","_",$getProjectName), $version, "pmx"); + $outputFilename = $exporter->saveExport($outputDir . $outputFilename); } else { $oProcess = new Processes(); $proFields = $oProcess->serializeProcess($_GET["pro_uid"]); @@ -47,15 +48,15 @@ try { $response->file_hash = base64_encode($outputFilename); $response->success = true; - /* Render page */ + /* Render page */ if (isset( $_REQUEST["processMap"] ) && $_REQUEST["processMap"] == 1) { $link = parse_url($result['FILENAME_LINK']); $result['FILENAME_LINK'] = $link['path'] . '?file_hash=' . $response->file_hash; - - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent( "xmlform", "xmlform", "processes/processes_Export", "", $result ); - - G::RenderPage( "publish", "raw" ); + + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( "xmlform", "xmlform", "processes/processes_Export", "", $result ); + + G::RenderPage( "publish", "raw" ); } else{ echo json_encode($response); } diff --git a/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php b/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php index 816a68d06..a432e98bc 100644 --- a/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php +++ b/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php @@ -127,9 +127,13 @@ class XmlExporter extends Exporter if (! is_dir($parentDir)) { Util\Common::mk_dir($parentDir, 0775); } - + + $outputFile = $this->Truncatename($outputFile); + file_put_contents($outputFile, $this->export()); chmod($outputFile, 0755); + + return basename($outputFile); } /** @@ -149,4 +153,36 @@ class XmlExporter extends Exporter return $this->dom->createCDATASection($value); } } + + public function truncateName($outputFile,$dirName = true) + { + $limit = 200; + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $limit = 150; + } + if($dirName) { + if (strlen(basename($outputFile)) >= $limit) { + $lastPos = strrpos(basename($outputFile),'.'); + $fileName = substr(basename($outputFile),0,$lastPos); + $newFileName = str_replace(".","_",$fileName); + $newFileName = str_replace(" ","_",$fileName); + $excess = strlen($newFileName) - $limit; + $newFileName = substr($newFileName,0,strlen($newFileName)-$excess); + $newOutputFile = str_replace($fileName,$newFileName,$outputFile); + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $newOutputFile = str_replace("/", DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR, $newOutputFile); + } + $outputFile = $newOutputFile; + } + } else { + $outputFile = str_replace(".","_",$outputFile); + $outputFile = str_replace(" ","_",$outputFile); + if (strlen($outputFile) >= $limit) { + $excess = strlen($outputFile) - $limit; + $newFileName = substr($outputFile,0,strlen($outputFile)-$excess); + $outputFile = $newFileName; + } + } + return $outputFile; + } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index bcb558d51..c9b135f74 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -108,13 +108,14 @@ class Project extends Api public function export($prj_uid) { $exporter = new \ProcessMaker\Exporter\XmlExporter($prj_uid); + $getProjectName = $exporter->truncateName($exporter->getProjectName(),false); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; - $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $exporter->getProjectName() . "-*.pmx") + 1; - $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $exporter->getProjectName()), $version, "pmx"); + $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; + $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); $exporter->setMetadata("export_version", $version); - $exporter->saveExport($outputFilename); + $outputFilename = $exporter->saveExport($outputFilename); $httpStream = new \ProcessMaker\Util\IO\HttpStream(); $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION); diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index d81878208..73e2b0f37 100755 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -558,7 +558,14 @@ function newProcess(params) width: 260, maskRe: /^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\...*)(\..+)?$)[^\x00-\x1f\\?*\";|/]+$/i, allowBlank: false, - vtype: "textWithoutTags" + vtype: "textWithoutTags", + listeners: { + 'focus' : function(value){ + document.getElementById("PRO_TITLE").onpaste = function() { + return false; + }; + } + } }, { id: 'PRO_DESCRIPTION', fieldLabel: _('ID_DESCRIPTION'), From 7be4a1fcc61a7c2b70e7ef9c021b6a369a21ad8b Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Mon, 25 May 2015 10:04:05 -0400 Subject: [PATCH 13/19] PM-2258 "Change the text when checking..." SOLVED --- .../BusinessModel/DataBaseConnection.php | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DataBaseConnection.php b/workflow/engine/src/ProcessMaker/BusinessModel/DataBaseConnection.php index e223bcae4..68354446c 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DataBaseConnection.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DataBaseConnection.php @@ -246,31 +246,31 @@ class DataBaseConnection // STEP 3 : Trying to connect to host $respTest['2'] = array(); - $respTest['2']['test'] = 'Trying to connect to host ' . $dataCon['DBS_SERVER'] . (($dataCon['DBS_PORT'] != '') ? ':'.$dataCon['DBS_PORT'] : ''); + $respTest['2']['test'] = 'Connecting to host ' . $dataCon['DBS_SERVER'] . (($dataCon['DBS_PORT'] != '') ? ':'.$dataCon['DBS_PORT'] : ''); $Server->loginDbServer($dataCon['DBS_USERNAME'], $dataCon['DBS_PASSWORD']); $Server->setDataBase($dataCon['DBS_DATABASE_NAME'], $dataCon['DBS_PORT']); if ($Server->errno == 0) { $response = $Server->tryConnectServer($dataCon['DBS_TYPE']); if ($response->status != 'SUCCESS') { if ($returnArray) { - $respTest['2']['error'] = "Error Testing Connection: Trying to connect to host FAILED : " . $Server->error; + $respTest['2']['error'] = "Error Testing Connection: Connecting to host FAILED : " . $Server->error; } else { - $resp['message'] = "Error Testing Connection: Trying to connect to host FAILED : " . $Server->error; + $resp['message'] = "Error Testing Connection: Connecting to host FAILED : " . $Server->error; return $resp; } } } else { if ($returnArray) { - $respTest['2']['error'] = "Error Testing Connection: Trying to connect to host FAILED : " . $Server->error; + $respTest['2']['error'] = "Error Testing Connection: Connecting to host FAILED : " . $Server->error; } else { - $resp['message'] = "Error Testing Connection: Trying to connect to host FAILED : " . $Server->error; + $resp['message'] = "Error Testing Connection: Connecting to host FAILED : " . $Server->error; return $resp; } } // STEP 4 : Trying to open database $respTest['3'] = array(); - $respTest['3']['test'] = 'Trying to open database [' . $dataCon['DBS_DATABASE_NAME'] . ']'; + $respTest['3']['test'] = 'Opening database [' . $dataCon['DBS_DATABASE_NAME'] . ']'; $Server->loginDbServer($dataCon['DBS_USERNAME'], $dataCon['DBS_PASSWORD']); $Server->setDataBase($dataCon['DBS_DATABASE_NAME'], $dataCon['DBS_PORT']); if ($Server->errno == 0) { @@ -279,25 +279,25 @@ class DataBaseConnection $response = $Server->tryOpenDataBase($dataCon['DBS_TYPE']); if ($response->status != 'SUCCESS') { if ($returnArray) { - $respTest['3']['error'] = "Error Testing Connection: Trying to open database FAILED : " . $Server->error; + $respTest['3']['error'] = "Error Testing Connection: Opening database FAILED : " . $Server->error; } else { - $resp['message'] = "Error Testing Connection: Trying to open database FAILED : " . $Server->error; + $resp['message'] = "Error Testing Connection: Opening database FAILED : " . $Server->error; return $resp; } } } else { if ($returnArray) { - $respTest['3']['error'] = "Error Testing Connection: Trying to open database FAILED : " . $Server->error; + $respTest['3']['error'] = "Error Testing Connection: Opening database FAILED : " . $Server->error; } else { - $resp['message'] = "Error Testing Connection: Trying to open database FAILED : " . $Server->error; + $resp['message'] = "Error Testing Connection: Opening database FAILED : " . $Server->error; return $resp; } } } else { if ($returnArray) { - $respTest['3']['error'] = "Error Testing Connection: Trying to open database FAILED : " . $Server->error; + $respTest['3']['error'] = "Error Testing Connection: Opening database FAILED : " . $Server->error; } else { - $resp['message'] = "Error Testing Connection: Trying to open database FAILED : " . $Server->error; + $resp['message'] = "Error Testing Connection: Opening database FAILED : " . $Server->error; return $resp; } } @@ -374,4 +374,3 @@ class DataBaseConnection return $dbs_uid; } } - From ac9ab2c30f35ee3e1bd35e207de3715c617dc057 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Mon, 25 May 2015 10:20:42 -0400 Subject: [PATCH 14/19] pm2731 --- workflow/engine/classes/class.processes.php | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index e7a575df9..c4b753501 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -968,6 +968,18 @@ class Processes } } } + + if (isset($oData->taskExtraProperties)) { + foreach ($oData->taskExtraProperties as $key => $value) { + $record = $value; + + if (isset($map[$record["OBJ_UID"]])) { + $newUid = $map[$record["OBJ_UID"]]; + + $oData->taskExtraProperties[$key]["OBJ_UID"] = $newUid; + } + } + } if (isset($oData->webEntry)) { foreach ($oData->webEntry as $key => $value) { @@ -3745,6 +3757,22 @@ class Processes // for public files $PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP . $data->process['PRO_UID']; + + //Get WebEntry file names + $arrayWebEntryFile = array(); + + if (is_dir($PUBLIC_ROOT_PATH)) { + if ($dirh = opendir($PUBLIC_ROOT_PATH)) { + while (($file = readdir($dirh)) !== false) { + if (preg_match("/^(.+)Post\.php$/", $file, $arrayMatch)) { + $arrayWebEntryFile[] = $arrayMatch[1] . ".php"; + $arrayWebEntryFile[] = $arrayMatch[1] . "Post.php"; + } + } + + closedir($dirh); + } + } //if this process have any mailfile if (is_dir( $PUBLIC_ROOT_PATH )) { @@ -3753,6 +3781,10 @@ class Processes foreach ($file_list as $filename) { // verify if this filename is a valid file, because it could be . or .. on *nix systems if ($filename != '.' && $filename != '..') { + if (in_array($filename, $arrayWebEntryFile)) { + continue; + } + if (@is_readable( $PUBLIC_ROOT_PATH . PATH_SEP . $filename )) { $sFileName = $PUBLIC_ROOT_PATH . PATH_SEP . $filename; if (file_exists( $sFileName )) { @@ -4184,6 +4216,28 @@ class Processes } if (trim( $sIdentifier ) == 'PUBLIC') { + //Get WebEntry file names + $arrayWebEntryFile = array(); + + $fh = fopen($pmFilename, "rb"); + $contents = fread($fh, intval(fread($fh, 9))); //Reading string $oData + + while (!feof($fh)) { + $fsFileName = intval(fread($fh, 9)); //Reading the size of $filename + + if ($fsFileName > 0) { + $sFileName = fread($fh, $fsFileName); //Reading filename string + + if (preg_match("/^(.+)Post\.php$/", $sFileName, $arrayMatch)) { + $arrayWebEntryFile[] = $arrayMatch[1] . ".php"; + $arrayWebEntryFile[] = $arrayMatch[1] . "Post.php"; + } + } + } + + fclose($fh); + + //Public files $sIdentifier = 1; while (! feof( $fp ) && is_numeric( $sIdentifier )) { $sIdentifier = fread( $fp, 9 ); //reading the size of $filename @@ -4196,6 +4250,11 @@ class Processes if ($fsContent > 0) { $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent $newFileName = $pathPublic . $sFileName; + + if (in_array($sFileName, $arrayWebEntryFile)) { + continue; + } + $bytesSaved = @file_put_contents( $newFileName, $fileContent ); if ($bytesSaved != $fsContent) { throw (new Exception( 'Error writing Public file in directory : ' . $pathPublic )); From 92dbb9cd95f38fa8f46963db6d126f84fbc512bf Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Mon, 25 May 2015 12:07:40 -0400 Subject: [PATCH 15/19] pm2731 --- workflow/engine/src/ProcessMaker/Services/Api/Project.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index c9b135f74..f6c06907e 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -115,7 +115,7 @@ class Project extends Api $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); $exporter->setMetadata("export_version", $version); - $outputFilename = $exporter->saveExport($outputFilename); + $outputFilename = $outputDir . $exporter->saveExport($outputFilename); $httpStream = new \ProcessMaker\Util\IO\HttpStream(); $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION); From 3e1e7d3172c7a7d79657981dde6ec3b12df7d6ac Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 25 May 2015 12:13:46 -0400 Subject: [PATCH 16/19] PM-2811: Upgrade ProcessMaker from 2.8 to 3.0 on Ubuntu, problem with close in propel --- gulliver/thirdparty/propel/Propel.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gulliver/thirdparty/propel/Propel.php b/gulliver/thirdparty/propel/Propel.php index ef2ece638..05a909cf3 100755 --- a/gulliver/thirdparty/propel/Propel.php +++ b/gulliver/thirdparty/propel/Propel.php @@ -602,11 +602,12 @@ class Propel { foreach (self::$connectionMap as $cnn) { if (get_class($cnn) != "DBArrayConnection") { - if (gettype($cnn->getResource()) == "resource" && $cnn->isConnected() && $cnn->lastQuery != $lastQuery) { - $cnn->close(); + if(isset($cnn->lastQuery)){ + if (gettype($cnn->getResource()) == "resource" && $cnn->isConnected() && $cnn->lastQuery != $lastQuery) { + $cnn->close(); + } + $lastQuery = $cnn->lastQuery; } - - $lastQuery = $cnn->lastQuery; } } } From fdef3051aa55da5432801d191e4b015f2ed8496d Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Mon, 25 May 2015 15:56:00 -0400 Subject: [PATCH 17/19] PM-2671 "La ventana Get Started tiene ..." SOLVED --- workflow/engine/xmlform/login/loginpm3.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/xmlform/login/loginpm3.xml b/workflow/engine/xmlform/login/loginpm3.xml index ca2d780d0..9ec48e180 100755 --- a/workflow/engine/xmlform/login/loginpm3.xml +++ b/workflow/engine/xmlform/login/loginpm3.xml @@ -98,7 +98,7 @@ function showGettingStarted() { panel.options = { size: {w:620,h:500}, position: {x:50,y:50,center:true}, - control: {close:true,resize:false},fx:{modal:true}, + control: {close:true,resize:false, drag: false},fx:{modal:true}, statusBar: false, fx: {shadow:true,modal:true} }; From b74759d12048c4c5db4abaae301ea08811fede39 Mon Sep 17 00:00:00 2001 From: rodrigo quelca Date: Mon, 25 May 2015 16:56:39 -0400 Subject: [PATCH 18/19] PM-2547 change div order --- workflow/engine/templates/designer/index.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index 2ec0e90b5..01a77a8be 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -101,13 +101,14 @@ +
+
-
-
+
From 26b452a10e96829b0b520a7618c49eb225ff65d2 Mon Sep 17 00:00:00 2001 From: dheeyi Date: Tue, 26 May 2015 09:53:36 -0400 Subject: [PATCH 19/19] PM-2509 La pantalla de Cases Note solo visualiza hasta 10 cases note debe mostrar el total, sin necesidad de habilitar el show more notes --- workflow/engine/templates/app/main.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow/engine/templates/app/main.js b/workflow/engine/templates/app/main.js index 741144ebb..212456703 100644 --- a/workflow/engine/templates/app/main.js +++ b/workflow/engine/templates/app/main.js @@ -33,13 +33,15 @@ function openCaseNotesWindow(appUid1, delIndex, modalSw, appTitle, proUid, taskU var startRecord=0; var loadSize=10; + startRecord=startRecord+loadSize; + storeNotes = new Ext.data.JsonStore({ url: "../appProxy/getNotesList?appUid=" + appUid + "&delIndex=" + delIndex + "&pro=" + proUid + "&tas=" + taskUid, root: 'notes', totalProperty: 'totalCount', fields: ['USR_USERNAME','USR_FIRSTNAME','USR_LASTNAME','USR_FULL_NAME','NOTE_DATE','NOTE_CONTENT', 'USR_UID', 'user'], baseParams:{ - start:startRecord, + start:0, limit:startRecord+loadSize }, listeners:{