From 8f164129d77d431cc730a983abde93ceb4f5b67b Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 8 May 2015 10:27:40 -0400 Subject: [PATCH 01/24] PM-2639 Home > Process Supervisor > Reassign: Al reasignar un caso se muestra a "Administrator" dos veces. --- workflow/engine/classes/class.case.php | 15 +++++++++++++++ .../methods/cases/proxyReassignUsersList.php | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index c64c1ab15..8fcb73a32 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -6793,6 +6793,21 @@ class Cases } } } + + if(count($rows) != 0){ + foreach ($rows as $key => $value) { + $arrayKey[$key] = $value['USR_UID']; + } + $arrayKey = array_unique($arrayKey); + $keys = array_keys($arrayKey); + foreach ($rows as $key => $value){ + if(!in_array($key, $keys)){ + unset($rows[$key]); + } + } + $rows = array_values($rows); + } + return $rows; } diff --git a/workflow/engine/methods/cases/proxyReassignUsersList.php b/workflow/engine/methods/cases/proxyReassignUsersList.php index 5b8a7cbe9..9f507ec47 100755 --- a/workflow/engine/methods/cases/proxyReassignUsersList.php +++ b/workflow/engine/methods/cases/proxyReassignUsersList.php @@ -52,6 +52,21 @@ function array_sort ($array, $on, $order = SORT_ASC, $query = '') } } } + + if(count($new_array) != 0){ + foreach ($new_array as $key => $value) { + $arrayKey[$key] = $value['userUid']; + } + $arrayKey = array_unique($arrayKey); + $keys = array_keys($arrayKey); + foreach ($new_array as $key => $value){ + if(!in_array($key, $keys)){ + unset($new_array[$key]); + } + } + $new_array = array_values($new_array); + } + return $new_array; } // $APP_UIDS = explode(',', $_POST['APP_UID']); From 3a06caf5554093214523aad5c1e616ad2186ac36 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Mon, 11 May 2015 16:36:07 -0400 Subject: [PATCH 02/24] validaciones veracode del reporte del 11-05-15 --- gulliver/system/class.g.php | 14 +++++++++++--- .../pear/HTTP/WebDAV/Server/Filesystem.php | 18 ++++++++++++++++-- workflow/engine/classes/class.webdav.php | 9 +++++++-- workflow/engine/controllers/installer.php | 12 ++++++++++-- 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index a96b5977a..69feae7d6 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -463,10 +463,17 @@ class G * @return void */ public static function LoadSystem ($strClass) - { require_once (PATH_GULLIVER . 'class.inputfilter.php'); - $filter = new InputFilter(); + { $path = PATH_GULLIVER . 'class.' . $strClass . '.php'; - $path = $filter->validateInput($path, 'path'); + if(file_exists(PATH_GULLIVER . 'class.inputfilter.php')) { + require_once (PATH_GULLIVER . 'class.inputfilter.php'); + $filter = new InputFilter(); + $path = $filter->validateInput($path, 'path'); + } else { + if(!file_exists($path)) { + $path = ''; + } + } require_once ($path); } @@ -2656,6 +2663,7 @@ class G $path = $filter->validateInput($path, "path"); move_uploaded_file( $file, $path . "/" . $nameToSave ); + $nameToSave = $filter->validateInput($nameToSave, "path"); @chmod( $path . "/" . $nameToSave, $permission ); umask( $oldumask ); diff --git a/gulliver/thirdparty/pear/HTTP/WebDAV/Server/Filesystem.php b/gulliver/thirdparty/pear/HTTP/WebDAV/Server/Filesystem.php index ae87e5462..41dbdf521 100755 --- a/gulliver/thirdparty/pear/HTTP/WebDAV/Server/Filesystem.php +++ b/gulliver/thirdparty/pear/HTTP/WebDAV/Server/Filesystem.php @@ -634,15 +634,29 @@ $dir = dirname($path)."/"; $base = basename($path); + if (!class_exists('G')) { + $realdocuroot = str_replace( '\\', '/', $_SERVER['DOCUMENT_ROOT'] ); + $docuroot = explode( '/', $realdocuroot ); + array_pop( $docuroot ); + $pathhome = implode( '/', $docuroot ) . '/'; + array_pop( $docuroot ); + $pathTrunk = implode( '/', $docuroot ) . '/'; + require_once($pathTrunk.'gulliver/system/class.g.php'); + } + G::LoadSystem('inputfilter'); + $filter = new InputFilter(); + foreach($options["props"] as $key => $prop) { if ($prop["ns"] == "DAV:") { $options["props"][$key]['status'] = "403 Forbidden"; } else { if (isset($prop["val"])) { - $query = "REPLACE INTO properties SET path = '$options[path]', name = '$prop[name]', ns= '$prop[ns]', value = '$prop[val]'"; + $query = "REPLACE INTO properties SET path = '%s', name = '%s', ns= '%s', value = '%s'"; + $query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns'],$prop['val'])); error_log($query); } else { - $query = "DELETE FROM properties WHERE path = '$options[path]' AND name = '$prop[name]' AND ns = '$prop[ns]'"; + $query = "DELETE FROM properties WHERE path = '%s' AND name = '%s' AND ns = '%s'"; + $query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns'])); } mysql_query($query); } diff --git a/workflow/engine/classes/class.webdav.php b/workflow/engine/classes/class.webdav.php index bc56cca59..3b56c1068 100755 --- a/workflow/engine/classes/class.webdav.php +++ b/workflow/engine/classes/class.webdav.php @@ -902,16 +902,21 @@ class ProcessMakerWebDav extends HTTP_WebDAV_Server $dir = dirname($path) . "/"; $base = basename($path); + + G::LoadSystem('inputfilter'); + $filter = new InputFilter(); foreach ($options["props"] as $key => $prop) { if ($prop["ns"] == "DAV:") { $options["props"][$key]['status'] = "403 Forbidden"; } else { if (isset($prop["val"])) { - $query = "REPLACE INTO properties SET path = '$options[path]', name = '$prop[name]', ns= '$prop[ns]', value = '$prop[val]'"; + $query = "REPLACE INTO properties SET path = '%s', name = '%s', ns= '%s', value = '%s'"; + $query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns'],$prop['val'])); error_log($query); } else { - $query = "DELETE FROM properties WHERE path = '$options[path]' AND name = '$prop[name]' AND ns = '$prop[ns]'"; + $query = "DELETE FROM properties WHERE path = '%s' AND name = '%s' AND ns = '%s'"; + $query = $filter->preventSqlInjection($query, Array($options['path'],$prop['name'],$prop['ns'])); } mysql_query($query); } diff --git a/workflow/engine/controllers/installer.php b/workflow/engine/controllers/installer.php index 706c405c5..fd7df39a4 100644 --- a/workflow/engine/controllers/installer.php +++ b/workflow/engine/controllers/installer.php @@ -315,6 +315,10 @@ class Installer extends Controller $info->success = false; } } + + G::LoadSystem('inputfilter'); + $filter = new InputFilter(); + $pathShared = $filter->validateInput($_REQUEST['pathShared'], 'path'); if ($info->pathShared->result) { $aux = pathinfo( $_REQUEST['pathLogFile'] ); @@ -322,7 +326,7 @@ class Installer extends Controller if (is_dir( $aux['dirname'] )) { if (! file_exists( $_REQUEST['pathLogFile'] )) { @file_put_contents( $_REQUEST['pathLogFile'], '' ); - @chmod($_REQUEST['pathShared'], 0770); + @chmod($pathShared , 0770); } } } @@ -388,7 +392,11 @@ class Installer extends Controller return $false; } } - + + G::LoadSystem('inputfilter'); + $filter = new InputFilter(); + $logFile = $filter->validateInput($logFile, 'path'); + $fpt = fopen( $logFile, 'a' ); fwrite( $fpt, sprintf( "%s %s\n", date( 'Y:m:d H:i:s' ), trim( $text ) ) ); fclose( $fpt ); From 478ba5f013f1d4cb3667ccd69d7d9eba21e5a7d6 Mon Sep 17 00:00:00 2001 From: dheeyi Date: Tue, 12 May 2015 13:20:05 -0400 Subject: [PATCH 03/24] PM-1150 El trigger PMF Delete Case despliega el error Fatal error: Call to a member function toArray() on a non-object in /opt/processmaker280/workflow/engine/classes/class.case.php on --- workflow/engine/classes/class.case.php | 6 +- workflow/engine/classes/model/Application.php | 137 +++++++++--------- 2 files changed, 77 insertions(+), 66 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index c64c1ab15..6bde6068d 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -949,6 +949,10 @@ class Cases public function updateCase($sAppUid, $Fields = array()) { try { + $oApplication = new Application; + if (!$oApplication->exists($sAppUid)) { + return false; + } $aApplicationFields = $Fields['APP_DATA']; $Fields['APP_UID'] = $sAppUid; $Fields['APP_UPDATE_DATE'] = 'now'; @@ -6898,7 +6902,7 @@ class Cases unset($aFields['APP_STATUS']); unset($aFields['APP_PROC_STATUS']); unset($aFields['APP_PROC_CODE']); - unset($aFields['APP_PIN']); + unset($aFields['APP_PIN']); $this->updateCase($aFields['APP_UID'], $aFields); return true; } diff --git a/workflow/engine/classes/model/Application.php b/workflow/engine/classes/model/Application.php index 944bf3932..c7b754156 100755 --- a/workflow/engine/classes/model/Application.php +++ b/workflow/engine/classes/model/Application.php @@ -56,6 +56,11 @@ class Application extends BaseApplication */ public function getAppTitle() { + $oApplication = new Application; + if (!$oApplication->exists($this->getAppUid())) { + return false; + } + if ($this->getAppUid() == '') { throw (new Exception( "Error in getAppTitle, the APP_UID can't be blank")); } @@ -311,7 +316,9 @@ class Application extends BaseApplication try { $oApplication = ApplicationPeer::retrieveByPk( $AppUid ); - + if (!$oApplication) { + return false; + } if (is_object($oApplication) && get_class ($oApplication) == 'Application' ) { $aFields = $oApplication->toArray(BasePeer::TYPE_FIELDNAME); $this->fromArray($aFields, BasePeer::TYPE_FIELDNAME); @@ -574,19 +581,19 @@ class Application extends BaseApplication } /*----------------------------------********---------------------------------*/ - public function calculateAppDuration ($cron = 0) - { - try { - if ($cron == 1) { - $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); - $arrayCron["processcTimeStart"] = time(); - @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); - } - - $calendar = new calendar(); - - $c = new Criteria( 'workflow' ); - $c->clearSelectColumns(); + public function calculateAppDuration ($cron = 0) + { + try { + if ($cron == 1) { + $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); + $arrayCron["processcTimeStart"] = time(); + @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); + } + + $calendar = new calendar(); + + $c = new Criteria( 'workflow' ); + $c->clearSelectColumns(); $c->addSelectColumn( ApplicationPeer::APP_UID ); $c->addSelectColumn( ApplicationPeer::APP_NUMBER ); $c->addSelectColumn( ApplicationPeer::APP_STATUS ); @@ -602,80 +609,80 @@ class Application extends BaseApplication $c->addSelectColumn( ProcessPeer::PRO_TIME ); $c->addSelectColumn( ProcessPeer::PRO_TIMEUNIT ); - $c->addJoin( ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN ); - - $rs = ApplicationPeer::doSelectRS( $c ); - $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $rs->next(); - $row = $rs->getRow(); - $i = 0; - - $now = strtotime( 'now' ); - while (is_array( $row )) { - $appNumber = $row['APP_NUMBER']; - $appStatus = $row['APP_STATUS']; - $appInitUser = $row['APP_INIT_USER']; - $appCurUser = $row['APP_CUR_USER']; - $appCreateDate = $row['APP_CREATE_DATE']; - $appInitDate = $row['APP_INIT_DATE']; - $appFinishDate = $row['APP_FINISH_DATE']; + $c->addJoin( ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN ); + + $rs = ApplicationPeer::doSelectRS( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + $i = 0; + + $now = strtotime( 'now' ); + while (is_array( $row )) { + $appNumber = $row['APP_NUMBER']; + $appStatus = $row['APP_STATUS']; + $appInitUser = $row['APP_INIT_USER']; + $appCurUser = $row['APP_CUR_USER']; + $appCreateDate = $row['APP_CREATE_DATE']; + $appInitDate = $row['APP_INIT_DATE']; + $appFinishDate = $row['APP_FINISH_DATE']; $appUpdateDate = $row['APP_UPDATE_DATE']; $appDuration = $row['APP_DURATION']; $proTime = $row['PRO_TIME']; $proTimeUnit = $row['PRO_TIMEUNIT']; - $proUid = $row['PRO_UID']; - - //get the object, - $oApp = ApplicationPeer::retrieveByPk( $row['APP_UID'] ); - - //getting the calendar - $calendar->getCalendar(null, $proUid); + $proUid = $row['PRO_UID']; + + //get the object, + $oApp = ApplicationPeer::retrieveByPk( $row['APP_UID'] ); + + //getting the calendar + $calendar->getCalendar(null, $proUid); $calData = $calendar->getCalendarData(); /*if(G::toUpper($proTimeUnit) != 'DAYS'){ //if it is not in days must be in mins. $proTime = $proTime / (24 * 60 * 60); //converting to Days }*/ - - $proDueDate = $calendar->dashCalculateDate($row['APP_INIT_DATE'], $proTime, $proTimeUnit, $calData); //date when the process has to finish + + $proDueDate = $calendar->dashCalculateDate($row['APP_INIT_DATE'], $proTime, $proTimeUnit, $calData); //date when the process has to finish if($appFinishDate == null){//When the process didnt finish yet. //Duration - $appDuration = $calendar->dashCalculateDurationWithCalendar($appInitDate, date("Y-m-d H:i:s"), $calData ); - + $appDuration = $calendar->dashCalculateDurationWithCalendar($appInitDate, date("Y-m-d H:i:s"), $calData ); - $appDuration = $appDuration / (24 * 60 * 60); //Saving the proDuration in days. The calculateDurationWithCalendar func returns segs. + + $appDuration = $appDuration / (24 * 60 * 60); //Saving the proDuration in days. The calculateDurationWithCalendar func returns segs. $oApp->setAppDuration( $appDuration ); //Delay Duration - $delayDuration = $calendar->dashCalculateDurationWithCalendar( $proDueDate, date("Y-m-d H:i:s"), $calData );//it returns in mins + $delayDuration = $calendar->dashCalculateDurationWithCalendar( $proDueDate, date("Y-m-d H:i:s"), $calData );//it returns in mins $delayDuration = $delayDuration / (24 * 60 * 60); //Days $oApp->setAppDelayDuration( $delayDuration ); } else { - //Duration - $appDuration = $calendar->dashCalculateDurationWithCalendar($appInitDate, $appFinishDate, $calData ); - $appDuration = $appDuration / (24 * 60 * 60); //Saving the proDuration in days. The calculateDurationWithCalendar func returns mins. + //Duration + $appDuration = $calendar->dashCalculateDurationWithCalendar($appInitDate, $appFinishDate, $calData ); + $appDuration = $appDuration / (24 * 60 * 60); //Saving the proDuration in days. The calculateDurationWithCalendar func returns mins. $oApp->setAppDuration( $appDuration ); - - //Delay Duration - $delayDuration = $calendar->dashCalculateDurationWithCalendar( $proDueDate, $appFinishDate, $calData ); + + //Delay Duration + $delayDuration = $calendar->dashCalculateDurationWithCalendar( $proDueDate, $appFinishDate, $calData ); $delayDuration = $delayDuration / (24 * 60 * 60); //Days $oApp->setAppDelayDuration( $delayDuration ); } - - //and finally save the record - $RES = $oApp->save(); - $rs->next(); - $row = $rs->getRow(); - } - - if ($cron == 1) { - $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); - $arrayCron["processcTimeStart"] = time(); - @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); - } - } catch (Exception $oError) { - error_log( $oError->getMessage() ); - } + + //and finally save the record + $RES = $oApp->save(); + $rs->next(); + $row = $rs->getRow(); + } + + if ($cron == 1) { + $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); + $arrayCron["processcTimeStart"] = time(); + @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); + } + } catch (Exception $oError) { + error_log( $oError->getMessage() ); + } } /*----------------------------------********---------------------------------*/ } From 0df337393d37d474b69bc9e2bbc023d4ce09c03c Mon Sep 17 00:00:00 2001 From: dheeyi Date: Wed, 13 May 2015 14:49:24 -0400 Subject: [PATCH 04/24] PM-2624 --- gulliver/thirdparty/phpmailer/class.smtp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulliver/thirdparty/phpmailer/class.smtp.php b/gulliver/thirdparty/phpmailer/class.smtp.php index 3d4b9ce00..45abc8694 100755 --- a/gulliver/thirdparty/phpmailer/class.smtp.php +++ b/gulliver/thirdparty/phpmailer/class.smtp.php @@ -305,7 +305,7 @@ class SMTP { break; case 'LOGIN': // Start authentication - fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); + @fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); $rply = $this->get_lines(); $code = substr($rply,0,3); From a7eb706a58bc66a69eab73b4fdcd4753e5dc7acf Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Wed, 13 May 2015 15:44:28 -0400 Subject: [PATCH 05/24] PM-1238 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Al crear el PMFEvaluateFunction los parametros dela funcion no esta correctamente establecidos solucion para el diseƱr clasico, en el nuevo no se presenta el problema --- workflow/engine/methods/triggers/triggers_WizardSave.php | 4 ++-- workflow/engine/methods/triggers/triggers_WizardUpdate.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/workflow/engine/methods/triggers/triggers_WizardSave.php b/workflow/engine/methods/triggers/triggers_WizardSave.php index 05655150b..8416ea954 100755 --- a/workflow/engine/methods/triggers/triggers_WizardSave.php +++ b/workflow/engine/methods/triggers/triggers_WizardSave.php @@ -63,7 +63,7 @@ foreach ($aInfoFunction as $k => $v) { } if ($aDataTriggers[$sOptionTrigger] != '') { - if ((strstr($aDataTriggers[$sOptionTrigger], "@@"))) { + if ((strstr($aDataTriggers[$sOptionTrigger], "@@")) || ($aDataTriggers['PMFUNTION_NAME'] == 'evaluateFunction' && $k == 0 && strstr($aDataTriggers[$sOptionTrigger], "@="))) { $option = trim($aDataTriggers[$sOptionTrigger]); } else { @@ -81,7 +81,7 @@ foreach ($aInfoFunction as $k => $v) { $option = floatval($aDataTriggers[$sOptionTrigger]); break; default: - $option = (is_numeric($aDataTriggers[$sOptionTrigger]) || is_bool($aDataTriggers[$sOptionTrigger]) ) ? trim($aDataTriggers[$sOptionTrigger]) : (strstr($aDataTriggers[$sOptionTrigger], "'.array.'")) ? trim($aDataTriggers[$sOptionTrigger]) : "'" . trim($aDataTriggers[$sOptionTrigger]) . "'"; + $option = (is_numeric($aDataTriggers[$sOptionTrigger]) || is_bool($aDataTriggers[$sOptionTrigger]) ) ? trim($aDataTriggers[$sOptionTrigger]) : (strstr($aDataTriggers[$sOptionTrigger], "'.array.'")) ? trim($aDataTriggers[$sOptionTrigger]) : '"' . trim($aDataTriggers[$sOptionTrigger]) . '"'; break; } } diff --git a/workflow/engine/methods/triggers/triggers_WizardUpdate.php b/workflow/engine/methods/triggers/triggers_WizardUpdate.php index 33c545186..0d4799373 100755 --- a/workflow/engine/methods/triggers/triggers_WizardUpdate.php +++ b/workflow/engine/methods/triggers/triggers_WizardUpdate.php @@ -66,7 +66,7 @@ foreach ($aInfoFunction as $k => $v) { } if ($aDataTriggers[$sOptionTrigger] != '') { - if ((strstr($aDataTriggers[$sOptionTrigger], "@@"))) { + if ((strstr($aDataTriggers[$sOptionTrigger], "@@")) || ($aDataTriggers['PMFUNTION_NAME'] == 'evaluateFunction' && $k == 0 && strstr($aDataTriggers[$sOptionTrigger], "@="))) { $option = $aDataTriggers[$sOptionTrigger]; } else { @@ -84,7 +84,7 @@ foreach ($aInfoFunction as $k => $v) { $option = floatval($aDataTriggers[$sOptionTrigger]); break; default: - $option = (is_numeric($aDataTriggers[$sOptionTrigger]) || is_bool($aDataTriggers[$sOptionTrigger]) ) ? trim($aDataTriggers[$sOptionTrigger]) : (strstr($aDataTriggers[$sOptionTrigger], "array")) ? trim($aDataTriggers[$sOptionTrigger]) : "'" . trim($aDataTriggers[$sOptionTrigger]) . "'"; + $option = (is_numeric($aDataTriggers[$sOptionTrigger]) || is_bool($aDataTriggers[$sOptionTrigger]) ) ? trim($aDataTriggers[$sOptionTrigger]) : (strstr($aDataTriggers[$sOptionTrigger], "array")) ? trim($aDataTriggers[$sOptionTrigger]) : '"' . trim($aDataTriggers[$sOptionTrigger]) . '"'; break; } } From caab76e1a3166f4c25cc30449ead4e8d1b5dad23 Mon Sep 17 00:00:00 2001 From: dheeyi Date: Wed, 13 May 2015 16:39:10 -0400 Subject: [PATCH 06/24] PM-1072 --- workflow/engine/classes/class.pmFunctions.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index d3b12fed6..161266c10 100755 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -2865,8 +2865,9 @@ function PMFRemoveMask ($field, $separator = '.', $currency = '') $field = str_replace($thousandSeparator, "", $field); $field = str_replace($decimalSeparator, ".", $field); $field = str_replace($currency, "", $field); - $field = floatval(trim($field)); - + if(strpos($decimalSeparator, $field)){ + $field = (float)(trim($field)); + } return $field; } From a4c19ceadf1a7c7c078b0149be6cf59ccb277091 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Thu, 14 May 2015 10:45:33 -0400 Subject: [PATCH 07/24] PM-2627 Admin>Settings>Process Categories: No se tiene una validacion al crear un process categories en blanco, solo se pone rojo la caja de texto Se agrego un mensaje al momento de validar el campo requerido. --- .../engine/templates/processCategory/processCategoryList.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/workflow/engine/templates/processCategory/processCategoryList.js b/workflow/engine/templates/processCategory/processCategoryList.js index b3de47df1..6f07b70e8 100755 --- a/workflow/engine/templates/processCategory/processCategoryList.js +++ b/workflow/engine/templates/processCategory/processCategoryList.js @@ -319,7 +319,10 @@ CloseWindow = function(){ SaveNewCategory = function(){ catName = newForm.getForm().findField('category').getValue(); catName = catName.trim(); - if (catName == '') return; + if (catName == '') { + Ext.Msg.alert(_('ID_WARNING'), _("ID_FIELD_REQUIRED", _("ID_CATEGORY_NAME"))); + return; + } viewport.getEl().mask(_('ID_PROCESSING')); Ext.Ajax.request({ url: 'processCategory_Ajax', From ef1d7d7e9bfac0e973140e66e2f0e9214fd33deb Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 14 May 2015 11:07:18 -0400 Subject: [PATCH 08/24] PM-2693 "WebEntry: Cuando importas un proceso que tiene..." SOLVED Issue: WebEntry: Cuando importas un proceso que tiene webEntry's configurados no se eliminan. Cause: Nuevo requerimiento de funciones para los antiguos procesos (.pm) Solution: - Al exportar un proceso con extension ".pm", no se exportan los WebEntries - Al importar un proceso con extension ".pm", si este ya tiene WebEntries, estos no son importados --- workflow/engine/classes/class.processes.php | 51 +++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 3f0d72746..cfde846d0 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -3739,9 +3739,25 @@ 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 @@ -3749,6 +3765,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 )) { @@ -4094,7 +4114,6 @@ 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 ); @@ -4180,6 +4199,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 @@ -4192,6 +4233,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 )); @@ -4204,7 +4250,6 @@ class Processes fclose( $fp ); return true; - } /** From 5c23c27b6e5c97fa12c926ecae47a0976aecaeee Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Thu, 14 May 2015 15:35:23 -0400 Subject: [PATCH 09/24] PM-2681 "Case Tracker: En Internet Explorer..." SOLVED --- .../methods/tracker/tracker_DynaDocs.php | 41 ++++++++++++++++- .../methods/tracker/tracker_History.php | 42 ++++++++++++++++- .../methods/tracker/tracker_Messages.php | 42 ++++++++++++++++- .../methods/tracker/tracker_ViewMap.php | 46 +++++++++++++++++-- .../engine/skinEngine/neoclassic/layout.html | 8 +++- workflow/engine/templates/tracker/viewMap.php | 38 ++------------- 6 files changed, 173 insertions(+), 44 deletions(-) diff --git a/workflow/engine/methods/tracker/tracker_DynaDocs.php b/workflow/engine/methods/tracker/tracker_DynaDocs.php index 5a7ab49c1..1df85a841 100755 --- a/workflow/engine/methods/tracker/tracker_DynaDocs.php +++ b/workflow/engine/methods/tracker/tracker_DynaDocs.php @@ -66,5 +66,44 @@ if ($noShowTitle == 0) { $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'tracker/tracker_DynaDocs', $oProcessMap->getCaseTrackerObjectsCriteria( $_SESSION['PROCESS'] ), array ('VIEW' => G::LoadTranslation( 'ID_VIEW' ) ) ); -G::RenderPage( 'publish' ); +$bpmn = new ProcessMaker\Project\Bpmn(); +$flagIsBpmn = ($bpmn->exists($_SESSION["PROCESS"]))? true : false; +if ($flagIsBpmn) { + $urlTrackerProcessMap = "../designer?prj_uid=" . $_SESSION["PROCESS"] . "&prj_readonly=true&app_uid=" . $_SESSION["APPLICATION"] . "&tracker_designer=1"; + + $_SESSION["TRACKER_JAVASCRIPT"] = " + + "; +} + +G::RenderPage("publish"); diff --git a/workflow/engine/methods/tracker/tracker_History.php b/workflow/engine/methods/tracker/tracker_History.php index f608d532d..6dd885292 100755 --- a/workflow/engine/methods/tracker/tracker_History.php +++ b/workflow/engine/methods/tracker/tracker_History.php @@ -62,5 +62,45 @@ if ($noShowTitle == 0) { $G_PUBLISH->AddContent( 'smarty', 'cases/cases_title', '', '', $aFields ); } $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'tracker/tracker_TransferHistory', Cases::getTransferHistoryCriteria( $_SESSION['APPLICATION'] ), array () ); -G::RenderPage( 'publish' ); +$bpmn = new ProcessMaker\Project\Bpmn(); +$flagIsBpmn = ($bpmn->exists($_SESSION["PROCESS"]))? true : false; + +if ($flagIsBpmn) { + $urlTrackerProcessMap = "../designer?prj_uid=" . $_SESSION["PROCESS"] . "&prj_readonly=true&app_uid=" . $_SESSION["APPLICATION"] . "&tracker_designer=1"; + + $_SESSION["TRACKER_JAVASCRIPT"] = " + + "; +} + +G::RenderPage("publish"); diff --git a/workflow/engine/methods/tracker/tracker_Messages.php b/workflow/engine/methods/tracker/tracker_Messages.php index 9da5bfbd2..587437fbe 100755 --- a/workflow/engine/methods/tracker/tracker_Messages.php +++ b/workflow/engine/methods/tracker/tracker_Messages.php @@ -64,5 +64,45 @@ if ($noShowTitle == 0) { } $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'tracker/tracker_Messages', Cases::getHistoryMessagesTracker( $_SESSION['APPLICATION'] ), array ('VIEW' => G::LoadTranslation( 'ID_VIEW' ) ) ); -G::RenderPage( 'publish' ); +$bpmn = new ProcessMaker\Project\Bpmn(); +$flagIsBpmn = ($bpmn->exists($_SESSION["PROCESS"]))? true : false; + +if ($flagIsBpmn) { + $urlTrackerProcessMap = "../designer?prj_uid=" . $_SESSION["PROCESS"] . "&prj_readonly=true&app_uid=" . $_SESSION["APPLICATION"] . "&tracker_designer=1"; + + $_SESSION["TRACKER_JAVASCRIPT"] = " + + "; +} + +G::RenderPage("publish"); diff --git a/workflow/engine/methods/tracker/tracker_ViewMap.php b/workflow/engine/methods/tracker/tracker_ViewMap.php index 013e3c772..a7a531507 100755 --- a/workflow/engine/methods/tracker/tracker_ViewMap.php +++ b/workflow/engine/methods/tracker/tracker_ViewMap.php @@ -59,7 +59,7 @@ while ($ds->next()) { $row = $ds->getRow(); $bpmnProjects[] = $row['PRJ_UID']; } - + switch (($aCaseTracker['CT_MAP_TYPE'])) { case 'NONE': //Nothing @@ -71,11 +71,48 @@ switch (($aCaseTracker['CT_MAP_TYPE'])) { $aFields = $oCase->loadCase( $_SESSION['APPLICATION'] ); if (in_array($aFields['PRO_UID'], $bpmnProjects)) { //bpmb - $_SESSION["APP_UID"] = $aFields["APP_UID"]; + $_SESSION["APPLICATION"] = $aFields["APP_UID"]; $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent( 'view', 'tracker/viewMap' ); - G::RenderPage( 'publish' ); + + $urlTrackerProcessMap = "../designer?prj_uid=" . $_SESSION["PROCESS"] . "&prj_readonly=true&app_uid=" . $_SESSION["APPLICATION"] . "&tracker_designer=1"; + + $_SESSION["TRACKER_JAVASCRIPT"] = " + + "; + + G::RenderPage("publish"); //note: url processmap "../designer?prj_uid=$_SESSION['PROCESS']&prj_readonly=true&app_uid=$_SESSION['APP_UID']" + break; } if (isset( $aFields['TITLE'] )) { @@ -246,9 +283,8 @@ switch (($aCaseTracker['CT_MAP_TYPE'])) { }.extend(this); rpcRequest.make(); - + });' ); G::RenderPage( 'publish' ); break; } - diff --git a/workflow/engine/skinEngine/neoclassic/layout.html b/workflow/engine/skinEngine/neoclassic/layout.html index 1f5ad976c..4bf5c4c9a 100644 --- a/workflow/engine/skinEngine/neoclassic/layout.html +++ b/workflow/engine/skinEngine/neoclassic/layout.html @@ -59,10 +59,16 @@ - diff --git a/workflow/engine/templates/tracker/viewMap.php b/workflow/engine/templates/tracker/viewMap.php index 845e4c5d3..d4600b2c0 100644 --- a/workflow/engine/templates/tracker/viewMap.php +++ b/workflow/engine/templates/tracker/viewMap.php @@ -1,44 +1,12 @@
+ {php} global $G_TEMPLATE; if ($G_TEMPLATE != '') G::LoadTemplate($G_TEMPLATE); + + if (isset($_SESSION["TRACKER_JAVASCRIPT"])) { + echo $_SESSION["TRACKER_JAVASCRIPT"]; + + unset($_SESSION["TRACKER_JAVASCRIPT"]); + } {/php}