diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index b38562ecf..9b8c6b50f 100644 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -57,6 +57,7 @@ require_once 'classes/model/Task.php'; require_once 'classes/model/TaskUser.php'; require_once 'classes/model/Triggers.php'; require_once 'classes/model/Users.php'; +require_once 'classes/model/Gateway.php'; /** * processMap - Process Map class @@ -2393,12 +2394,14 @@ class processMap { * @param string $sTaskUID Default value empty * @param string $sNextTask Default value empty * @param string $sType Default value empty + * @param boolean $sDelete * @return array void */ - function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') { + function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete='') { try { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); + $oCriteria->addSelectColumn('GAT_UID'); $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); $oCriteria->add(RoutePeer::ROU_TYPE, $sType); @@ -2412,6 +2415,20 @@ class processMap { $aFields ['ROU_TYPE'] = $sType; $aFields ['ROU_CASE'] = (int) $aRow ['ROUTE_NUMBER'] + 1; + $sGatewayUID = $aRow['GAT_UID']; + + if($sDelete && $sGatewayUID != ''){ + $oGateway = new Gateway ( ); + $oGateway->remove($sGatewayUID); + } + //Getting Gateway UID after saving gateway + if($sType != 'SEQUENTIAL' && $sGatewayUID == '') + { + $oProcessMap = new processMap(); + $sGatewayUID = $oProcessMap->saveNewGateway($sProcessUID, $sTaskUID); + } + + $aFields ['GAT_UID'] = $sGatewayUID; $oRoute = new Route ( ); $oRoute->create($aFields); } catch (Exception $oError) { @@ -2419,6 +2436,31 @@ class processMap { } } + /** + * saveNewGateway + * + * @param string $sProcessUID Default value empty + * @param string $sTaskUID Default value empty + * @return string $sGatewayUID + */ + function saveNewGateway($sProcessUID = '', $sTaskUID = '') { + try { + $oTask = new Task(); + $aTaskDetails = $oTask->load($sTaskUID); + $aFields ['PRO_UID'] = $sProcessUID; + $aFields ['GAT_X'] = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH']/2; + $aFields ['GAT_Y'] = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; + + $oGateway = new Gateway ( ); + $sGatewayUID = $oGateway->create($aFields); + + return $sGatewayUID; + + } catch (Exception $oError) { + throw ($oError); + } + } + /* * Delete a derivation rule * @param string $sTaskUID @@ -5535,8 +5577,6 @@ class processMap { break; } $aObjects [] = array('CTO_TITLE' => $sTitle, 'CTO_UID' => $aRow ['CTO_UID'], 'CTO_TYPE_OBJ' => $aRow ['CTO_TYPE_OBJ'], 'CTO_UID_OBJ' => $aRow ['CTO_UID_OBJ'], 'CTO_CONDITION' => $aRow ['CTO_CONDITION'], 'CTO_POSITION' => $aRow ['CTO_POSITION']); - - } catch (Exception $oError) { //Nothing @@ -5555,20 +5595,7 @@ class processMap { return $aObjects; } - /** - * availableCaseTrackerObjects - * - * @param string $sProcessUID - * @return boolean true - */ - function availableExtCaseTrackerObjects($sProcessUID) { - global $G_PUBLISH; - $G_PUBLISH = new Publisher ( ); - $G_PUBLISH->AddContent('propeltable', 'paged-table', 'tracker/tracker_AvailableCaseTrackerObjects', $this->getAvailableCaseTrackerObjectsCriteria($sProcessUID), array('PRO_UID' => $sProcessUID)); - G::RenderPage('publish', 'raw'); - return true; - } - + /** * getAvailableCaseTrackerObjectsCriteria * @@ -5667,92 +5694,7 @@ class processMap { return $oCriteria;*/ } - /** - * assignCaseTrackerObject - * - * @param string $sProcessUID - * @param string $sObjType - * @param string $sObjUID - * @return void - */ - function assignExtCaseTrackerObject($sProcessUID, $sObjType, $sObjUID) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $iPosition = CaseTrackerObjectPeer::doCount($oCriteria) + 1; - $oCaseTrackerObject = new CaseTrackerObject ( ); - $oCaseTrackerObject->create(array('PRO_UID' => $sProcessUID, 'CTO_TYPE_OBJ' => $sObjType, 'CTO_UID_OBJ' => $sObjUID, 'CTO_POSITION' => $iPosition)); - } - - /** - * removeCaseTrackerObject - * - * @param string $sCTOUID - * @param string $sProcessUID - * @param integer $iPosition - * @return void - */ - function removeExtCaseTrackerObject($sCTOUID, $sProcessUID, $iPosition) { - $oCaseTrackerObject = new CaseTrackerObject ( ); - $oCaseTrackerObject->remove($sCTOUID); - $oCaseTrackerObject->reorderPositions($sProcessUID, $iPosition); - } - - /** - * upCaseTrackerObject - * - * @param string $sCTOUID - * @param string $sProcessUID - * @param integer $iPosition - * @return void - */ - function upExtCaseTrackerObject($sCTOUID, $sProcessUID, $iPosition) { - if ($iPosition > 1) { - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, $iPosition); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition - 1)); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition - 1)); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_UID, $sCTOUID); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - } - } - - /** - * downCaseTrackerObject - * - * @param string $sCTOUID - * @param string $sProcessUID - * @param integer $iPosition - * @return void - */ - function downExtCaseTrackerObject($sCTOUID, $sProcessUID, $iPosition) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS MAX_POSITION'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - if ($iPosition < (int) $aRow ['MAX_POSITION']) { - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, $iPosition); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::PRO_UID, $sProcessUID); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition + 1)); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - $oCriteria1 = new Criteria('workflow'); - $oCriteria1->add(CaseTrackerObjectPeer::CTO_POSITION, ($iPosition + 1)); - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(CaseTrackerObjectPeer::CTO_UID, $sCTOUID); - BasePeer::doUpdate($oCriteria2, $oCriteria1, Propel::getConnection('workflow')); - } - } - function getExtReportTables($sProcessUID = '') { + function getExtReportTables($sProcessUID = '') { $sDelimiter = DBAdapter::getStringDelimiter (); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(ReportTablePeer::REP_TAB_UID); @@ -5775,9 +5717,6 @@ class processMap { $oDataset->next(); } return $aReportTable; - } - - } diff --git a/workflow/engine/classes/model/Gateway.php b/workflow/engine/classes/model/Gateway.php index d4f396fca..f71dcdbc9 100644 --- a/workflow/engine/classes/model/Gateway.php +++ b/workflow/engine/classes/model/Gateway.php @@ -16,29 +16,32 @@ require_once 'classes/model/om/BaseGateway.php'; */ class Gateway extends BaseGateway { - function create ($aData) + public function create ($aData) { - $con = Propel::getConnection(GatewayPeer::DATABASE_NAME); - try - { - $this->fromArray($aData, BasePeer::TYPE_FIELDNAME); - if($this->validate()) - { - $result=$this->save(); + $oConnection = Propel::getConnection(GatewayPeer::DATABASE_NAME); + try { + $sGatewayUID = G::generateUniqueID(); + $aData['GAT_UID'] = $sGatewayUID; + $oGateway = new Gateway(); + $oGateway->fromArray($aData, BasePeer::TYPE_FIELDNAME); + if ($oGateway->validate()) { + $oConnection->begin(); + $iResult = $oGateway->save(); + $oConnection->commit(); + return $sGatewayUID; } - else - { - $e=new Exception("Failed Validation in class ".get_class($this)."."); - $e->aValidationFailures=$this->getValidationFailures(); - throw($e); + else { + $sMessage = ''; + $aValidationFailures = $oGateway->getValidationFailures(); + foreach($aValidationFailures as $oValidationFailure) { + $sMessage .= $oValidationFailure->getMessage() . '
'; + } + throw(new Exception('The registry cannot be created!
'.$sMessage)); } - $con->commit(); - return $result; } - catch(Exception $e) - { - $con->rollback(); - throw($e); + catch (Exception $oError) { + $oConnection->rollback(); + throw($oError); } } @@ -88,22 +91,27 @@ class Gateway extends BaseGateway { throw($e); } } - - function remove($GatewayUid) + + public function remove($GatewayUid) { - $con = Propel::getConnection(GatewayPeer::DATABASE_NAME); - try - { - $con->begin(); - $this->setGatUid($GatewayUid); - $result=$this->delete(); - $con->commit(); - return $result; + $oConnection = Propel::getConnection(GatewayPeer::DATABASE_NAME); + try { + $oGateWay = RoutePeer::retrieveByPK($GatewayUid); + if (!is_null($oGateWay)) + { + $oConnection->begin(); + $iResult = $oGateWay->delete(); + $oConnection->commit(); + return $iResult; + } + else { + throw(new Exception('This row doesn\'t exists!')); + } } - catch(Exception $e) - { - $con->rollback(); - throw($e); + catch (Exception $oError) { + $oConnection->rollback(); + throw($oError); } } + } // Gateway diff --git a/workflow/engine/methods/processes/processes_Ajax.php b/workflow/engine/methods/processes/processes_Ajax.php index 534d1987b..50fa368e5 100644 --- a/workflow/engine/methods/processes/processes_Ajax.php +++ b/workflow/engine/methods/processes/processes_Ajax.php @@ -276,7 +276,7 @@ try { $oTasks = new Tasks(); $oTasks->deleteAllRoutesOfTask($oData->pro_uid, $oData->tas_uid); } - $oProcessMap->saveNewPattern($oData->pro_uid, $oData->tas_uid, $oData->next_task, $sType); + $oProcessMap->saveNewPattern($oData->pro_uid, $oData->tas_uid, $oData->next_task, $sType, $oData->delete); break; case 'deleteAllRoutes': G::LoadClass('tasks');