diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index c315a17b3..48c4af2e8 100644 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -2489,10 +2489,11 @@ class processMap { $oGateway->remove($sGatewayUID); } //Getting Gateway UID after saving gateway - if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') + //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') + if($sType != 'SEQUENTIAL') { $oProcessMap = new processMap(); - $sGatewayUID = $oProcessMap->saveNewGateway($sProcessUID, $sTaskUID); + $sGatewayUID = $oProcessMap->saveNewGateway($sProcessUID, $sTaskUID, $sNextTask); } $aFields ['GAT_UID'] = (isset($sGatewayUID))?$sGatewayUID:''; @@ -2508,14 +2509,16 @@ class processMap { * * @param string $sProcessUID Default value empty * @param string $sTaskUID Default value empty + * @param string $sNextTask Default value empty * @return string $sGatewayUID */ - function saveNewGateway($sProcessUID = '', $sTaskUID = '') { + function saveNewGateway($sProcessUID = '', $sTaskUID = '', $sNextTask = '') { try { $oTask = new Task(); $aTaskDetails = $oTask->load($sTaskUID); $aFields ['PRO_UID'] = $sProcessUID; $aFields ['TAS_UID'] = $sTaskUID; + $aFields ['GAT_NEXT_TASK'] = $sNextTask; $aFields ['GAT_X'] = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH']/2; $aFields ['GAT_Y'] = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; @@ -4646,6 +4649,7 @@ class processMap { function getExtAvailableBBCriteria($sProcessUID = '', $sTaskUID = '') { try { + $_SESSION['TASK'] = $sTaskUID; $oTasks = new Tasks ( ); $_SESSION['TASK'] = $sTaskUID; $aSteps = $oTasks->getStepsOfTask ( $sTaskUID ); diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index e66b09591..0eb60c0cf 100644 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -1002,6 +1002,26 @@ class Processes { return $this->getAllLanes( $sProUid ); } + /** + * Get Gateway Rows from a process and returns those in an array. + * @param $sProUid string for the process Uid + * @return $oTask array + */ + function getGatewayRows ($sProUid ){ + $oTask = new Tasks( ); + return $oTask->getAllGateways( $sProUid ); + } + + /** + * Create Gateway Rows from a $aGateways array data and returns those in an array. + * @param $aGateways array + * @return $oGateway array + */ + function createGatewayRows ($aGateways ){ + $oTask = new Tasks( ); + return $oTask->createGatewayRows( $aGateways ); + } + /** * Create Lane Rows from a $aLanes array data and returns those in an array. * @param $aLanes array. @@ -2128,6 +2148,7 @@ class Processes { $oData->tasks = $this->getTaskRows( $sProUid ); $oData->routes = $this->getRouteRows( $sProUid ); $oData->lanes = $this->getLaneRows( $sProUid ); + $oData->gateways = $this->getGatewayRows( $sProUid ); $oData->inputs = $this->getInputRows( $sProUid ); $oData->outputs = $this->getOutputRows( $sProUid ); $oData->dynaforms = $this->getDynaformRows ( $sProUid ); @@ -2991,6 +3012,7 @@ class Processes { $this->createTaskRows($oData->tasks); $this->createRouteRows($oData->routes); $this->createLaneRows($oData->lanes); + $this->createGatewayRows($oData->gateways); $this->createDynaformRows($oData->dynaforms); $this->createInputRows($oData->inputs); $this->createOutputRows($oData->outputs); diff --git a/workflow/engine/classes/class.tasks.php b/workflow/engine/classes/class.tasks.php index bd2fa963e..06a4ce65d 100644 --- a/workflow/engine/classes/class.tasks.php +++ b/workflow/engine/classes/class.tasks.php @@ -33,6 +33,7 @@ require_once 'classes/model/StepTrigger.php'; require_once 'classes/model/Task.php'; require_once 'classes/model/TaskUser.php'; require_once 'classes/model/Users.php'; +require_once 'classes/model/Gateway.php'; /** * Tasks - Tasks class @@ -321,6 +322,48 @@ class Tasks } } + /** + * Get all gateways for any Process + * @param string $sProUid + * @return array + */ + public function getAllGateways($sProUid) + { + try { + $aGateways = array(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(GatewayPeer::PRO_UID, $sProUid); + $oDataset = GatewayPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oGateway = new Gateway(); + $aGateways[] = $oGateway->Load($aRow['GAT_UID']); + $oDataset->next(); + } + return $aGateways; + } + catch (Exception $oError) { + throw($oError); + } + } + + /** + * creates row tasks from an Task Array + * @param string $aTasks + * @return array + */ + public function createGatewayRows( $aGateway ) + { + foreach ( $aGateway as $key => $row ) { + $oGateway = new Gateway(); + if($oGateway->gatewayExists ($row['GAT_UID'])) + $oGateway->remove($row['GAT_UID']); + $res = $oGateway->createRow($row); + } + return; + } + /** * Delete all routes from a task * @param string $sProcessUID diff --git a/workflow/engine/classes/model/Gateway.php b/workflow/engine/classes/model/Gateway.php index b8767a705..be7249262 100644 --- a/workflow/engine/classes/model/Gateway.php +++ b/workflow/engine/classes/model/Gateway.php @@ -113,5 +113,68 @@ class Gateway extends BaseGateway { throw($oError); } } + + /** + * verify if Gateway row specified in [GatUid] exists. + * + * @param string $sProUid the uid of the Prolication + */ + + function gatewayExists ( $GatUid ) { + $con = Propel::getConnection(GatewayPeer::DATABASE_NAME); + try { + $oPro = GatewayPeer::retrieveByPk( $GatUid ); + if ( is_object($oPro) && get_class ($oPro) == 'Gateway' ) { + return true; + } + else { + return false; + } + } + catch (Exception $oError) { + throw($oError); + } + } + + /** + * create a new Gateway + * + * @param array $aData with new values + * @return void + */ + function createRow($aData) + { + $con = Propel::getConnection(GatewayPeer::DATABASE_NAME); + try + { + $con->begin(); + + $this->fromArray($aData,BasePeer::TYPE_FIELDNAME); + if($this->validate()) + { + $this->setGatUid((isset($aData['GAT_UID']) ? $aData['GAT_UID']: '')); + $this->setProUid((isset($aData['PRO_UID']) ? $aData['PRO_UID']: '')); + $this->setTasUid((isset($aData['TAS_UID']) ? $aData['TAS_UID']: '')); + $this->setGatNextTask((isset($aData['GAT_NEXT_TASK']) ? $aData['GAT_NEXT_TASK']: '')); + $this->setGatX((isset($aData['GAT_X']) ? $aData['GAT_X']: '')); + $this->setGatY((isset($aData['GAT_Y']) ? $aData['GAT_Y']: '')); + $this->save(); + $con->commit(); + return; + } + else + { + $con->rollback(); + $e=new Exception("Failed Validation in class ".get_class($this)."."); + $e->aValidationFailures=$this->getValidationFailures(); + throw($e); + } + } + catch(Exception $e) + { + $con->rollback(); + throw($e); + } + } } // Gateway diff --git a/workflow/engine/templates/bpmn/MyWorkflow.js b/workflow/engine/templates/bpmn/MyWorkflow.js index 2a9da8b51..ab96d38bb 100755 --- a/workflow/engine/templates/bpmn/MyWorkflow.js +++ b/workflow/engine/templates/bpmn/MyWorkflow.js @@ -2126,6 +2126,7 @@ MyWorkflow.prototype.getDeleteCriteria = function() */ MyWorkflow.prototype.zoom = function(sType) { + //workflow.zoomFactor = 1; var figures = workflow.getDocument().getFigures(); var lines=workflow.getLines(); @@ -2160,6 +2161,24 @@ MyWorkflow.prototype.zoom = function(sType) } } + if(typeof workflow.zoomFactor != 'undefined' && sType == 'in') + { + var zoomFactor = workflow.zoomFactor + 0.2; + workflow.zoomFactor = zoomFactor; + } + else if(typeof workflow.zoomFactor != 'undefined' && sType == 'out') + { + zoomFactor = workflow.zoomFactor - 0.2; + workflow.zoomFactor = zoomFactor; + } + else + { + zoomFactor = 0.2; + workflow.zoomFactor = zoomFactor; + } + + + for(f = 0;f