Merged in release/3.3.3 (pull request #6764)

Release/3.3.3

Approved-by: Paula Quispe <paula.quispe@processmaker.com>
This commit is contained in:
Paula Quispe
2019-01-25 15:55:54 +00:00
4 changed files with 52 additions and 17 deletions

View File

@@ -2644,8 +2644,8 @@ class Bootstrap
{
$isIE = false;
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$ua = htmlentities($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, 'UTF-8');
if (preg_match('/MSIE|Internet Explorer|Trident\d+rv:11.0/i', $ua) || (strpos($ua, 'Trident/7.0; Touch; rv:11.0') !== false)) {
$userAgent = htmlentities($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, 'UTF-8');
if (preg_match("/(Trident\/(\d{2,}|7|8|9)(.*)rv:(\d{2,}))|(MSIE\ (\d{2,}|8|9)(.*)Tablet\ PC)|(Trident\/(\d{2,}|7|8|9))/", $userAgent)) {
$isIE = true;
}
}

View File

@@ -218,7 +218,7 @@ class MSSQLConnection extends ConnectionCommon implements Connection
if (!$result) {
throw new SQLException('Could not execute update', print_r(sqlsrv_errors(), true), $sql);
}
return (int) sqlsrv_rows_affected($this->dblink);
return (int) sqlsrv_rows_affected($result);
} else {
if (!mssql_select_db($this->database, $this->dblink)) {
throw new SQLException('No database selected');

View File

@@ -3536,25 +3536,29 @@ class Cases
$executedOn = $oPMScript->getExecutionOriginForAStep($stepType, $stepUidObj, $triggerType);
$oPMScript->setExecutedOn($executedOn);
$oPMScript->execute();
$varsChanged = $oPMScript->getVarsChanged();
$appDataAfterTrigger = $oPMScript->aFields;
//Get the key and values changed only if the variable has the prefix
//@see https://wiki.processmaker.com/3.2/Triggers#Typing_rules_for_Case_Variables
$fieldsTrigger = $this->findKeysAndValues($appDataAfterTrigger, $varsChanged);
/**
* This section of code its related to the route the case with parallel task in the same time
* @link https://processmaker.atlassian.net/browse/PMC-2
*/
if ($oPMScript->executedOn() === $oPMScript::AFTER_ROUTING) {
//Get the variables changed with the trigger
$fieldsTrigger = arrayDiffRecursive($appDataAfterTrigger, $fieldsCase);
//We will be load the last appData because:
//Other execution can be changed the variables or Plugin or PMFunction
$appUid = !empty($fieldsCase['APPLICATION']) ? $fieldsCase['APPLICATION'] : '';
if (!empty($appUid)) {
//Update $fieldsCase with the last appData
$fieldsCase = $this->loadCase($appUid)['APP_DATA'];
//We will be load the last appData because:
//Other thread execution can be changed the variables
$appUid = !empty($fieldsCase['APPLICATION']) ? $fieldsCase['APPLICATION'] : '';
if (!empty($appUid)) {
//Update $fieldsCase with the last appData
$fieldsCase = $this->loadCase($appUid)['APP_DATA'];
}
//Merge the appData with variables changed
$fieldsCase = array_merge($fieldsCase, $fieldsTrigger);
} else {
$fieldsCase = $appDataAfterTrigger;
}
//Merge the current appData with variables changed
$fieldsCase = array_merge($fieldsCase, $fieldsTrigger);
//Register the time execution
$this->arrayTriggerExecutionTime[$trigger['TRI_UID']] = $oPMScript->scriptExecutionTime;
//Register the message of execution

View File

@@ -400,6 +400,37 @@ function verifyCsrfToken($request)
}
}
/**
* Get the difference between to multidimensional array
*
* @param array $array1
* @param array $array2
*
* @return array
*/
function arrayDiffRecursive(array $array1, array $array2)
{
$difference = [];
foreach ($array1 as $key => $value) {
if (is_array($value)) {
if (!isset($array2[$key])) {
$difference[$key] = $value;
} elseif (!is_array($array2[$key])) {
$difference[$key] = $value;
} else {
$new_diff = arrayDiffRecursive($value, $array2[$key]);
if (!empty($new_diff)) {
$difference[$key] = $new_diff;
}
}
} elseif (!isset($array2[$key]) || $array2[$key] != $value) {
$difference[$key] = $value;
}
}
return $difference;
}
/**
* Get the current user CSRF token.
*