From d00b8a0dff3d557962931f94f21a5448e28149b8 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 15 May 2015 13:08:27 -0400 Subject: [PATCH 01/15] 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/15] 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 210b4c4883a3b45c29a0dd2098030484ad16af6e Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Thu, 21 May 2015 15:19:42 -0400 Subject: [PATCH 03/15] 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 04/15] 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 05/15] 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 dd4d24187599fe8ae9154f21d318407d6f862e5a Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 22 May 2015 15:35:27 -0400 Subject: [PATCH 06/15] 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 5b46d3e65a1bcfca30104bc4e5feb8b469564a1e Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 22 May 2015 16:21:55 -0400 Subject: [PATCH 07/15] 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 08/15] 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 09/15] 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 10/15] 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 11/15] 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 12/15] 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 13/15] 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 14/15] 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 15/15] 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:{