Merged in qronald/processmaker/HOR-1500-R (pull request #4723)
fix in route screen
This commit is contained in:
@@ -51,6 +51,7 @@ class Derivation
|
|||||||
protected $flagControl;
|
protected $flagControl;
|
||||||
protected $flagControlMulInstance;
|
protected $flagControlMulInstance;
|
||||||
private $regexpTaskTypeToInclude;
|
private $regexpTaskTypeToInclude;
|
||||||
|
public $flagSanity = false;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@@ -257,6 +258,9 @@ class Derivation
|
|||||||
|
|
||||||
//Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT
|
//Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT
|
||||||
$arrayNextTaskBackup = $arrayNextTask;
|
$arrayNextTaskBackup = $arrayNextTask;
|
||||||
|
if ($this->flagSanity) {
|
||||||
|
$arrayNextTaskBackup = $this->preSanity($arrayNextTask);
|
||||||
|
}
|
||||||
$arrayNextTask = array();
|
$arrayNextTask = array();
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($arrayNextTaskBackup as $value) {
|
foreach ($arrayNextTaskBackup as $value) {
|
||||||
@@ -327,6 +331,87 @@ class Derivation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function preSanity($arrayNextTask)
|
||||||
|
{
|
||||||
|
$arrayNextTaskResponse = array();
|
||||||
|
if ($arrayNextTask) {
|
||||||
|
$arrayTask = array();
|
||||||
|
$arrayNotTask = array();
|
||||||
|
$regex = "END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT";
|
||||||
|
foreach ($arrayNextTask as $index => $item) {
|
||||||
|
if (($item["NEXT_TASK"]["TAS_UID"] != "-1" &&
|
||||||
|
preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"]))
|
||||||
|
) {
|
||||||
|
$arrayNotTask[] = $index;
|
||||||
|
} else {
|
||||||
|
$arrayTask[] = $index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($arrayTask) {
|
||||||
|
foreach ($arrayNotTask as $item) {
|
||||||
|
unset($arrayNextTask[$item]);
|
||||||
|
}
|
||||||
|
$arrayNextTaskResponse = array_values($arrayNextTask);
|
||||||
|
} else {
|
||||||
|
$pos = array_shift($arrayNotTask);
|
||||||
|
$arrayNextTaskResponse[] = $arrayNextTask[$pos];
|
||||||
|
foreach ($arrayNextTask as $nextTask) {
|
||||||
|
$flag = false;
|
||||||
|
foreach ($arrayNextTaskResponse as $task) {
|
||||||
|
if (!in_array($nextTask['ROU_NEXT_TASK'], $task, true)) {
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($flag) {
|
||||||
|
$arrayNextTaskResponse[] = $nextTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $arrayNextTaskResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function postSanity($arrayNextTask)
|
||||||
|
{
|
||||||
|
$arrayNextTaskResponse = array();
|
||||||
|
if ($arrayNextTask) {
|
||||||
|
$arrayTask = array();
|
||||||
|
$arrayNotTask = array();
|
||||||
|
$regex = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT";
|
||||||
|
foreach ($arrayNextTask as $index => $item) {
|
||||||
|
if (($item["NEXT_TASK"]["TAS_UID"] != "-1" &&
|
||||||
|
preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"]))
|
||||||
|
|| $item['ROU_TYPE'] == "SEC-JOIN"
|
||||||
|
) {
|
||||||
|
$arrayNotTask[] = $index;
|
||||||
|
} else {
|
||||||
|
$arrayTask[] = $index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($arrayTask) {
|
||||||
|
foreach ($arrayNotTask as $item) {
|
||||||
|
unset($arrayNextTask[$item]);
|
||||||
|
}
|
||||||
|
$arrayNextTaskResponse = array_values($arrayNextTask);
|
||||||
|
} else {
|
||||||
|
$pos = array_shift($arrayNotTask);
|
||||||
|
$arrayNextTaskResponse[] = $arrayNextTask[$pos];
|
||||||
|
foreach ($arrayNextTask as $nextTask) {
|
||||||
|
$flag = false;
|
||||||
|
foreach ($arrayNextTaskResponse as $task) {
|
||||||
|
if (!in_array($nextTask['ROU_NEXT_TASK'], $task, true)) {
|
||||||
|
$flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($flag) {
|
||||||
|
$arrayNextTaskResponse[] = $nextTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return array_combine(range(1, count($arrayNextTaskResponse)), array_values($arrayNextTaskResponse));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getRouteCondition
|
* getRouteCondition
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -804,7 +804,7 @@ try {
|
|||||||
'APP_UID' => $_SESSION['APPLICATION'],
|
'APP_UID' => $_SESSION['APPLICATION'],
|
||||||
'DEL_INDEX' => $_SESSION['INDEX']
|
'DEL_INDEX' => $_SESSION['INDEX']
|
||||||
);
|
);
|
||||||
$aFields['TASK'] = $oRoute->prepareInformation($arrayData);
|
$aFields['TASK'] = $oRoute->prepareRoutingScreen($arrayData);
|
||||||
|
|
||||||
if (empty( $aFields['TASK'] )) {
|
if (empty( $aFields['TASK'] )) {
|
||||||
throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) ));
|
throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) ));
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ class RoutingScreen extends \Derivation
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT");
|
$this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT");
|
||||||
|
$this->flagSanity = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function mergeDataDerivation($post, $prepareInformation)
|
public function mergeDataDerivation($post, $prepareInformation)
|
||||||
@@ -37,4 +38,9 @@ class RoutingScreen extends \Derivation
|
|||||||
return $aDataMerged;
|
return $aDataMerged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function prepareRoutingScreen($arrayData)
|
||||||
|
{
|
||||||
|
return $this->postSanity($this->prepareInformation($arrayData));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user