From 5018092db2c81e8f49fc146009b3625b0eab458c Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Fri, 29 May 2015 15:23:51 -0400 Subject: [PATCH 01/23] PM-2828 "In the BPMN Designer, can not connect..." SOLVED --- workflow/engine/classes/class.dbConnections.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.dbConnections.php b/workflow/engine/classes/class.dbConnections.php index 3e3d709a7..ec4ac1aa7 100755 --- a/workflow/engine/classes/class.dbConnections.php +++ b/workflow/engine/classes/class.dbConnections.php @@ -154,7 +154,7 @@ class dbConnections $result = DbSourcePeer::doSelectRS( $c ); $result->next(); $row = $result->getRow(); - + while ($row = $result->getRow()) { if ((trim( $pProUid ) == trim( $row[1] )) && ($row[2] == 'mysql')) { $connections[] = Array ('DBS_UID' => $row[0],'DBS_NAME' => '[' . $row[3] . '] ' . $row[2] . ': ' . $row[4] @@ -335,7 +335,12 @@ class dbConnections ); break; case 'oracle': - $encodes = Array (); + $encodes = array ( + array ("UTF8", "UTF8 - Unicode 3.0 UTF-8 Universal character set CESU-8 compliant"), + array ("UTFE", "UTFE - EBCDIC form of Unicode 3.0 UTF-8 Universal character set"), + array ("AL16UTF16", "AL16UTF16 - Unicode 3.1 UTF-16 Universal character set"), + array ("AL32UTF8", "AL32UTF8 - Unicode 3.1 UTF-8 Universal character set") + ); break; } From 914537d4459a899e493e2f2c3757f8198b4ad766 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Mon, 1 Jun 2015 13:58:50 -0400 Subject: [PATCH 02/23] PM-2828 "In the BPMN Designer, can not connect..." SOLVED --- workflow/engine/classes/class.net.php | 21 +++++++++---------- workflow/engine/classes/class.pmFunctions.php | 9 +++++++- workflow/engine/classes/class.pmScript.php | 11 +++++----- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/workflow/engine/classes/class.net.php b/workflow/engine/classes/class.net.php index 4091f5ffe..d7901502a 100755 --- a/workflow/engine/classes/class.net.php +++ b/workflow/engine/classes/class.net.php @@ -206,7 +206,7 @@ class NET * * @return void */ - public function tryConnectServer($pDbDriver, array $arrayServerData = array()) + public function tryConnectServer($pDbDriver, array $arrayServerData = array(), $dbsEncode = "") { G::LoadSystem('inputfilter'); $filter = new InputFilter(); @@ -224,8 +224,8 @@ class NET if ($arrayServerData["connectionType"] == "TNS" || $arrayServerData["DBS_TYPEORACLE"] == "TNS") { $flagTns=1; }else{ - $flagTns=0; - } + $flagTns=0; + } }else{ $flagTns=0; } @@ -291,9 +291,9 @@ class NET if ($flagTns == 0) { $this->db_port = ($this->db_port == "" || $this->db_port == 0)? "1521" : $this->db_port; - $cnn = @oci_connect($this->db_user, $this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))"); + $cnn = @oci_connect($this->db_user, $this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))", $dbsEncode); } else { - $cnn = @oci_connect($this->db_user, $this->db_passwd, $arrayServerData["tns"]); + $cnn = @oci_connect($this->db_user, $this->db_passwd, $arrayServerData["tns"], $dbsEncode); } if ($cnn) { @@ -329,7 +329,7 @@ class NET * * @return void */ - public function tryOpenDataBase($pDbDriver, array $arrayServerData = array()) + public function tryOpenDataBase($pDbDriver, array $arrayServerData = array(), $dbsEncode = "") { G::LoadSystem('inputfilter'); $filter = new InputFilter(); @@ -349,8 +349,8 @@ class NET if ($arrayServerData["connectionType"] == "TNS" || $arrayServerData["DBS_TYPEORACLE"] == "TNS") { $flagTns=1; }else{ - $flagTns=0; - } + $flagTns=0; + } }else{ $flagTns=0; } @@ -434,9 +434,9 @@ class NET if ($flagTns == 0) { $this->db_port = ($this->db_port == "" || $this->db_port == 0)? "1521" : $this->db_port; - $cnn = @oci_connect($this->db_user, $this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))"); + $cnn = @oci_connect($this->db_user, $this->db_passwd, "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=$this->ip) (PORT=$this->db_port) )) (CONNECT_DATA=(SERVICE_NAME=$this->db_sourcename)))", $dbsEncode); } else { - $cnn = @oci_connect($this->db_user, $this->db_passwd, $arrayServerData["tns"]); + $cnn = @oci_connect($this->db_user, $this->db_passwd, $arrayServerData["tns"], $dbsEncode); } if ($cnn) { @@ -592,4 +592,3 @@ class Stat $this->status = false; } } - diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 555e04870..ac2a8b223 100755 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -242,6 +242,7 @@ function executeQuery ($SqlStatement, $DBConnectionUID = 'workflow', $aParameter { $con = Propel::getConnection( $DBConnectionUID ); $con->begin(); + try { $statement = trim( $SqlStatement ); $statement = str_replace( '(', '', $statement ); @@ -278,7 +279,13 @@ function executeQuery ($SqlStatement, $DBConnectionUID = 'workflow', $aParameter break; } } else { - $result = executeQueryOci( $SqlStatement, $con, $aParameter ); + $dataEncode = $con->getDSN(); + + if (isset($dataEncode["encoding"]) && $dataEncode["encoding"] != "") { + $result = executeQueryOci($SqlStatement, $con, $aParameter, $dataEncode["encoding"]); + } else { + $result = executeQueryOci($SqlStatement, $con, $aParameter); + } } return $result; diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index 326f7d8d5..24da4f0aa 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -493,7 +493,7 @@ class PMScript $sScript .= substr( $this->sScript, $iAux ); if(preg_match('/\b(or|and|xor)\b/i' , $sScript)) { $sScript = "( ".$sScript." )"; - } + } $sScript = '$bResult = ' . $sScript . ';'; // checks if the syntax is valid or if the variables in that condition has been previously defined if ($this->validSyntax( $sScript ) && $variableIsDefined) { @@ -695,7 +695,7 @@ function getEngineDataBaseName ($connection) * @param type $sql * @param type $connection */ -function executeQueryOci ($sql, $connection, $aParameter = array()) +function executeQueryOci ($sql, $connection, $aParameter = array(), $dbsEncode = "") { $aDNS = $connection->getDSN(); @@ -710,12 +710,12 @@ function executeQueryOci ($sql, $connection, $aParameter = array()) if ($flagTns == 0) { // if not default port - $conn = oci_connect($sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse); + $conn = oci_connect($sUsername, $sPassword, $sHostspec . ":" . $sPort . "/" . $sDatabse, $dbsEncode); } else { - $conn = oci_connect($sUsername, $sPassword, $sHostspec); + $conn = oci_connect($sUsername, $sPassword, $sHostspec, $dbsEncode); } } else { - $conn = oci_connect( $sUsername, $sPassword, $sHostspec . "/" . $sDatabse ); + $conn = oci_connect( $sUsername, $sPassword, $sHostspec . "/" . $sDatabse, $dbsEncode); } if (! $conn) { @@ -786,4 +786,3 @@ function executeQueryOci ($sql, $connection, $aParameter = array()) break; } } - From 42faa45f671a9a9e78b48efb2d7891b84b4a3587 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Mon, 1 Jun 2015 14:15:53 -0400 Subject: [PATCH 03/23] PM-2835 "Adicionar los siguientes features..." SOLVED Issue: Adicionar los siguientes features la posibilidad de seleccionarse en la licencia (features): - Code Scanner - Multiple Email Servers - Mobile Fields Cause: Nuevo validacion de licencia para features Solution: Se agrego validacion de licencia para los features especificados --- gulliver/bin/tasks/pakeGulliver.php | 2 +- gulliver/system/class.codeScanner.php | 6 +-- workflow/engine/bin/tasks/cliWorkspaces.php | 18 +++++++- workflow/engine/classes/class.case.php | 30 ++++++------ workflow/engine/classes/class.processes.php | 12 +++-- workflow/engine/classes/class.wsBase.php | 40 ++++++++++------ workflow/engine/classes/class.wsTools.php | 46 ++++++++++++++----- workflow/engine/classes/model/EmailServer.php | 22 --------- workflow/engine/controllers/designer.php | 2 +- .../methods/emailServer/emailServer.php | 4 ++ .../processes/processes_Import_Ajax.php | 19 ++++---- .../engine/methods/setup/pluginsChange.php | 30 ++++++------ .../methods/setup/pluginsImportFile.php | 22 +++++---- .../engine/methods/triggers/triggers_Save.php | 20 ++++---- .../templates/emailServer/emailServer.js | 28 ++++++----- 15 files changed, 178 insertions(+), 123 deletions(-) diff --git a/gulliver/bin/tasks/pakeGulliver.php b/gulliver/bin/tasks/pakeGulliver.php index 747897e4b..a26524f29 100755 --- a/gulliver/bin/tasks/pakeGulliver.php +++ b/gulliver/bin/tasks/pakeGulliver.php @@ -2736,7 +2736,7 @@ function run_check_plugin_disabled_code($task, $args) $arrayFoundDisabledCode = array_merge($cs->checkDisabledCode("FILE", PATH_PLUGINS . $pluginName . ".php"), $cs->checkDisabledCode("PATH", PATH_PLUGINS . $pluginName)); - if (count($arrayFoundDisabledCode) > 0) { + if (!empty($arrayFoundDisabledCode)) { $strFoundDisabledCode .= (($strFoundDisabledCode != "")? "\n\n" : "") . "> " . $pluginName; foreach ($arrayFoundDisabledCode as $key2 => $value2) { diff --git a/gulliver/system/class.codeScanner.php b/gulliver/system/class.codeScanner.php index b02c7dd01..cb12e9a37 100644 --- a/gulliver/system/class.codeScanner.php +++ b/gulliver/system/class.codeScanner.php @@ -80,7 +80,7 @@ class CodeScanner public function existsDisabledCode() { try { - return count($this->arrayDisabledCode) > 0; + return !empty($this->arrayDisabledCode); } catch (Exception $e) { throw $e; } @@ -174,7 +174,7 @@ class CodeScanner $arrayAux = $this->checkDisabledCodeInSource($source); - if (count($arrayAux) > 0) { + if (!empty($arrayAux)) { $arrayFoundCode["source"] = $arrayAux; } break; @@ -202,7 +202,7 @@ class CodeScanner $arrayAux = $this->checkDisabledCodeInSource($source); - if (count($arrayAux) > 0) { + if (!empty($arrayAux)) { $arrayFoundCode[$path] = $arrayAux; } } diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index d019270ef..2b0ba44a7 100755 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -595,12 +595,24 @@ function run_check_workspace_disabled_code($args, $opts) foreach ($arrayWorkspace as $value) { $workspace = $value; + if (!defined("SYS_SYS")) { + define("SYS_SYS", $workspace->name); + } + + if (!defined("PATH_DATA_SITE")) { + define("PATH_DATA_SITE", PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP); + } + + if (!$workspace->pmLicensedFeaturesVerifyFeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=")) { + throw new Exception("Error: This command cannot be used because your license does not include it."); + } + echo "> Workspace: " . $workspace->name . "\n"; try { $arrayFoundDisabledCode = $workspace->getDisabledCode(); - if (count($arrayFoundDisabledCode) > 0) { + if (!empty($arrayFoundDisabledCode)) { $strFoundDisabledCode = ""; foreach ($arrayFoundDisabledCode as $value2) { @@ -630,6 +642,8 @@ function run_check_workspace_disabled_code($args, $opts) } catch (Exception $e) { echo "Errors to check disabled code: " . CLI::error($e->getMessage()) . "\n\n"; } + + $workspace->close(); } echo "Done!\n"; @@ -672,4 +686,4 @@ function migrate_new_cases_lists($command, $args) { } } } -/*----------------------------------********---------------------------------*/ \ No newline at end of file +/*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 1e3a1dcf9..942ccefe9 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -3373,25 +3373,29 @@ class Cases /*----------------------------------********---------------------------------*/ $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); + $strFoundDisabledCode = ""; /*----------------------------------********---------------------------------*/ foreach ($aTriggers as $aTrigger) { - //Check disabled code /*----------------------------------********---------------------------------*/ - $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $aTrigger["TRI_WEBBOT"]); + if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=")) { + //Check disabled code + $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $aTrigger["TRI_WEBBOT"]); - if (count($arrayFoundDisabledCode) > 0) { - $strCodeAndLine = ""; + if (!empty($arrayFoundDisabledCode)) { + $strCodeAndLine = ""; - foreach ($arrayFoundDisabledCode["source"] as $key => $value) { - $strCodeAndLine .= (($strCodeAndLine != "")? ", " : "") . G::LoadTranslation("ID_DISABLED_CODE_CODE_AND_LINE", array($key, implode(", ", $value))); + foreach ($arrayFoundDisabledCode["source"] as $key => $value) { + $strCodeAndLine .= (($strCodeAndLine != "")? ", " : "") . G::LoadTranslation("ID_DISABLED_CODE_CODE_AND_LINE", array($key, implode(", ", $value))); + } + + $strFoundDisabledCode .= "
- " . $aTrigger["TRI_TITLE"] . ": " . $strCodeAndLine; + continue; } - - $strFoundDisabledCode .= "
- " . $aTrigger["TRI_TITLE"] . ": " . $strCodeAndLine; - continue; } /*----------------------------------********---------------------------------*/ + //Execute $bExecute = true; @@ -6745,7 +6749,7 @@ class Cases $rows[] = $rs->getRow(); } - if ($PRO_UID != null) { + if ($PRO_UID != null) { //Add supervisor // Users $oCriteria = new Criteria('workflow'); @@ -6765,10 +6769,10 @@ class Cases $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $flagSupervisors = false; - if ($oDataset->next()) { + if ($oDataset->next()) { if (!in_array($USR_UID,$row)) { $rows[] = $oDataset->getRow(); - } + } $flagSupervisors = true; } @@ -6908,7 +6912,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/class.processes.php b/workflow/engine/classes/class.processes.php index 792e124e8..3076814c7 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -5085,10 +5085,15 @@ class Processes $arrayDisabledCode = array(); + /*----------------------------------********---------------------------------*/ + if (!PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=")) { + //Return + return $arrayDisabledCode; + } + //Set variables - /*----------------------------------********---------------------------------*/ $cs = new CodeScanner("DISABLED_CODE"); - /*----------------------------------********---------------------------------*/ + $delimiter = DBAdapter::getStringDelimiter(); //Processes @@ -5144,7 +5149,7 @@ class Processes //Check disabled code $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $triggerWebbot); - if (count($arrayFoundDisabledCode) > 0) { + if (!empty($arrayFoundDisabledCode)) { if (!isset($arrayDisabledCode[$processUid])) { $arrayDisabledCode[$processUid] = array( "processUid" => $processUid, @@ -5161,6 +5166,7 @@ class Processes } } } + /*----------------------------------********---------------------------------*/ //Return return $arrayDisabledCode; diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index ea7aa685b..b33bab65f 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -914,31 +914,41 @@ class wsBase $aAttachment = null, $showMessage = true, $delIndex = 0, - $config = array() + $config = array() ) { try { if (!class_exists('System')) { G::LoadClass('system'); } - $licensedFeatures = & PMLicensedFeatures::getSingleton(); + /*----------------------------------********---------------------------------*/ - if (!empty($config) && $licensedFeatures->verifyfeature('nKaNTNuT1MzK0RsMEtXTnYzR09ucHF2WGNuS0hRdDBBak42WXJhNVVOOG1INEVoaU1EaTllbjBBeEJNeG9wRVJ6NmxQelhyVTBvdThzPQ==')) { - if(!is_array($config)){ - $emailServer = new EmailServer(); - $criteria = $emailServer->getSelAllColumns(); - $criteria->add(EmailServerPeer::MESS_UID, $config, CRITERIA::EQUAL); - $criteria = EmailServerPeer::doSelectRS($criteria); - $criteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); - while ($criteria->next()) { - $row = $criteria->getRow(); - $config = $row; - $config['SMTPSecure'] = $row['SMTPSECURE']; + if (PMLicensedFeatures::getSingleton()->verifyfeature("zIKRGpDM3pjcHFsWGplNDN0dTl5bGN3UTNiOWdQU0E5Q05QTksrU1ladWQ0VT0=")) { + $arrayConfigAux = array(); + + if (is_array($config)) { + $arrayConfigAux = $config; + } else { + $emailServer = new \ProcessMaker\BusinessModel\EmailServer(); + + $criteria = $emailServer->getEmailServerCriteria(); + + $criteria->add(EmailServerPeer::MESS_UID, $config, Criteria::EQUAL); + + $rsCriteria = EmailServerPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $arrayConfigAux = $row; + $arrayConfigAux["SMTPSecure"] = $row["SMTPSECURE"]; } } - $aSetup = $config; + + $aSetup = (!empty($arrayConfigAux))? $arrayConfigAux : System::getEmailConfiguration(); } else { /*----------------------------------********---------------------------------*/ - $aSetup = System::getEmailConfiguration(); + $aSetup = (is_array($config) && !empty($config))? $config : System::getEmailConfiguration(); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 944ab1734..27131d0a0 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -795,10 +795,11 @@ class workspaceTools //Insert the first record $arrayData = array(); - $emailSever = new \ProcessMaker\BusinessModel\EmailServer(); + $emailSever = new \ProcessMaker\BusinessModel\EmailServer(); + $emailConfiguration = System::getEmailConfiguration(); - if (count($emailConfiguration) > 0) { + if (!empty($emailConfiguration)) { $arrayData["MESS_ENGINE"] = $emailConfiguration["MESS_ENGINE"]; switch ($emailConfiguration["MESS_ENGINE"]) { @@ -830,18 +831,16 @@ class workspaceTools $arrayData = $emailSever->create($arrayData); } else { /*----------------------------------********---------------------------------*/ - if (true) { - // - } else { + if (!PMLicensedFeatures::getSingleton()->verifyfeature("zIKRGpDM3pjcHFsWGplNDN0dTl5bGN3UTNiOWdQU0E5Q05QTksrU1ladWQ0VT0=")) { /*----------------------------------********---------------------------------*/ - $arrayData["MESS_ENGINE"] = "MAIL"; - $arrayData["MESS_SERVER"] = ""; - $arrayData["MESS_ACCOUNT"] = ""; - $arrayData["MESS_PASSWORD"] = ""; - $arrayData["MAIL_TO"] = ""; - $arrayData["MESS_DEFAULT"] = 1; + $arrayData["MESS_ENGINE"] = "MAIL"; + $arrayData["MESS_SERVER"] = ""; + $arrayData["MESS_ACCOUNT"] = ""; + $arrayData["MESS_PASSWORD"] = ""; + $arrayData["MAIL_TO"] = ""; + $arrayData["MESS_DEFAULT"] = 1; - $arrayData = $emailSever->create2($arrayData); + $arrayData = $emailSever->create2($arrayData); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ @@ -2202,5 +2201,28 @@ class workspaceTools return true; } } + + /** + * Verify feature + * + * @param string $featureName Feature name + * + * return bool Return true if is valid the feature, false otherwise + */ + public function pmLicensedFeaturesVerifyFeature($featureName) + { + try { + $this->initPropel(true); + + $flag = PMLicensedFeatures::getSingleton()->verifyfeature($featureName); + + $this->close(); + + //Return + return $flag; + } catch (Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/classes/model/EmailServer.php b/workflow/engine/classes/model/EmailServer.php index 8f0a58caf..f961d4f1a 100644 --- a/workflow/engine/classes/model/EmailServer.php +++ b/workflow/engine/classes/model/EmailServer.php @@ -1,27 +1,5 @@ addSelectColumn( EmailServerPeer::MESS_UID); - $criteria->addSelectColumn( EmailServerPeer::MESS_ENGINE); - $criteria->addSelectColumn( EmailServerPeer::MESS_SERVER); - $criteria->addSelectColumn( EmailServerPeer::MESS_PORT); - $criteria->addSelectColumn( EmailServerPeer::MESS_RAUTH); - $criteria->addSelectColumn( EmailServerPeer::MESS_ACCOUNT); - $criteria->addSelectColumn( EmailServerPeer::MESS_PASSWORD); - $criteria->addSelectColumn( EmailServerPeer::MESS_FROM_MAIL); - $criteria->addSelectColumn( EmailServerPeer::MESS_FROM_NAME); - $criteria->addSelectColumn( EmailServerPeer::SMTPSECURE); - $criteria->addSelectColumn( EmailServerPeer::MESS_TRY_SEND_INMEDIATLY); - $criteria->addSelectColumn( EmailServerPeer::MAIL_TO); - $criteria->addSelectColumn( EmailServerPeer::MESS_DEFAULT); - return $criteria; - } } diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index f0faf373d..ba1c94551 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -66,7 +66,7 @@ class Designer extends Controller if ($licensedFeatures->verifyfeature('7TTeDBQeWRoZTZKYjh4eFpYUlRDUUEyVERPU3FxellWank=')) { $consolidated = 1; } - $enterprise = 1; + $enterprise = ($licensedFeatures->verifyfeature("Jb0N3dSZHVhZ1JNOEFZaElqdm15Y050Wmh5S0FEVEI0ckQ="))? 1 : 0; /*----------------------------------********---------------------------------*/ $this->setVar('prj_uid', $proUid); diff --git a/workflow/engine/methods/emailServer/emailServer.php b/workflow/engine/methods/emailServer/emailServer.php index 7f65cf1dd..237f9e136 100644 --- a/workflow/engine/methods/emailServer/emailServer.php +++ b/workflow/engine/methods/emailServer/emailServer.php @@ -18,5 +18,9 @@ $headPublisher->addContent("emailServer/emailServer"); //Adding a HTML file $headPublisher->addExtJsScript("emailServer/emailServer", false); //Adding a JavaScript file $headPublisher->assign("CONFIG", $arrayConfig); +/*----------------------------------********---------------------------------*/ +$headPublisher->assign("EMAILSERVER_LICENSED", (PMLicensedFeatures::getSingleton()->verifyfeature("zIKRGpDM3pjcHFsWGplNDN0dTl5bGN3UTNiOWdQU0E5Q05QTksrU1ladWQ0VT0="))? 1 : 0); +/*----------------------------------********---------------------------------*/ + G::RenderPage("publish", "extJs"); diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index a9c75b6e6..392556d99 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -26,7 +26,9 @@ use \ProcessMaker\Importer\XmlImporter; ini_set("max_execution_time", 0); -if (isset($_FILES["PROCESS_FILENAME"]) && +/*----------------------------------********---------------------------------*/ +if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=") && + isset($_FILES["PROCESS_FILENAME"]) && pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION) == "pm" && $_FILES["PROCESS_FILENAME"]["error"] == 0 ) { @@ -39,12 +41,13 @@ if (isset($_FILES["PROCESS_FILENAME"]) && $data = unserialize($content); fclose($fh); - if (is_object($data) && isset($data->triggers) && is_array($data->triggers) && count($data->triggers) > 0) { - /*----------------------------------********---------------------------------*/ + if (is_object($data) && isset($data->triggers) && is_array($data->triggers) && !empty($data->triggers)) { G::LoadClass("codeScanner"); $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); + $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); + $strFoundDisabledCode = ""; foreach ($data->triggers as $value) { @@ -52,7 +55,7 @@ if (isset($_FILES["PROCESS_FILENAME"]) && $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $arrayTriggerData["TRI_WEBBOT"]); - if (count($arrayFoundDisabledCode) > 0) { + if (!empty($arrayFoundDisabledCode)) { $strCodeAndLine = ""; foreach ($arrayFoundDisabledCode["source"] as $key2 => $value2) { @@ -71,7 +74,6 @@ if (isset($_FILES["PROCESS_FILENAME"]) && echo G::json_encode($response); exit(0); } - /*----------------------------------********---------------------------------*/ } } catch (Exception $e) { $response["status"] = "ERROR"; @@ -82,6 +84,7 @@ if (isset($_FILES["PROCESS_FILENAME"]) && exit(0); } } +/*----------------------------------********---------------------------------*/ if (isset($_FILES["PROCESS_FILENAME"]) && pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION) == "pmx" @@ -225,7 +228,7 @@ if ($action == "uploadFileNewProcess") { //1 -exist process $result->ExistGroupsInDatabase = ""; //"" -Default //0 -Dont exist process - //1 -exist process + //1 -exist process $optionGroupExistInDatabase = isset( $_REQUEST["optionGroupExistInDatabase"] ) ? $_REQUEST["optionGroupExistInDatabase"] : null; //!Upload file @@ -254,8 +257,8 @@ if ($action == "uploadFileNewProcess") { //if file is a .pm file continues normally the importing if ($processFileType == "pm") { $oData = $oProcess->getProcessData( $path . $filename ); - } - + } + $importer->throwExceptionIfExistsReservedWordsSql($oData); //!Upload file diff --git a/workflow/engine/methods/setup/pluginsChange.php b/workflow/engine/methods/setup/pluginsChange.php index 1ba948ccb..ce87b591d 100755 --- a/workflow/engine/methods/setup/pluginsChange.php +++ b/workflow/engine/methods/setup/pluginsChange.php @@ -52,25 +52,27 @@ if ($handle = opendir( PATH_PLUGINS )) { if (is_file(PATH_PLUGINS . $pluginName . ".php") && is_dir(PATH_PLUGINS . $pluginName)) { /*----------------------------------********---------------------------------*/ - //Check disabled code - G::LoadClass("codeScanner"); - /*----------------------------------********---------------------------------*/ + if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=")) { + //Check disabled code + G::LoadClass("codeScanner"); - $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); - /*----------------------------------********---------------------------------*/ - $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); - - $arrayFoundDisabledCode = array_merge($cs->checkDisabledCode("FILE", PATH_PLUGINS . $pluginName . ".php"), $cs->checkDisabledCode("PATH", PATH_PLUGINS . $pluginName)); + $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); - if (count($arrayFoundDisabledCode) > 0) { - $response = array(); - $response["status"] = "DISABLED-CODE"; - $response["message"] = G::LoadTranslation("ID_DISABLED_CODE_PLUGIN"); + $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); - echo G::json_encode($response); - exit(0); + $arrayFoundDisabledCode = array_merge($cs->checkDisabledCode("FILE", PATH_PLUGINS . $pluginName . ".php"), $cs->checkDisabledCode("PATH", PATH_PLUGINS . $pluginName)); + + if (!empty($arrayFoundDisabledCode)) { + $response = array(); + $response["status"] = "DISABLED-CODE"; + $response["message"] = G::LoadTranslation("ID_DISABLED_CODE_PLUGIN"); + + echo G::json_encode($response); + exit(0); + } } /*----------------------------------********---------------------------------*/ + //print "change to ENABLED"; require_once($path); $details = $oPluginRegistry->getPluginDetails($pluginFile); diff --git a/workflow/engine/methods/setup/pluginsImportFile.php b/workflow/engine/methods/setup/pluginsImportFile.php index e5745908d..e391a2358 100755 --- a/workflow/engine/methods/setup/pluginsImportFile.php +++ b/workflow/engine/methods/setup/pluginsImportFile.php @@ -238,20 +238,24 @@ try { unset( $oClass ); } $res = $tar->extract( $path ); + /*----------------------------------********---------------------------------*/ - //Check disabled code - G::LoadClass("codeScanner"); - - $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); - $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); + if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=")) { + //Check disabled code + G::LoadClass("codeScanner"); - $arrayFoundDisabledCode = array_merge($cs->checkDisabledCode("FILE", $path . $pluginFile), $cs->checkDisabledCode("PATH", $path . $sClassName)); + $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); - if (count($arrayFoundDisabledCode) > 0) { - throw new Exception(G::LoadTranslation("ID_DISABLED_CODE_PLUGIN")); + $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); + + $arrayFoundDisabledCode = array_merge($cs->checkDisabledCode("FILE", $path . $pluginFile), $cs->checkDisabledCode("PATH", $path . $sClassName)); + + if (!empty($arrayFoundDisabledCode)) { + throw new Exception(G::LoadTranslation("ID_DISABLED_CODE_PLUGIN")); + } } /*----------------------------------********---------------------------------*/ - + //Check if is enterprise plugin $sContent = file_get_contents( $path . $pluginFile ); $chain = preg_quote( 'extends enterprisePlugin' ); diff --git a/workflow/engine/methods/triggers/triggers_Save.php b/workflow/engine/methods/triggers/triggers_Save.php index b7abc6627..7f84e9a8a 100755 --- a/workflow/engine/methods/triggers/triggers_Save.php +++ b/workflow/engine/methods/triggers/triggers_Save.php @@ -67,9 +67,7 @@ if (isset( $sfunction ) && $sfunction == 'lookforNameTrigger') { echo $flag; } else { G::LoadClass("processMap"); - /*----------------------------------********---------------------------------*/ - G::LoadClass("codeScanner"); - /*----------------------------------********---------------------------------*/ + $response = array(); try { @@ -82,15 +80,20 @@ if (isset( $sfunction ) && $sfunction == 'lookforNameTrigger') { $value = $_POST; } - if (isset($value["TRI_WEBBOT"])) { - /*----------------------------------********---------------------------------*/ + /*----------------------------------********---------------------------------*/ + if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=") && + isset($value["TRI_WEBBOT"]) + ) { //Check disabled code + G::LoadClass("codeScanner"); + $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); + $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $value["TRI_WEBBOT"]); - if (count($arrayFoundDisabledCode) > 0) { + if (!empty($arrayFoundDisabledCode)) { $strCodeAndLine = ""; foreach ($arrayFoundDisabledCode["source"] as $key => $value) { @@ -99,8 +102,9 @@ if (isset( $sfunction ) && $sfunction == 'lookforNameTrigger') { throw new Exception(G::LoadTranslation("ID_DISABLED_CODE_TRIGGER", array($strCodeAndLine))); } - /*----------------------------------********---------------------------------*/ } + /*----------------------------------********---------------------------------*/ + $swCreate = true; if ($value['TRI_UID'] != '') { $oTrigger->load( $value['TRI_UID'] ); @@ -108,7 +112,7 @@ if (isset( $sfunction ) && $sfunction == 'lookforNameTrigger') { $oTrigger->create( $value ); $value['TRI_UID'] = $oTrigger->getTriUid(); $swCreate = false; - } + } $oTrigger->update( $value ); if($swCreate){ //Add Audit Log diff --git a/workflow/engine/templates/emailServer/emailServer.js b/workflow/engine/templates/emailServer/emailServer.js index 540afe30b..91bed9ee9 100644 --- a/workflow/engine/templates/emailServer/emailServer.js +++ b/workflow/engine/templates/emailServer/emailServer.js @@ -40,19 +40,18 @@ emailServer.application = { /*----------------------------------********---------------------------------*/ if (Ext.getCmp("chkEmailServerDefault").checked) { - /*----------------------------------********---------------------------------*/ + /*----------------------------------********---------------------------------*/ var emailDefault = 1; - /*----------------------------------********---------------------------------*/ + /*----------------------------------********---------------------------------*/ } else { var emailDefault = 0; } /*----------------------------------********---------------------------------*/ switch (option) { - case "INS": var typeEmailEngine = Ext.getCmp("cboEmailEngine").getValue(); - + if (typeEmailEngine == "PHPMAILER") { var rdoGrpOption = Ext.getCmp("rdoGrpSmtpSecure").getValue(); @@ -301,7 +300,7 @@ emailServer.application = { emailServerSetMailTo(Ext.getCmp("chkSendTestMail").checked); Ext.getCmp("txtMailTo").setValue(record.get("MAIL_TO")); - + /*----------------------------------********---------------------------------*/ if (parseInt(record.get("MESS_DEFAULT")) == 1) { /*----------------------------------********---------------------------------*/ @@ -311,7 +310,7 @@ emailServer.application = { Ext.getCmp("chkEmailServerDefault").setValue(false); } /*----------------------------------********---------------------------------*/ - + winData.setTitle(_("ID_EMAIL_SERVER_EDIT")); winData.setDisabled(false); winData.show(); @@ -610,7 +609,7 @@ emailServer.application = { } }); - + var txtAccountFrom = new Ext.form.TextField({ id: "txtAccountFrom", name: "txtAccountFrom", @@ -619,7 +618,7 @@ emailServer.application = { vtype: "emailUrlValidation" }); - + var txtPassword = new Ext.form.TextField({ id: "txtPassword", name: "txtPassword", @@ -682,14 +681,14 @@ emailServer.application = { hidden: true }); - + var chkEmailServerDefault = new Ext.form.Checkbox({ id: "chkEmailServerDefault", name: "chkEmailServerDefault", boxLabel: _("ID_EMAIL_SERVER_THIS_CONFIGURATION_IS_DEFAULT") }); - + var btnTest = new Ext.Action({ id: "btnTest", text: _("ID_TEST"), @@ -1049,10 +1048,14 @@ emailServer.application = { var arrayAux1 = []; /*----------------------------------********---------------------------------*/ - arrayAux1.push(btnNew); - arrayAux1.push("-"); + if (EMAILSERVER_LICENSED) { + arrayAux1.push(btnNew); + arrayAux1.push("-"); + } /*----------------------------------********---------------------------------*/ + arrayAux1.push(btnEdit); + /*----------------------------------********---------------------------------*/ arrayAux1.push(btnDelete); arrayAux1.push("->"); @@ -1102,6 +1105,7 @@ emailServer.application = { var arrayAux2 = []; arrayAux2.push(btnEdit); + /*----------------------------------********---------------------------------*/ arrayAux2.push(btnDelete); /*----------------------------------********---------------------------------*/ From 54789137995455f5c1eaddf42add57d5f234ee87 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Mon, 1 Jun 2015 14:53:56 -0400 Subject: [PATCH 04/23] PM-2835 "Adicionar los siguientes features..." SOLVED Issue: Adicionar los siguientes features la posibilidad de seleccionarse en la licencia (features): - Code Scanner - Multiple Email Servers - Mobile Fields Cause: Nuevo validacion de licencia para features Solution: Se agrego validacion de licencia para los features especificados --- workflow/engine/classes/class.wsBase.php | 28 ++++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index b33bab65f..3dc7a3163 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -922,33 +922,37 @@ class wsBase } /*----------------------------------********---------------------------------*/ - if (PMLicensedFeatures::getSingleton()->verifyfeature("zIKRGpDM3pjcHFsWGplNDN0dTl5bGN3UTNiOWdQU0E5Q05QTksrU1ladWQ0VT0=")) { + if (!empty($config)) { $arrayConfigAux = array(); if (is_array($config)) { - $arrayConfigAux = $config; + if (PMLicensedFeatures::getSingleton()->verifyfeature("nKaNTNuT1MzK0RsMEtXTnYzR09ucHF2WGNuS0hRdDBBak42WXJhNVVOOG1INEVoaU1EaTllbjBBeEJNeG9wRVJ6NmxQelhyVTBvdThzPQ==")) { + $arrayConfigAux = $config; + } } else { - $emailServer = new \ProcessMaker\BusinessModel\EmailServer(); + if (PMLicensedFeatures::getSingleton()->verifyfeature("zIKRGpDM3pjcHFsWGplNDN0dTl5bGN3UTNiOWdQU0E5Q05QTksrU1ladWQ0VT0=")) { + $emailServer = new \ProcessMaker\BusinessModel\EmailServer(); - $criteria = $emailServer->getEmailServerCriteria(); + $criteria = $emailServer->getEmailServerCriteria(); - $criteria->add(EmailServerPeer::MESS_UID, $config, Criteria::EQUAL); + $criteria->add(EmailServerPeer::MESS_UID, $config, Criteria::EQUAL); - $rsCriteria = EmailServerPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rsCriteria = EmailServerPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); - $arrayConfigAux = $row; - $arrayConfigAux["SMTPSecure"] = $row["SMTPSECURE"]; + $arrayConfigAux = $row; + $arrayConfigAux["SMTPSecure"] = $row["SMTPSECURE"]; + } } } $aSetup = (!empty($arrayConfigAux))? $arrayConfigAux : System::getEmailConfiguration(); } else { /*----------------------------------********---------------------------------*/ - $aSetup = (is_array($config) && !empty($config))? $config : System::getEmailConfiguration(); + $aSetup = System::getEmailConfiguration(); /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ From 873a58f0950ed487c2f058ed6c177c123664f471 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Mon, 1 Jun 2015 16:14:39 -0400 Subject: [PATCH 05/23] PM-2835 "Adicionar los siguientes features..." SOLVED Issue: Adicionar los siguientes features la posibilidad de seleccionarse en la licencia (features): - Code Scanner - Multiple Email Servers - Mobile Fields Cause: Nuevo validacion de licencia para features Solution: Se agrego validacion de licencia para los features especificados --- .../engine/classes/class.licensedFeatures.php | 67 ++++++++++++++++--- workflow/engine/controllers/designer.php | 10 ++- 2 files changed, 67 insertions(+), 10 deletions(-) diff --git a/workflow/engine/classes/class.licensedFeatures.php b/workflow/engine/classes/class.licensedFeatures.php index ec32befda..a5a647038 100644 --- a/workflow/engine/classes/class.licensedFeatures.php +++ b/workflow/engine/classes/class.licensedFeatures.php @@ -146,6 +146,57 @@ class PMLicensedFeatures "type" => "features", "url" => "", "version" => "" + ), + 7 => array( + "description" => "-", + "enabled" => false, + "id" => "codeScanner", + "latest_version" => "", + "log" => null, + "name" => "codeScanner", + "nick" => "codeScanner", + "progress" => 0, + "publisher" => "Colosa", + "release_type" => "localRegistry", + "status" => "ready", + "store" => "00000000000000000000000000010007", + "type" => "features", + "url" => "", + "version" => "" + ), + 8 => array( + "description" => "-", + "enabled" => false, + "id" => "multipleEmailServers", + "latest_version" => "", + "log" => null, + "name" => "multipleEmailServers", + "nick" => "multipleEmailServers", + "progress" => 0, + "publisher" => "Colosa", + "release_type" => "localRegistry", + "status" => "ready", + "store" => "00000000000000000000000000010009", + "type" => "features", + "url" => "", + "version" => "" + ), + 9 => array( + "description" => "-", + "enabled" => false, + "id" => "mobileFields", + "latest_version" => "", + "log" => null, + "name" => "mobileFields", + "nick" => "mobileFields", + "progress" => 0, + "publisher" => "Colosa", + "release_type" => "localRegistry", + "status" => "ready", + "store" => "00000000000000000000000000010008", + "type" => "features", + "url" => "", + "version" => "" ) ); @@ -208,7 +259,7 @@ class PMLicensedFeatures $this->featuresDetails[$value[0]]->enabled = $enable; return $enable; } - + public function addNewFeatures ($data) { $newFeaturesList = $this->newFeatures; @@ -225,14 +276,14 @@ class PMLicensedFeatures $rs->next(); $row = $rs->getRow(); $ids = array(); - if(sizeof($row)) { + if(sizeof($row)) { while (is_array($row)) { $ids[] = $row[0]; $rs->next(); $row = $rs->getRow(); - } + } $toUpdate = array_diff($newFeaturesIds,$ids); - + if(sizeof($toUpdate)){ $newFeaturesListAux = array(); foreach($toUpdate as $index => $v) { @@ -241,10 +292,10 @@ class PMLicensedFeatures unset($newFeaturesList); $newFeaturesList = array_values($newFeaturesListAux); } else { - return $data; + return $data; } } - + $i = 0; foreach($newFeaturesList as $k => $newFeature){ $newData[] = array ( @@ -331,8 +382,8 @@ class PMLicensedFeatures ), 'action' => 1, ); - - $i++; + + $i++; } return array_merge($data, $newData); } diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index ba1c94551..d5e76e1bd 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -61,12 +61,18 @@ class Designer extends Controller $consolidated = 0; $enterprise = 0; + $distribution = 0; + /*----------------------------------********---------------------------------*/ $licensedFeatures = & PMLicensedFeatures::getSingleton(); if ($licensedFeatures->verifyfeature('7TTeDBQeWRoZTZKYjh4eFpYUlRDUUEyVERPU3FxellWank=')) { $consolidated = 1; } - $enterprise = ($licensedFeatures->verifyfeature("Jb0N3dSZHVhZ1JNOEFZaElqdm15Y050Wmh5S0FEVEI0ckQ="))? 1 : 0; + $enterprise = 1; + + if ($licensedFeatures->verifyfeature("Jb0N3dSZHVhZ1JNOEFZaElqdm15Y050Wmh5S0FEVEI0ckQ=")) { + $distribution = 1; + } /*----------------------------------********---------------------------------*/ $this->setVar('prj_uid', $proUid); @@ -76,7 +82,7 @@ class Designer extends Controller $this->setVar('prj_readonly', $proReadOnly); $this->setVar('credentials', base64_encode(json_encode($clientToken))); $this->setVar('isDebugMode', $debug); - $this->setVar('distribution', file_exists(PATH_METHODS . "login/licenseUpdate.php")); + $this->setVar("distribution", $distribution); if ($debug) { if (! file_exists(PATH_HTML . "lib-dev/pmUI/build.cache")) { From fad04e533a2d77022123195daca54af42dc953db Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Tue, 2 Jun 2015 14:14:12 -0400 Subject: [PATCH 06/23] I updated the logos --- workflow/public_html/images/logopm3.png | Bin 9121 -> 10876 bytes .../public_html/images/processmaker.logo.jpg | Bin 22287 -> 6098 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/workflow/public_html/images/logopm3.png b/workflow/public_html/images/logopm3.png index df5f03fe0541c08e2504facabac3d87b743119c6..a6efc9a6e1257cc255b7cd28e7a3c6711b68b493 100644 GIT binary patch literal 10876 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 diff --git a/workflow/public_html/images/processmaker.logo.jpg b/workflow/public_html/images/processmaker.logo.jpg index 9d028cf3ed376df686ae0e182fe4bb5753abd0dd..42e462546fdf6949c92380098f85850d09c317b8 100755 GIT binary patch delta 5323 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 C77dmF literal 22287 zcmeHvcQ~9)*Z93w?=^_tB1K!h_g+Humcm*k?CK>1DMFACf+$Hu5Yc-HK|&BAM2}9C z=%ROi_pY?(d7t-vzw5iM@2_8md*;lUb7sz&cHeVmW{*A}jgvI1_&C@CfQH6d03QGV zVgP_Z0SE|iIF%I`3mhvqwsraKA2!Q_($!VKTx91uSJ z8!rrk1+ap+67UfOVQMh!1|NqIYz*%V2(yA2<757A>=Ody+yL++RIqWjMzHGHJ9{|0 z+dI3kDjA5fp4PE~JD|{rGk~A~Ohi&ZSW-ZO6$X-4d1nW4z01%J$9aaLX7wy!+ z2Soo2k3JtQ0>l`7E-UE(kfSAl6cYn%ZlFnz27w@e7#|;>0H2tEfS7`akcfhYjF^~= zhK`DghKh=gf*9kz2gi}W`w$W$A`(&(a#B)qYEn{CYP3g6eau4fKgr|iRVSPPboh%v{9)`^$?})H2Q*AEe@*h@|;*x<&H_aQxf~GdvZO!w4rBe!`Rj< zIPOJRWAF5)n3{>5cgUlR@}|D8TNGdmfzo1QWWvM65y6PS2BX9VC2(b@!V$a~MU9r= zt$xQhAx`UYw_DLl1~hPY;T0}iv;cUgMCv+0AyR2=RE$JD5MO?Z@b4wy{w2cE06+}I zlt}@|0qajQyH|E?If|Sg<_*j{clt$kz)dKUH*RNr?O%S?-8(`2{Fb@Me&_UI+}FVT z7digORxdRZPvygKl9c;Q<>Exhzyl?@c}LwB9U-42rF_dS2E0Iwogiyt&R8?uX#cc% z1W0eBhcF6E1hx9NzB+eHZe%BL-A+tYW4cA0z|W^}l(DvIEpR4ZeBn~2mcMt$Lj%

+ju4i+4HP?71frCH3Y| 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 From 400854098a34960c5ed2c5d533b01eeb970da7d1 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Tue, 2 Jun 2015 14:47:34 -0400 Subject: [PATCH 07/23] PM-2809 "Mejora del calculo de creacion de casos en el... (fix)" SOLVED Fix to update the SCH_END_DATE field --- .../engine/src/ProcessMaker/BusinessModel/CaseScheduler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php b/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php index d4a04ac6a..193e4cf33 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/CaseScheduler.php @@ -1010,7 +1010,7 @@ class CaseScheduler case "UPD": $arrayDataAux = $caseScheduler->load($caseSchedulerUid); - $arrayCaseSchedulerData["SCH_END_DATE"] = $arrayData["SCH_END_DATE"]; + $arrayCaseSchedulerData["SCH_END_DATE"] = ($arrayData["SCH_END_DATE"] != "")? $arrayData["SCH_END_DATE"] : null; //If the start date has changed then recalculate the next run time $recalculateDate = ($arrayData["SCH_START_DATE"] == $arrayData["PREV_SCH_START_DATE"])? false : true; From 0af6a208392717a47801133cc2e0d6daf96579d5 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Wed, 3 Jun 2015 09:24:22 -0400 Subject: [PATCH 08/23] I updated the logos --- workflow/public_html/images/logopm3.png | Bin 10876 -> 11178 bytes .../public_html/images/processmaker.logo.jpg | Bin 6098 -> 10160 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/workflow/public_html/images/logopm3.png b/workflow/public_html/images/logopm3.png index a6efc9a6e1257cc255b7cd28e7a3c6711b68b493..0bf3671d1f61adb0f345290f6f18e321f6eb17c8 100644 GIT binary patch literal 11178 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 V3(5nE#6N$}D#)lxS4)}%{~yHW!+QV# literal 10876 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 delta 5205 zcma)AbyQSu^S`^xE)Bbs(%m6TcXxM5cOys&vWp}8BBeCarKq&DfRvP!gbMhg ze!uVUy#M_^=iKMsGc)(jeC9dNoS9pvJ#i#!g3zZmfhp7UAq;6JU~6_> zVG&*=Qdodjn2%RT1c?;oljBuXkdv1c5me$;5EW&hyYH*#;3#IFrUVv9tAi+@SY++J zY#jjmZU6v45P%c|0>i-v0BiyPAfN{TqF?~HHTG)(hyXAkzj3o-z%XtuOeh8h6cY;u z!-T=GaImm%fQ5sD_Zv4WK0Y2E;x|bC3lIhriiL?qh=W5&LO?+9SC0Cx`v39ps~13E z0Z3pK0zv>_1PFov{ptr601yC%fIv3{{sjgU0>cD@Ze%x#e}%vA7*G%d28IJ54A37g zAk<$i1O&!_0th0Q43e0Ugp`g~haS$yPj=%41OdUoH#~9w7=pkM0D(b7kCbH~hU)Uc zZM;)Rc*E*@K{D_xKYUJ+Q7ZTQe+OF)c1_v#ISnwYaYP6VE{%z5I5U%uz@!#hCj{3J@1dj--b{9 zEs3W4Z~OpG4l;1d_|1XAj8Xm5FXtq4m%+OsL;8AVG-v>Vo!;xjKy+hzzkU9;_$!U+ zcFo3$oy8gL;UB2PyUpHLNyL*3!wa*+*33jW$H*_;x-b0)J4a=0t5fCg;HN_hEXP9L zmKdm+dW$_1o;cPj%G&RUvia~zyPSNpj-yMKTROFTw z*mJk}vk`xbiw*fCd3tSCRnC+%470UaL2F88Z0gDGB?CA4S30jPSk@WS41b8@rC8FH zR_j=<%nVmmko!`}Px^FnJbGUBUzUH#qHeN+b(1#`6g+~fBim=8%~zIwR;?xH$fm)c z^sGKRxukUzNq@9%)E3*iZDZn0P*GU7Zdbjl^v%HMp#xj5)I}dwV&9u2QmG*n6T^3r z3kuV$mm{0xDz~89ZpO(fWl^O04?h|hEhALEs_w7O91E#sF{UwStOJ*_Gw3)$^8_aj?Wn{(tm;$48ezf+feWd(#5aX?p z!C%1q2C4fXL(ZD3!Sp&A+mlHH)FZ_rp7`@gAC=U_%~UUjrYIIK3c<&=eN8WF7fj8_ zD{Wk;!V8>nMd4p7)@jZRh*1+0BUxBdgJwsuDQ`;ZshtL-6kTKuzs<>?*9Y#Jzafqv zvusb6b=9sHI5+4qP4)ihZ5AWMxAuWd^h|dSKh3UHqNF!p_VylyhHu6D0hEZ@K?(sn zmp^90?v*vCJ?369#^l}ZY}HCDQ6FZE)Cz#D?~R~#3cDM#U`kbp7QV)l0YBf!qLp{m zNklR$1Pw-`F#&mNW#Y7k%%jY@i!9S`DCBWV`!DbO*(C7qP3noUh=!F1E+i&qS3c7b z^0b`&PQK-jSFy)?&Wh3|=aYZs49n$ki`(v^$rUe;Z)L4RmDFT+mLBasZ?oxg9p3Ao z3SF8-mfowKFHq_#PH7KG7*bIf61RH$3;5#&^4m)yEa>8@c(Myik#Wx-xUi?R=lv{ki$QI_gyjmCa|$zg9$4UhrHo+c z0!xled0b_CF0J|ViPZ>J6lMIS0)|P0&vA^^9k$}E!`1x%dj2C+H+Hj$iWO^8MUhPS+rXF(e+KGcC_1-;QdkDAp0v{MAFY7A(2BVsc_0onFjWk>?yLC%d+W9T4Tz? z0xx-0(%i(|0mH!^--JF1Ck-?$`*QQxi!_e@YTrs9vb{i$@3$FNKwb~YDKFH$_XQ8V zo3f|y{Xc8X6B3hn_v`MU2%MnW%T%FV3PiL>S(HaW*U#6$rMzz=5q_iKetG%Z45qB6 z_?klQ%O(DylQm_2X&em?En+gTpE~!z`MoD$IdMF&y9v5X%kB@F4YCWmVD8splM*RG zh8@DXJ$-#y!rXw%1o!xI|I}4aUq3R)$J*NkamlSSAnjE|!BvFX*kaTZJolvJ@a^v| zx<_3qi|4z8eqBiB?ksc5U@7cDui9@sQ*}RDmq(K{KHORzSq9niJN0 zeFRcW*=F{$vW~}}GO0||T{6X$i9U5(p{oftqHgs|d!^mALnZ9J@c6XTJ$zfw*2Wr{ zQkHF+)8v!n=U}70u=zGJXx^C>?K(v}*wEm!_THVUZz|E9@g4R;*+2k0U3bm`$H#EV z!OD!lJ)m;ljWpOu$P*_9b4U@%O2rE25jt8nWszFQN?0V%URz&z>ATMA?L}zuyxw}F zR5f{$(V-zh7UjFQ$v8Dl61b7od@jkIPxiwLw$wS^KBK2h<=!%P!41l0A1nX3e2q~3 z1r&^Sr)*d`0v8e}8}$1m$wjFxJgVm(6;sq?Pt3xiRw<_XlSffKrij*? zNmS%`rKm4CSi-GQ8OAkUlwfLkOVU{Ovs&19P59NyCMs#3litJ>4TSHP@_*M&&U-j+ ztmyBBYu5VR){4tE^2r5aKl#csuAcGenq(10eCqvLavh5?G=<0a(TbJBuB`V|u1z7hWExY)iGFQC43*8JJ>7F&>?yV`5T zSq zt_Zm{od>KBreExRm_u47=bZ@MYACdK&(4b1OD$QT1C_sT-ked>2zW0hK{JtSr( zyBrsA9$}s+Qaowet!O?K{#)=MAZdE^GSYd*uRmxmw(~`oX(6p|urL6NU^_4iO%`w~ z62FMYwNw_9Y$jq(2>{~w?Kl^IC<>rxTBM93GN%!yUql>TRo=4@YD;#|JiwjAN{FNe zN1G(3T%$*_(D~0Xz-GhAc+Pwk0EJ5zr1GUBdS|e!Ec3p8TWvpL@A-o%shq4G7eD5n z2Vh&*DngAXHB-6DF9H#ihNoqGABj=>Z3nvKkPw3LK)F|T>~^NSx!C&U2L~v&FG})^ zsSZ&|)xODT^`>UqgRZ1>bq4NyTWLj&>GV^e@yvM5Wlaj3qwJ%8mv^;EuJy< z&1Ou}`H+9-#kjidu0J=k?(mvE{i>530oZir!Df*CwrD4FamtkQjBc$Z<45{HaNR6S zY?(alo*<`h+GBa?+)#t~$Bo^(p1Tr5=hjZX9=r?BOsXPG<2g=X50nB>r?QrCe@P_? z@D9kFt*3AS*jwUOjK{7FdR$G;)&R?RF6rvJM{}DS92GPkbVg%Q^~q&2{&}jg z+oZQxmM|Pldh=fZ&n5EgwT2RP5+6f@X_m>9>UHB<3j^u(77P9EUb;vwdr$Em7hz+zpgtUsDq=amRc zaU*bxX$Lwv<%j38oC|9q^DjO5V+?ZYT1YHCv2}utfx0)812lfOS(5ekJq(?as!2XQ zl_Z_4V1m5>%FeH=!f#)=I9ZoM!(Yp*?}wvi=4n3=a!v<@@S6_^ zMYxpCD5997>)acd@eMd~M+WBi-nTpKmwXCPrJ;0x-#ghv-{*=M;^L67bWbPLNGXt& zf{<;If{=;12`vVGH^x~_w7tq*caVxNTv2bhu$8uIp)plQ;*c2yD)ng5dZ9@6Oq_+G zCS!h;(Zph{or(+94z9Wwx>)|(V*EZu1?l;QL*v$7X!>Ucg0&s-UKoL=V|O>H1+y@THVj^jAXD_g5=<6+FTcrxzJ#bYPc)sE%Eg z#O2e!4Kw7=*QfKR<*Od;M!H|bFB0%4IMk$W@zgF(P|WbN~)*Hh@8d&2;kyL;;PK zVIumUkqrR;>GyBKho^hgAe2r00()O`BENif*$HTklQG-<0{s?aGDdL0IYKBv(~L4= zO!g6#q6-h7#BT5bJ(Md;Q+jbO&rt)0HN7qQA~&k9RV~>2Tmm}&Em9Db$Yi-m^loy9 zuE8T*RO{5;FNhG6iFvIQeJ|!79OyfPMkmBvVU>wf!~xW+V{DJ3*A)^n9r0^ji7Z^WGiXtBI7RN3$0E4-NhqP(!YTA- zePed@9%Va^0G9I(#x1{^ps2IeY}{D4JJvna@;x{)s3r@gp$JY!OsPDfa0Pw0JL?81 zc=w2~2g&!_KVx}^(b8?-CU^-JeUC%f@!kRKRV{- zHRE+$!~7nee#0$ojz&;G8;J^cazY*NW_}o)0Zo;4C1+Y(wyPN7mSIa;V@u5DJK+gN zr!)L0hHK0@(-yOQts0&%jnr*+5VgY0Ew%ZHgCZR~C}Gi3(2H@ggJ`M9JBzDNkg6C# zTkdpt*t{K>tB#|$E;h+AFD5fU#9l-d5_CjlQmm*P{>+TeCk7Rm_`lsxt?7D?uZR&H}CRV_rG_N8ZJ}Hi^wX=ISNXFW%>1b1~h1crW?;sREo* z1Z7%#)b-!u2hWiVY$R;&3I!NZ5VvOX|lbO$3MnEgVr8pp+x zb9vn_lc}hAuDUF)>BN2#76o>T&OGfWYumTVF;_Ua#R-;5qD=yDV7oQNz;hhj~co5B#Ioklo5|wOwz+F_@Hn%)K}g$FlqVO@@FIB za3^OCx${ITm8387oYM6tC*I=ozkuK64(sL@(oIRq{skzXPe{j#hb%%+dhBuq8q&|U z30^1lQ=E)%o#Z(ANX|MN{gA%1`w419^G3t_I~Ie;N&dqWjL4wd!o0=?j6j^pgpGmx-9}nxiYYWXE-JRJ#Vh5#Y2UhDf Z7D7JYT`S04f4`y?LBl?TUs?T{`wvmN?85*6 From f642bec47b5bb3567baa97897647e5fda60ea3a7 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Fri, 5 Jun 2015 09:58:35 -0400 Subject: [PATCH 09/23] PM-2815: I added MINUTES in end point --- .../engine/src/ProcessMaker/Services/Api/Project/Activity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php index 34d05b7d9..e40498771 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php @@ -258,7 +258,7 @@ class ActivityPropertiesStructure public $tas_selfservice_timeout; /** - * @var string {@from body} {@choice DAYS,,HOURS} + * @var string {@from body} {@choice DAYS,,HOURS,MINUTES} */ public $tas_selfservice_time_unit; From 617198ef17f2ba35f7c5f68d633b802cdbe1c5de Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Fri, 5 Jun 2015 15:44:28 -0400 Subject: [PATCH 10/23] PM-2835 "Adicionar los siguientes features..." SOLVED Issue: Adicionar los siguientes features la posibilidad de seleccionarse en la licencia (features): - Code Scanner - Multiple Email Servers - Mobile Fields Cause: Nueva validacion de licencia para features Solution: - Se agrego validacion de licencia para los features especificados - Se completo el "Code Scanner" para procesos BPMN (import and triggers) Note: QA debera hacer pruebas en procesos pm y pmx --- workflow/engine/bin/tasks/cliUpgrade.php | 8 ++++ workflow/engine/bin/tasks/cliWorkspaces.php | 8 ++++ .../engine/classes/class.licensedFeatures.php | 6 +-- .../processes/processes_Import_Ajax.php | 42 ++++++++++++++----- .../ProcessMaker/BusinessModel/Trigger.php | 25 +++++++++++ .../src/ProcessMaker/Importer/Importer.php | 2 +- .../src/ProcessMaker/Importer/XmlImporter.php | 8 +++- 7 files changed, 83 insertions(+), 16 deletions(-) diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index 958413427..c5fbc71da 100755 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -124,6 +124,14 @@ function run_upgrade($command, $args) $countWorkspace = 0; $buildCacheView = array_key_exists("buildACV", $args); foreach ($workspaces as $index => $workspace) { + if (!defined("SYS_SYS")) { + define("SYS_SYS", $workspace->name); + } + + if (!defined("PATH_DATA_SITE")) { + define("PATH_DATA_SITE", PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP); + } + try { $countWorkspace++; CLI::logging("Upgrading workspaces ($countWorkspace/$count): " . CLI::info($workspace->name) . "\n"); diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 2b0ba44a7..689392806 100755 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -324,6 +324,14 @@ function database_upgrade($command, $args) { $workspaces = get_workspaces_from_args($args); $checkOnly = (strcmp($command, "check") == 0); foreach ($workspaces as $workspace) { + if (!defined("SYS_SYS")) { + define("SYS_SYS", $workspace->name); + } + + if (!defined("PATH_DATA_SITE")) { + define("PATH_DATA_SITE", PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP); + } + if ($checkOnly) print_r("Checking database in ".pakeColor::colorize($workspace->name, "INFO")."\n"); else diff --git a/workflow/engine/classes/class.licensedFeatures.php b/workflow/engine/classes/class.licensedFeatures.php index a5a647038..1a85563cd 100644 --- a/workflow/engine/classes/class.licensedFeatures.php +++ b/workflow/engine/classes/class.licensedFeatures.php @@ -148,7 +148,7 @@ class PMLicensedFeatures "version" => "" ), 7 => array( - "description" => "-", + "description" => "Enables the code scanner feature.", "enabled" => false, "id" => "codeScanner", "latest_version" => "", @@ -165,7 +165,7 @@ class PMLicensedFeatures "version" => "" ), 8 => array( - "description" => "-", + "description" => "Enables the multiple email configuration feature.", "enabled" => false, "id" => "multipleEmailServers", "latest_version" => "", @@ -182,7 +182,7 @@ class PMLicensedFeatures "version" => "" ), 9 => array( - "description" => "-", + "description" => "Enables the mobile fields.", "enabled" => false, "id" => "mobileFields", "latest_version" => "", diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index 392556d99..e25d0f3b3 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -29,19 +29,41 @@ ini_set("max_execution_time", 0); /*----------------------------------********---------------------------------*/ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=") && isset($_FILES["PROCESS_FILENAME"]) && - pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION) == "pm" && - $_FILES["PROCESS_FILENAME"]["error"] == 0 + $_FILES["PROCESS_FILENAME"]["error"] == 0 && + preg_match("/^(?:pm|pmx)$/", pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION)) ) { //Check disabled code $response = array(); try { - $fh = fopen($_FILES["PROCESS_FILENAME"]["tmp_name"], "rb"); - $content = fread($fh, (int)(fread($fh, 9))); - $data = unserialize($content); - fclose($fh); + $arrayTrigger = array(); + $projectTitle = ""; - if (is_object($data) && isset($data->triggers) && is_array($data->triggers) && !empty($data->triggers)) { + switch (pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION)) { + case "pm": + $fh = fopen($_FILES["PROCESS_FILENAME"]["tmp_name"], "rb"); + $content = fread($fh, (int)(fread($fh, 9))); + $data = unserialize($content); + fclose($fh); + + if (is_object($data) && isset($data->triggers) && is_array($data->triggers) && !empty($data->triggers)) { + $arrayTrigger = $data->triggers; + $projectTitle = $data->process["PRO_TITLE"]; + } + break; + case "pmx": + $importer = new XmlImporter(); + + $data = $importer->load($_FILES["PROCESS_FILENAME"]["tmp_name"]); + + if (isset($data["tables"]["workflow"]["triggers"]) && is_array($data["tables"]["workflow"]["triggers"]) && !empty($data["tables"]["workflow"]["triggers"])) { + $arrayTrigger = $data["tables"]["workflow"]["triggers"]; + $projectTitle = $data["tables"]["bpmn"]["project"][0]["prj_name"]; + } + break; + } + + if (!empty($arrayTrigger)) { G::LoadClass("codeScanner"); $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); @@ -50,7 +72,7 @@ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm $strFoundDisabledCode = ""; - foreach ($data->triggers as $value) { + foreach ($arrayTrigger as $value) { $arrayTriggerData = $value; $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $arrayTriggerData["TRI_WEBBOT"]); @@ -69,7 +91,7 @@ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm if ($strFoundDisabledCode != "") { $response["status"] = "DISABLED-CODE"; $response["success"] = true; - $response["message"] = G::LoadTranslation("ID_DISABLED_CODE_PROCESS", array($data->process["PRO_TITLE"], "\n" . $strFoundDisabledCode)); + $response["message"] = G::LoadTranslation("ID_DISABLED_CODE_PROCESS", array($projectTitle, "\n" . $strFoundDisabledCode)); echo G::json_encode($response); exit(0); @@ -444,5 +466,5 @@ if ($action == "uploadFileNewProcessExist") { } echo G::json_encode( $result ); -exit(); +exit(0); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php b/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php index 1ee096271..d940fe144 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php @@ -181,6 +181,31 @@ class Trigger } } + /*----------------------------------********---------------------------------*/ + if (\PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=") && + isset($dataTrigger["TRI_WEBBOT"]) + ) { + //Check disabled code + \G::LoadClass("codeScanner"); + + $arraySystemConfiguration = \System::getSystemConfiguration(PATH_CONFIG . "env.ini"); + + $cs = new \CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); + + $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $dataTrigger["TRI_WEBBOT"]); + + if (!empty($arrayFoundDisabledCode)) { + $strCodeAndLine = ""; + + foreach ($arrayFoundDisabledCode["source"] as $key => $value) { + $strCodeAndLine .= (($strCodeAndLine != "")? ", " : "") . \G::LoadTranslation("ID_DISABLED_CODE_CODE_AND_LINE", array($key, implode(", ", $value))); + } + + throw new \Exception(\G::LoadTranslation("ID_DISABLED_CODE_TRIGGER", array($strCodeAndLine))); + } + } + /*----------------------------------********---------------------------------*/ + $dataTrigger['PRO_UID'] = $sProcessUID; $oTrigger = new \Triggers(); if ($create) { diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index acfd02087..f45772876 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -27,7 +27,7 @@ abstract class Importer const IMPORT_STAT_INVALID_SOURCE_FILE = 102; //Error, Invalid file type or the file have corrupt data. const IMPORT_STAT_GROUP_ALREADY_EXISTS = 105; //Error, Group already exists. - public abstract function load(); + public abstract function load($filename = null); /** * Verify if exists reserved words SQL diff --git a/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php b/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php index a3b2eff4b..61fa0a1a9 100644 --- a/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php +++ b/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php @@ -24,9 +24,13 @@ class XmlImporter extends Importer * ) * @throws \Exception */ - public function load() + public function load($filename = null) { - $this->dom->load($this->filename); + if (!is_null($filename) && !file_exists($filename)) { + throw new \Exception(\G::LoadTranslation("ID_INVALID_FILE")); + } + + $this->dom->load((is_null($filename))? $this->filename : $filename); $this->root = $this->dom->documentElement; // validate version From a44fd05e6fb6f2a64b3a865e82adbfca60beb169 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Fri, 5 Jun 2015 16:14:33 -0400 Subject: [PATCH 11/23] PM-2891 "No se muestra el scrollbar en el modulo..." SOLVED --- workflow/engine/templates/enterprise/addonsStore.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflow/engine/templates/enterprise/addonsStore.js b/workflow/engine/templates/enterprise/addonsStore.js index c181c1422..15b0bedef 100644 --- a/workflow/engine/templates/enterprise/addonsStore.js +++ b/workflow/engine/templates/enterprise/addonsStore.js @@ -1154,7 +1154,7 @@ Ext.onReady(function() { store: addonsStore, defaultType: "displayfield", padding: 5, - autoHeight : true, + height: 335, disabled: !licensed, columns: [ expander, @@ -1605,4 +1605,3 @@ Ext.onReady(function() { addonsFeaturesStore.load(); } }); - From 19f772d4969009cd049dffe1169904c303fdc7e5 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 8 Jun 2015 08:11:27 -0400 Subject: [PATCH 12/23] PM-2780:Add an option to select minutes to task timing control --- workflow/engine/classes/class.calendar.php | 4 +++- workflow/engine/xmlform/tasks/tasks_TimingControl.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.calendar.php b/workflow/engine/classes/class.calendar.php index 48f50b77f..24c968d2b 100755 --- a/workflow/engine/classes/class.calendar.php +++ b/workflow/engine/classes/class.calendar.php @@ -806,7 +806,9 @@ class calendar extends CalendarDefinition if ( G::toUpper($formatDuration) == 'DAYS' ) { $duration = $duration*$calendarData['HOURS_FOR_DAY']; } - + if ( G::toUpper($formatDuration) == 'MINUTES' ) { + $duration = $duration/60; + } $hoursDuration = (float)$duration; $newDate = $iniDate; diff --git a/workflow/engine/xmlform/tasks/tasks_TimingControl.xml b/workflow/engine/xmlform/tasks/tasks_TimingControl.xml index e76b99ca2..ff97fac9a 100755 --- a/workflow/engine/xmlform/tasks/tasks_TimingControl.xml +++ b/workflow/engine/xmlform/tasks/tasks_TimingControl.xml @@ -10,7 +10,7 @@ - + From c69dfee3c98123b13010ab0f8d0671cffdffa7d9 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 8 Jun 2015 08:54:34 -0400 Subject: [PATCH 13/23] PM-2780: I added minutes in sreen_Derivation --- workflow/engine/methods/cases/cases_Step.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index 6f436bce3..0aa3f0995 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -904,12 +904,16 @@ try { if ($aFields['TASK'][$sKey]['NEXT_TASK']['TAS_TIMEUNIT'] == 'HOURS') { $hoursSelected = "selected = 'selected'"; } else { + if ($aFields['TASK'][$sKey]['NEXT_TASK']['TAS_TIMEUNIT'] == 'MINUTES') { + $minSelected = "selected = 'selected'"; + } $daysSelected = "selected = 'selected'"; } $sAux = ''; $aFields['TASK'][$sKey]['NEXT_TASK']['TAS_TIMEUNIT'] = $sAux; From 193c996bfa3da913b5ee79040c0def7a6b366d3c Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 8 Jun 2015 11:34:13 -0400 Subject: [PATCH 14/23] PM-2815: I added minutes in Assigment rules > timing control --- workflow/engine/xmlform/tasks/tasks_AssignmentRules.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/xmlform/tasks/tasks_AssignmentRules.xml b/workflow/engine/xmlform/tasks/tasks_AssignmentRules.xml index 8bede4601..ba41668a2 100755 --- a/workflow/engine/xmlform/tasks/tasks_AssignmentRules.xml +++ b/workflow/engine/xmlform/tasks/tasks_AssignmentRules.xml @@ -28,7 +28,7 @@ - + Date: Mon, 8 Jun 2015 12:06:25 -0400 Subject: [PATCH 15/23] PM-2884: I solved a issue with ENGINE=InnoDB --- workflow/engine/classes/class.wsTools.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 944ab1734..f0c4dcdec 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -1359,7 +1359,7 @@ class workspaceTools if ( !$flag && !is_null($flagFunction) ) { //Replace TYPE by ENGINE $script = file_get_contents($filename); - $script = preg_replace('/\)TYPE\=|\)\sTYPE\=/', ')ENGINE=', $script); + $script = preg_replace('/\)TYPE\=InnoDB|\)\sTYPE\=InnoDB/', ')ENGINE=InnoDB DEFAULT CHARSET=utf8', $script); file_put_contents($filename,$script); $aHost = explode(':',$parameters['dbHost']); $dbHost = $aHost[0]; @@ -1391,6 +1391,7 @@ class workspaceTools //Replace TYPE by ENGINE $script = preg_replace('/\)TYPE\=|\)\sTYPE\=/', ')ENGINE=', $script); + $script = preg_replace('/\)TYPE\=InnoDB|\)\sTYPE\=InnoDB/', ')ENGINE=InnoDB DEFAULT CHARSET=utf8', $script); $lines = explode("\n", $script); $previous = null; $insert = false; From 35c9338a14e8e539f302288ebeaf8f701d878d15 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 8 Jun 2015 12:43:48 -0400 Subject: [PATCH 16/23] PM-2884: I deleted a line --- workflow/engine/classes/class.wsTools.php | 1 - 1 file changed, 1 deletion(-) diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index f0c4dcdec..a5aadbd92 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -1390,7 +1390,6 @@ class workspaceTools $script = file_get_contents($filename); //Replace TYPE by ENGINE - $script = preg_replace('/\)TYPE\=|\)\sTYPE\=/', ')ENGINE=', $script); $script = preg_replace('/\)TYPE\=InnoDB|\)\sTYPE\=InnoDB/', ')ENGINE=InnoDB DEFAULT CHARSET=utf8', $script); $lines = explode("\n", $script); $previous = null; From 058120f86268f6eecd2981941aba15eb820be51b Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 8 Jun 2015 12:59:45 -0400 Subject: [PATCH 17/23] PM-2815: I checked the funcion in cron --- workflow/engine/bin/cron_single.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index 205e981b3..ed7aa5b8d 100755 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -967,7 +967,7 @@ function executeCaseSelfService() $dueDate = $calendar->calculateDate( $appcacheDelDelegateDate, $taskSelfServiceTime, - $taskSelfServiceTimeUnit //HOURS|DAYS + $taskSelfServiceTimeUnit //HOURS|DAYS|MINUTES //1 ); From 0db77754aa0c0d7f988615e910bf6d59c9639a22 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Mon, 8 Jun 2015 13:10:48 -0400 Subject: [PATCH 18/23] I added minutes in end point --- workflow/engine/src/ProcessMaker/BusinessModel/Task.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php index d2ac8fba8..e16b36989 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php @@ -325,7 +325,7 @@ class Task if (!isset($arrayProperty["TAS_DURATION"])) { throw (new \Exception("Invalid value specified for 'tas_duration'")); } - $valuesTimeUnit = array('DAYS','HOURS'); + $valuesTimeUnit = array('DAYS','HOURS','MINUTES'); if ((!isset($arrayProperty["TAS_TIMEUNIT"])) || (!in_array($arrayProperty["TAS_TIMEUNIT"], $valuesTimeUnit))) { throw (new \Exception("Invalid value specified for 'tas_timeunit'")); From ab89629ec4868334ead26e4a2181316b6592d035 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Tue, 9 Jun 2015 14:36:43 -0400 Subject: [PATCH 19/23] PM-2348,PM-2469,PM-2470 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Designer > BPMN Designer: Estandarizar la funcionalidad del botóCancel' Se agrego funcionalidad para IE --- .../jscripts/tiny_mce/plugins/pmSimpleUploader/uploader.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/pmSimpleUploader/uploader.php b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/pmSimpleUploader/uploader.php index c5673c616..b71a3b12a 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/pmSimpleUploader/uploader.php +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/pmSimpleUploader/uploader.php @@ -67,10 +67,12 @@ function displayUploadForm() $html = "

+
File:   (*.html, *.htm) -

+
+
From c246476b9ef126ba1c0082a2ce5a66c6ddca6314 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Wed, 10 Jun 2015 15:53:18 -0400 Subject: [PATCH 20/23] PM-2615 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Personal Information: No se despliega la informacióel usuario en toda la pantalla Se corrigio la asignacion del atributo height de la ventana para su correcta visualizacion. --- workflow/engine/templates/users/usersLoad.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/templates/users/usersLoad.php b/workflow/engine/templates/users/usersLoad.php index b85953d3f..c001b855f 100644 --- a/workflow/engine/templates/users/usersLoad.php +++ b/workflow/engine/templates/users/usersLoad.php @@ -28,7 +28,7 @@ { oCasesFrame = document.getElementById('frameMain'); oClientWinSize = getClientWindowSize(); - height = oClientWinSize.height - 105; + height = oClientWinSize.height - 70 + "px"; oCasesFrame.style.height = height; } function getStyle(targetElement,styleProp) From 86060d09c473e2c5b07e073870a26e0b78720d8b Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Wed, 10 Jun 2015 17:09:57 -0400 Subject: [PATCH 21/23] PM-2880 "Separar Templates y Process Files..." SOLVED > Code Isuue: Separar Templates y Process Files del Process Object Menu > Solution: se separa la opcion del menu File Manager que contiene dos opciones: Templates y Public llevandolo al menu principal estas dos opciones por separado. --- workflow/engine/templates/designer/index.html | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index 01a77a8be..900944fe0 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -151,12 +151,16 @@
  • - - + +
  • - - + + +
  • +
  • + +
  • @@ -164,5 +168,5 @@
    - + \ No newline at end of file From 138388d9c1757ad53417070dacb47d17a75e58f6 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Wed, 10 Jun 2015 17:55:47 -0400 Subject: [PATCH 22/23] PM-2815: I added the dropdwon[Execute Trigger] --- workflow/engine/src/ProcessMaker/BusinessModel/Task.php | 9 ++++++++- .../src/ProcessMaker/Services/Api/Project/Activity.php | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php index d2ac8fba8..af3cb9cc8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php @@ -155,7 +155,8 @@ class Task "TAS_SELFSERVICE_TIMEOUT" => $arrayDataAux["TAS_SELFSERVICE_TIMEOUT"], "TAS_SELFSERVICE_TIME" => $arrayDataAux["TAS_SELFSERVICE_TIME"], "TAS_SELFSERVICE_TIME_UNIT" => $arrayDataAux["TAS_SELFSERVICE_TIME_UNIT"], - "TAS_SELFSERVICE_TRIGGER_UID" => $arrayDataAux["TAS_SELFSERVICE_TRIGGER_UID"] + "TAS_SELFSERVICE_TRIGGER_UID" => $arrayDataAux["TAS_SELFSERVICE_TRIGGER_UID"], + "TAS_SELFSERVICE_EXECUTION" => $arrayDataAux["TAS_SELFSERVICE_EXECUTION"] ), $keyCase ); @@ -277,6 +278,7 @@ class Task $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID"); + $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION"); break; case 'EVALUATE': if (empty($arrayProperty["TAS_ASSIGN_VARIABLE"])) { @@ -287,6 +289,7 @@ class Task $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID"); + $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION"); break; case 'SELF_SERVICE': case 'SELF_SERVICE_EVALUATE': @@ -312,10 +315,14 @@ class Task if (empty($arrayProperty["TAS_SELFSERVICE_TRIGGER_UID"])) { throw (new \Exception("Invalid value specified for 'tas_selfservice_trigger_uid'")); } + if (empty($arrayProperty["TAS_SELFSERVICE_EXECUTION"])) { + throw (new \Exception("Invalid value specified for 'tas_selfservice_execution'")); + } } else { $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID"); + $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION"); } break; } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php index e40498771..a01bd3066 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php @@ -267,6 +267,11 @@ class ActivityPropertiesStructure */ public $tas_selfservice_trigger_uid; + /** + * @var string {@from body} {@choice EVERY_TIME,ONCE} + */ + public $tas_selfservice_execution; + /** * @var string {@from body} {@choice TRUE,FALSE} */ From 28aa6afa42c408d626d4c157e135ee68fc882ca0 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 12 Jun 2015 11:32:29 -0400 Subject: [PATCH 23/23] IMPROVEMENT --- workflow/engine/classes/class.pmDynaform.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index d53c5b749..70514d581 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -219,7 +219,7 @@ class pmDynaform $cells = array(); foreach ($json->columns as $column) { //data - if ($column->type === "text" || $column->type === "textarea" || $column->type === "dropdown" || $column->type === "suggest" || $column->type === "datetime" || $column->type === "checkbox" || $column->type === "file" || $column->type === "link" || $value === "hidden") { + if ($column->type === "text" || $column->type === "textarea" || $column->type === "dropdown" || $column->type === "suggest" || $column->type === "datetime" || $column->type === "checkbox" || $column->type === "file" || $column->type === "link" || $column->type === "hidden") { array_push($cells, array( "value" => isset($row[$column->name]) ? $row[$column->name] : "", "label" => isset($row[$column->name . "_label"]) ? $row[$column->name . "_label"] : (isset($row[$column->name]) ? $row[$column->name] : "")