diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 9acd9ea59..06692368e 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -1,6 +1,7 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -50,2478 +51,2700 @@ require_once 'classes/model/Event.php'; require_once 'classes/model/CaseScheduler.php'; require_once 'classes/model/ProcessCategory.php'; -G::LoadClass('tasks'); -G::LoadClass('reportTables'); -G::LoadClass('processMap'); -G::LoadThirdParty('pear/json','class.json'); +G::LoadClass( 'tasks' ); +G::LoadClass( 'reportTables' ); +G::LoadClass( 'processMap' ); +G::LoadThirdParty( 'pear/json', 'class.json' ); -class Processes { +class Processes +{ - /** - * change Status of any Process - * @param string $sProUid - * @return boolean - * @package workflow.engine.ProcessMaker - */ - function changeStatus ( $sProUid = '') { - $oProcess = new Process(); - $Fields = $oProcess->Load( $sProUid ); - $proFields['PRO_UID'] = $sProUid; - if ( $Fields['PRO_STATUS'] == 'ACTIVE' ) - $proFields['PRO_STATUS'] = 'INACTIVE'; - else - $proFields['PRO_STATUS'] = 'ACTIVE'; + /** + * change Status of any Process + * + * @param string $sProUid + * @return boolean + * @package workflow.engine.ProcessMaker + */ + function changeStatus ($sProUid = '') + { + $oProcess = new Process(); + $Fields = $oProcess->Load( $sProUid ); + $proFields['PRO_UID'] = $sProUid; + if ($Fields['PRO_STATUS'] == 'ACTIVE') + $proFields['PRO_STATUS'] = 'INACTIVE'; + else + $proFields['PRO_STATUS'] = 'ACTIVE'; - $oProcess->Update( $proFields ); - } + $oProcess->Update( $proFields ); + } - /** - * change debug mode of any Process - * @param string $sProUid - * @return boolean - * @package workflow.engine.ProcessMaker - */ - function changeDebugMode ( $sProUid = '') { - $oProcess = new Process(); - $Fields = $oProcess->Load( $sProUid ); - $proFields['PRO_UID'] = $sProUid; - if ( $Fields['PRO_DEBUG'] == '1' ) - $proFields['PRO_DEBUG'] = '0'; - else - $proFields['PRO_DEBUG'] = '1'; + /** + * change debug mode of any Process + * + * @param string $sProUid + * @return boolean + * @package workflow.engine.ProcessMaker + */ + function changeDebugMode ($sProUid = '') + { + $oProcess = new Process(); + $Fields = $oProcess->Load( $sProUid ); + $proFields['PRO_UID'] = $sProUid; + if ($Fields['PRO_DEBUG'] == '1') + $proFields['PRO_DEBUG'] = '0'; + else + $proFields['PRO_DEBUG'] = '1'; - $oProcess->Update( $proFields ); - } + $oProcess->Update( $proFields ); + } - /** - * changes in DB the parent GUID - * @param $sProUid process uid - * @param $sParentUid process parent uid - * @return $sProUid - */ - function changeProcessParent( $sProUid, $sParentUid) { - $oProcess = new Process(); - $Fields = $oProcess->Load( $sProUid ); - $proFields['PRO_UID'] = $sProUid; - $Fields['PRO_PARENT'] == $sParentUid; - $oProcess->Update( $proFields ); - } + /** + * changes in DB the parent GUID + * + * @param $sProUid process uid + * @param $sParentUid process parent uid + * @return $sProUid + */ + function changeProcessParent ($sProUid, $sParentUid) + { + $oProcess = new Process(); + $Fields = $oProcess->Load( $sProUid ); + $proFields['PRO_UID'] = $sProUid; + $Fields['PRO_PARENT'] == $sParentUid; + $oProcess->Update( $proFields ); + } - /** - * verify if the process $sProUid exists - * @param string $sProUid - * @return boolean - */ - function processExists ( $sProUid = '') { - $oProcess = new Process(); - return $oProcess->processExists( $sProUid ); - } + /** + * verify if the process $sProUid exists + * + * @param string $sProUid + * @return boolean + */ + function processExists ($sProUid = '') + { + $oProcess = new Process(); + return $oProcess->processExists( $sProUid ); + } - /** - * get an unused process GUID - * @return $sProUid - */ - function getUnusedProcessGUID( ) { - do { - $sNewProUid = G::generateUniqueID() ; - } while ( $this->processExists ( $sNewProUid ) ); - return $sNewProUid; - } + /** + * get an unused process GUID + * + * @return $sProUid + */ + function getUnusedProcessGUID () + { + do { + $sNewProUid = G::generateUniqueID(); + } while ($this->processExists( $sNewProUid )); + return $sNewProUid; + } - /** - * verify if the task $sTasUid exists - * @param string $sTasUid - * @return boolean - */ - function taskExists ( $sTasUid = '') { - $oTask = new Task(); - return $oTask->taskExists( $sTasUid ); - } + /** + * verify if the task $sTasUid exists + * + * @param string $sTasUid + * @return boolean + */ + function taskExists ($sTasUid = '') + { + $oTask = new Task(); + return $oTask->taskExists( $sTasUid ); + } - /** - * get an unused task GUID - * @return $sTasUid - */ - function getUnusedTaskGUID( ) { - do { - $sNewTasUid = G::generateUniqueID() ; - } while ( $this->taskExists ( $sNewTasUid ) ); - return $sNewTasUid; - } + /** + * get an unused task GUID + * + * @return $sTasUid + */ + function getUnusedTaskGUID () + { + do { + $sNewTasUid = G::generateUniqueID(); + } while ($this->taskExists( $sNewTasUid )); + return $sNewTasUid; + } - /** - * verify if the dynaform $sDynUid exists - * @param string $sDynUid - * @return boolean - */ - function dynaformExists ( $sDynUid = '') { - $oDynaform = new Dynaform(); - return $oDynaform->dynaformExists( $sDynUid ); - } + /** + * verify if the dynaform $sDynUid exists + * + * @param string $sDynUid + * @return boolean + */ + function dynaformExists ($sDynUid = '') + { + $oDynaform = new Dynaform(); + return $oDynaform->dynaformExists( $sDynUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function inputExists ( $sUid = '') { - $oInput = new InputDocument(); - return $oInput->inputExists( $sUid ); - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function inputExists ($sUid = '') + { + $oInput = new InputDocument(); + return $oInput->inputExists( $sUid ); + } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function outputExists ($sUid = '') + { + $oOutput = new OutputDocument(); + return $oOutput->outputExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function outputExists ( $sUid = '') { - $oOutput = new OutputDocument(); - return $oOutput->outputExists( $sUid ); - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function triggerExists ($sUid = '') + { + $oTrigger = new Triggers(); + return $oTrigger->triggerExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function triggerExists ( $sUid = '') { - $oTrigger = new Triggers(); - return $oTrigger->triggerExists( $sUid ); - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function SubProcessExists ($sUid = '') + { + $oSubProcess = new SubProcess(); + return $oSubProcess->subProcessExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function SubProcessExists ( $sUid = '') { - $oSubProcess = new SubProcess(); - return $oSubProcess->subProcessExists( $sUid ); - } + /** + * verify if a caseTrackerObject object exists + * + * @param string $sUid + * @return boolean + */ + function caseTrackerObjectExists ($sUid = '') + { + $oCaseTrackerObject = new CaseTrackerObject(); + return $oCaseTrackerObject->caseTrackerObjectExists( $sUid ); + } - /** - * verify if a caseTrackerObject object exists - * @param string $sUid - * @return boolean - */ - function caseTrackerObjectExists ( $sUid = '') { - $oCaseTrackerObject = new CaseTrackerObject(); - return $oCaseTrackerObject->caseTrackerObjectExists( $sUid ); - } + /** + * verify if a caseTracker Object exists + * + * @param string $sUid + * @return boolean + */ + function caseTrackerExists ($sUid = '') + { + $oCaseTracker = new CaseTracker(); + return $oCaseTracker->caseTrackerExists( $sUid ); + } - /** - * verify if a caseTracker Object exists - * @param string $sUid - * @return boolean - */ - function caseTrackerExists ( $sUid = '') { - $oCaseTracker = new CaseTracker(); - return $oCaseTracker->caseTrackerExists( $sUid ); - } + /** + * verify if a dbconnection exists + * + * @param string $sUid + * @return boolean + */ + function dbConnectionExists ($sUid = '') + { + $oDBSource = new DbSource(); + return $oDBSource->Exists( $sUid ); + } - /** - * verify if a dbconnection exists - * @param string $sUid - * @return boolean - */ - function dbConnectionExists ( $sUid = '') { - $oDBSource = new DbSource(); - return $oDBSource->Exists( $sUid ); - } + /** + * verify if a objectPermission exists + * + * @param string $sUid + * @return boolean + */ + function objectPermissionExists ($sUid = '') + { + $oObjectPermission = new ObjectPermission(); + return $oObjectPermission->Exists( $sUid ); + } - /** - * verify if a objectPermission exists - * @param string $sUid - * @return boolean - */ - function objectPermissionExists ( $sUid = '') { - $oObjectPermission = new ObjectPermission(); - return $oObjectPermission->Exists( $sUid ); - } + /** + * verify if a route exists + * + * @param string $sUid + * @return boolean + */ + function routeExists ($sUid = '') + { + $oRoute = new Route(); + return $oRoute->routeExists( $sUid ); + } - /** - * verify if a route exists - * @param string $sUid - * @return boolean - */ - function routeExists ( $sUid = '') { - $oRoute = new Route(); - return $oRoute->routeExists( $sUid ); - } + /** + * verify if a stage exists + * + * @param string $sUid + * @return boolean + */ + function stageExists ($sUid = '') + { + $oStage = new Stage(); + return $oStage->Exists( $sUid ); + } - /** - * verify if a stage exists - * @param string $sUid - * @return boolean - */ - function stageExists ( $sUid = '') { - $oStage = new Stage(); - return $oStage->Exists( $sUid ); - } + /** + * verify if a swimlane exists + * + * @param string $sUid + * @return boolean + */ + function slExists ($sUid = '') + { + $oSL = new SwimlanesElements(); + return $oSL->swimlanesElementsExists( $sUid ); + } - /** - * verify if a swimlane exists - * @param string $sUid - * @return boolean - */ - function slExists ( $sUid = '') { - $oSL = new SwimlanesElements(); - return $oSL->swimlanesElementsExists( $sUid ); - } + /** + * verify if a reportTable exists + * + * @param string $sUid + * @return boolean + */ + function reportTableExists ($sUid = '') + { + $oReportTable = new ReportTable(); + return $oReportTable->reportTableExists( $sUid ); + } - /** - * verify if a reportTable exists - * @param string $sUid - * @return boolean - */ - function reportTableExists ( $sUid = '') { - $oReportTable = new ReportTable(); - return $oReportTable->reportTableExists( $sUid ); - } + /** + * verify if a reportVar exists + * + * @param string $sUid + * @return boolean + */ + function reportVarExists ($sUid = '') + { + $oReportVar = new ReportVar(); + return $oReportVar->reportVarExists( $sUid ); + } - /** - * verify if a reportVar exists - * @param string $sUid - * @return boolean - */ - function reportVarExists ( $sUid = '') { - $oReportVar = new ReportVar(); - return $oReportVar->reportVarExists( $sUid ); - } + /** + * verify if a caseTrackerObject exists + * + * @param string $sUid + * @return boolean + */ + function fieldsConditionsExists ($sUid = '') + { + $oFieldCondition = new FieldCondition(); + return $oFieldCondition->Exists( $sUid ); + } - /** - * verify if a caseTrackerObject exists - * @param string $sUid - * @return boolean - */ - function fieldsConditionsExists ( $sUid = '') { - $oFieldCondition = new FieldCondition(); - return $oFieldCondition->Exists($sUid); - } + /** + * verify if an event exists + * + * @param string $sUid + * @return boolean + */ + function eventExists ($sUid = '') + { + $oEvent = new Event(); + return $oEvent->Exists( $sUid ); + } - /** - * verify if an event exists - * @param string $sUid - * @return boolean - */ - function eventExists ( $sUid = '') { - $oEvent = new Event(); - return $oEvent->Exists($sUid); - } + /** + * verify if a caseScheduler exists + * + * @param string $sUid + * @return boolean + */ + function caseSchedulerExists ($sUid = '') + { + $oCaseScheduler = new CaseScheduler(); + return $oCaseScheduler->Exists( $sUid ); + } - /** - * verify if a caseScheduler exists - * @param string $sUid - * @return boolean - */ - function caseSchedulerExists ( $sUid = '') { - $oCaseScheduler = new CaseScheduler(); - return $oCaseScheduler->Exists($sUid); - } + /** + * get an unused input GUID + * + * @return $sProUid + */ + function getUnusedInputGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->inputExists( $sNewUid )); + return $sNewUid; + } + /** + * get an unused output GUID + * + * @return $sProUid + */ + function getUnusedOutputGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->outputExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused input GUID - * @return $sProUid - */ - function getUnusedInputGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->inputExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get an unused trigger GUID + * + * @return $sProUid + */ + function getUnusedTriggerGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->triggerExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused output GUID - * @return $sProUid - */ - function getUnusedOutputGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->outputExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get an unused trigger GUID + * + * @return $sProUid + */ + function getUnusedSubProcessGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->subProcessExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused trigger GUID - * @return $sProUid - */ - function getUnusedTriggerGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->triggerExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused CaseTrackerObject GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedCaseTrackerObjectGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->caseTrackerObjectExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused trigger GUID - * @return $sProUid - */ - function getUnusedSubProcessGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->subProcessExists ( $sNewUid ) ); - return $sNewUid; - } - /** - * get a Unused CaseTrackerObject GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedCaseTrackerObjectGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->caseTrackerObjectExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Database Source GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedDBSourceGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->dbConnectionExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Database Source GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedDBSourceGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->dbConnectionExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Object Permission GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedObjectPermissionGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->objectPermissionExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Object Permission GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedObjectPermissionGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->objectPermissionExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Route GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedRouteGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->routeExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Route GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedRouteGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->routeExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Stage GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedStageGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->stageExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Stage GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedStageGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->stageExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused SL GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedSLGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->slExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused SL GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedSLGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->slExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Report Table GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedRTGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->reportTableExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Report Table GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedRTGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->reportTableExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * get a Unused Report Var GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedRTVGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->reportVarExists( $sNewUid )); + return $sNewUid; + } - /** - * get a Unused Report Var GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedRTVGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->reportVarExists ( $sNewUid ) ); - return $sNewUid; - } + /** + * verify if the object exists + * + * @param string $sUid + * @return boolean + */ + function stepExists ($sUid = '') + { + $oStep = new Step(); + return $oStep->stepExists( $sUid ); + } - /** - * verify if the object exists - * @param string $sUid - * @return boolean - */ - function stepExists ( $sUid = '') { - $oStep = new Step(); - return $oStep->stepExists( $sUid ); - } + /** + * get an unused step GUID + * + * @return $sUid + */ + function getUnusedStepGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->stepExists( $sNewUid )); + return $sNewUid; + } - /** - * get an unused step GUID - * @return $sUid - */ - function getUnusedStepGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->stepExists ( $sNewUid ) ); - return $sNewUid; - } - - - /* + /* * get an unused Dynaform GUID * @return $sDynUid */ - function getUnusedDynaformGUID( ) { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->dynaformExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * get a Unused Field Condition GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedFieldConditionGUID() { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this->fieldsConditionsExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * get a Unused Event GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedEventGUID() { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this-> eventExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * get a Unused Case Scheduler GUID - * @return $sNewUid a new generated Uid - */ - function getUnusedCaseSchedulerGUID() { - do { - $sNewUid = G::generateUniqueID() ; - } while ( $this-> caseSchedulerExists ( $sNewUid ) ); - return $sNewUid; - } - - /** - * change the GUID for a serialized process - * @param string $sProUid - * @return boolean - */ - function setProcessGUID( &$oData, $sNewProUid ) { - $sProUid = $oData->process['PRO_UID']; - $oData->process['PRO_UID'] = $sNewProUid; - - if ( isset($oData->tasks ) && is_array($oData->tasks) ) { - foreach ($oData->tasks as $key => $val ) { - $oData->tasks[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->routes ) && is_array($oData->routes) ) { - foreach ($oData->routes as $key => $val ) { - $oData->routes[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->lanes ) && is_array($oData->lanes) ) { - foreach ($oData->lanes as $key => $val ) { - $oData->lanes[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->inputs ) && is_array($oData->inputs) ) { - foreach ($oData->inputs as $key => $val ) { - $oData->inputs[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->outputs ) && is_array($oData->outputs) ) { - foreach ($oData->outputs as $key => $val ) { - $oData->outputs[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->steps ) && is_array($oData->steps) ) { - foreach ($oData->steps as $key => $val ) { - $oData->steps[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->dynaforms ) && is_array($oData->dynaforms) ) { - foreach ($oData->dynaforms as $key => $val ) { - $oData->dynaforms[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->triggers ) && is_array($oData->triggers) ) { - foreach ($oData->triggers as $key => $val ) { - $oData->triggers[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->reportTables ) && is_array($oData->reportTables) ) { - foreach ($oData->reportTables as $key => $val ) { - $oData->reportTables[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->reportTablesVars ) && is_array($oData->reportTablesVars) ) { - foreach ($oData->reportTablesVars as $key => $val ) { - $oData->reportTablesVars[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->dbconnections ) && is_array($oData->dbconnections) ) { - foreach ($oData->dbconnections as $key => $val ) { - $oData->dbconnections[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->stepSupervisor ) && is_array($oData->stepSupervisor) ) { - foreach ($oData->stepSupervisor as $key => $val ) { - $oData->stepSupervisor[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ($oData->objectPermissions as $key => $val ) { - $oData->objectPermissions[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->caseTracker ) && is_array($oData->caseTracker) ) { - foreach ($oData->caseTracker as $key => $val ) { - $oData->caseTracker[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->caseTrackerObject ) && is_array($oData->caseTrackerObject) ) { - foreach ($oData->caseTrackerObject as $key => $val ) { - $oData->caseTrackerObject[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->stage ) && is_array($oData->stage) ) { - foreach ($oData->stage as $key => $val ) { - $oData->stage[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->subProcess ) && is_array($oData->subProcess) ) { - foreach ($oData->subProcess as $key => $val ) { - $oData->subProcess[$key]['PRO_PARENT'] = $sNewProUid; - } - } - - if ( isset($oData->event ) && is_array($oData->event) ) { - foreach ($oData->event as $key => $val ) { - $oData->event[$key]['PRO_UID'] = $sNewProUid; - } - } - - if ( isset($oData->caseScheduler ) && is_array($oData->caseScheduler) ) { - foreach ($oData->caseScheduler as $key => $val){ - $oData->caseScheduler[$key]['PRO_UID'] = $sNewProUid; - } - } - return true; - } - - /** - * change the GUID Parent for a serialized process, only in serialized data - * @param string $sProUid - * @return boolean - */ - function setProcessParent( &$oData, $sParentUid ) { - $oData->process['PRO_PARENT'] = $sParentUid; - $oData->process['PRO_CREATE_DATE'] = date ('Y-m-d H:i:s'); - $oData->process['PRO_UPDATE_DATE'] = date ('Y-m-d H:i:s'); - return true; - } - - /** - * change and Renew all Task GUID, because the process needs to have a new set of tasks - * @param string $oData - * @return boolean - */ - function renewAllTaskGuid ( &$oData ) { - $map = array (); - foreach ( $oData->tasks as $key => $val ) { - $newGuid = $this->getUnusedTaskGUID(); - $map[ $val['TAS_UID'] ] = $newGuid; - $oData->tasks[$key]['TAS_UID'] = $newGuid; - } - if ( isset($oData->routes ) && is_array($oData->routes) ) { - foreach ( $oData->routes as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->routes[$key]['TAS_UID'] = $newGuid; - if ( strlen ( $val['ROU_NEXT_TASK'] ) > 0 && $val['ROU_NEXT_TASK'] >0 ) { - $newGuid = $map[ $val['ROU_NEXT_TASK'] ]; - $oData->routes[$key]['ROU_NEXT_TASK'] = $newGuid; - } - } - } - - if ( isset($oData->steps) && is_array($oData->steps) ) { - foreach ( $oData->steps as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->steps[$key]['TAS_UID'] = $newGuid; - } - } - - if ( isset($oData->steptriggers ) && is_array($oData->steptriggers) ) { - foreach ( $oData->steptriggers as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->steptriggers[$key]['TAS_UID'] = $newGuid; - } - } - - if ( isset($oData->taskusers ) && is_array($oData->taskusers) ) { - foreach ( $oData->taskusers as $key => $val ) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->taskusers[$key]['TAS_UID'] = $newGuid; - } - } - - if ( isset($oData->subProcess ) && is_array($oData->subProcess) ) { - foreach ( $oData->subProcess as $key => $val ) { - $newGuid = $map[ $val['TAS_PARENT'] ]; - $oData->subProcess[$key]['TAS_PARENT'] = $newGuid; - if (isset($map[ $val['TAS_UID'] ])) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->subProcess[$key]['TAS_UID'] = $newGuid; - } - } - } - - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ( $oData->objectPermissions as $key => $val ) { - if (isset($map[ $val['TAS_UID'] ])) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->objectPermissions[$key]['TAS_UID'] = $newGuid; - } - } - } - - // New process bpmn - if ( isset($oData->event ) && is_array($oData->event) ) { - foreach ( $oData->event as $key => $val ) { - if (isset($val['EVN_TAS_UID_FROM']) && isset($map[ $val['EVN_TAS_UID_FROM'] ])) { - $newGuid = $map[ $val['EVN_TAS_UID_FROM'] ]; - $oData->event[$key]['EVN_TAS_UID_FROM'] = $newGuid; - } - } - } - - if ( isset($oData->caseScheduler ) && is_array($oData->caseScheduler) ) { - foreach ( $oData->caseScheduler as $key => $val ) { - if (isset($map[ $val['TAS_UID'] ])) { - $newGuid = $map[ $val['TAS_UID'] ]; - $oData->caseScheduler[$key]['TAS_UID'] = $newGuid; - } - } - } - - } - - /** - * change and Renew all Dynaform GUID, because the process needs to have a new set of dynaforms - * @param string $oData - * @return boolean - */ - function renewAllDynaformGuid ( &$oData ) { - $map = array (); - foreach ( $oData->dynaforms as $key => $val ) { - $newGuid = $this->getUnusedDynaformGUID(); - $map[ $val['DYN_UID'] ] = $newGuid; - $oData->dynaforms[$key]['DYN_UID'] = $newGuid; - } - - if ( isset($oData->process['PRO_DYNAFORMS']) && !is_array($oData->process['PRO_DYNAFORMS'])) { - $oData->process['PRO_DYNAFORMS'] = @unserialize($oData->process['PRO_DYNAFORMS']); - } - - if (!isset($oData->process['PRO_DYNAFORMS']['PROCESS'])) { - $oData->process['PRO_DYNAFORMS']['PROCESS'] = ''; - } - - if ($oData->process['PRO_DYNAFORMS']['PROCESS'] != '') { - $oData->process['PRO_DYNAFORMS']['PROCESS'] = $map[$oData->process['PRO_DYNAFORMS']['PROCESS']]; - } - - foreach ( $oData->steps as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'DYNAFORM' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - - if ( isset($oData->caseTrackerObject ) && is_array($oData->caseTrackerObject) ) { - foreach ( $oData->caseTrackerObject as $key => $val ) { - if ( $val['CTO_TYPE_OBJ'] == 'DYNAFORM' ) { - $newGuid = $map[ $val['CTO_UID_OBJ'] ]; - $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; - } - } - } - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ( $oData->objectPermissions as $key => $val ) { - if ( $val['OP_OBJ_TYPE'] == 'DYNAFORM' ) { - if(isset($map[ $val['OP_OBJ_UID'] ])){ - $newGuid = $map[ $val['OP_OBJ_UID'] ]; - $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; - } - } - } - } - if ( isset($oData->stepSupervisor ) && is_array($oData->stepSupervisor) ) { - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'DYNAFORM' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - foreach ( $oData->dynaformFiles as $key => $val ) { - $newGuid = $map[ $key ]; - $oData->dynaformFiles[$key] = $newGuid; - } - } - if(isset($oData->gridFiles)){ - foreach ( $oData->gridFiles as $key => $val ) { - $newGuid = $map[ $key ]; - $oData->gridFiles[$key] = $newGuid; - } - } - if ( isset($oData->fieldCondition ) && is_array($oData->fieldCondition) ) { - foreach( $oData->fieldCondition as $key => $val ){ - $newGuid = $map[ $val['FCD_DYN_UID'] ]; - $oData->fieldCondition[$key]['FCD_DYN_UID'] = $newGuid; - } - } - - } - - /** - * get a Process with a search based in the process Uid - * @param $sProUid string process Uid - * @return $oProcess Process object - */ - function getProcessRow ($sProUid,$getAllLang=false ){ - $oProcess = new Process( ); - return $oProcess->Load( $sProUid, $getAllLang ); - } - - /** - * creates a process new process if a process exists with the same uid of the - * $row['PRO_UID'] parameter then deletes it from the database and creates - * a new one based on the $row parameter - * @param $row array parameter with the process data - * @return $oProcess Process object - */ - function createProcessRow ($row ){ - $oProcess = new Process( ); - if($oProcess->processExists ($row['PRO_UID'])) - { $oProcess->remove($row['PRO_UID']); - } - - return $oProcess->createRow($row); - } - - /** - * Update a Process register in DB, if the process doesn't exist with the same - * uid of the $row['PRO_UID'] parameter the function creates a new one based - * on the $row parameter data. - * @param $row array parameter with the process data - * @return $oProcess Process object - */ - function updateProcessRow ($row ){ - $oProcess = new Process( ); - if($oProcess->processExists ($row['PRO_UID'])) - $oProcess->update($row); - else - $oProcess->create($row); - } - - /** - * Gets the subprocess data from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aSubProcess array - */ - function getSubProcessRow ($sProUid){ - try { - $aSubProcess = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProUid); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aSubProcess[] = $aRow; - $oDataset->next(); - } - return $aSubProcess; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets a case Tracker Row from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aCaseTracker array - */ - - function getCaseTrackerRow ($sProUid){ - try { - $aCaseTracker = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aCaseTracker[] = $aRow; - $oDataset->next(); - } - return $aCaseTracker; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets a case TrackerObject Row from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aCaseTracker array - */ - function getCaseTrackerObjectRow ($sProUid){ - try { - $aCaseTrackerObject = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aCaseTrackerObject[] = $aRow; - $oDataset->next(); - } - return $aCaseTrackerObject; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets a Stage Row from a process and returns it in an array. - * @param $sProUid string for the process Uid - * @return $aStage array - */ - function getStageRow ($sProUid){ - try { - $aStage = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StagePeer::PRO_UID, $sProUid); - $oDataset = StagePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oStage = new Stage(); - $aStage[] = $oStage->load($aRow['STG_UID']); - $oDataset->next(); - } - return $aStage; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets the Field Conditions from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $aFieldCondition array - */ - - function getFieldCondition($sProUid) { - try { - $aFieldCondition = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProUid); - $oCriteria->addJoin (DynaformPeer::DYN_UID, FieldConditionPeer::FCD_DYN_UID ); - - $oDataset = FieldConditionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aFieldCondition[] = $aRow; - $oDataset->next(); - } - return $aFieldCondition; - } - catch (Exception $oError) { - throw($oError); - } - } - -/** - * Gets the Event rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $aEvent array - */ - function getEventRow($sProUid) { - try { - $aEvent = array(); - $oCriteria = new Criteria('workflow'); - - $oCriteria->add(EventPeer::PRO_UID, $sProUid); - $oDataset = EventPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oEvent = new Event(); - $aEvent[] = $oEvent->load($aRow['EVN_UID']); - $oDataset->next(); - } - return $aEvent; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets the Cases Scheduler rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $aCaseScheduler array - */ - function getCaseSchedulerRow($sProUid) { - try { - $aCaseScheduler = array(); - $oCriteria = new Criteria('workflow'); - - $oCriteria->add(CaseSchedulerPeer::PRO_UID, $sProUid); - $oDataset = CaseSchedulerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oCaseScheduler = new CaseScheduler(); - $aCaseScheduler[] = $oCaseScheduler->load($aRow['SCH_UID']); - $oDataset->next(); - } - return $aCaseScheduler; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Gets processCategory record, if the process had one - * @param $sProUid string for the process Uid - * @return $processCategory array - */ - public function getProcessCategoryRow($sProUid) - { - $process = ProcessPeer::retrieveByPK($sProUid); - - if ($process->getProCategory() == '') { - return null; - } - - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ProcessCategoryPeer::CATEGORY_UID, $process->getProCategory()); - $oDataset = ProcessCategoryPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - - return $oDataset->getRow(); - } - - /** - * Get all Swimlanes Elements for any Process - * @param string $sProUid - * @return array - */ - public function getAllLanes($sProUid) { - try { - $aLanes = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProUid); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oSwim = new SwimlanesElements(); - $aLanes[] = $oSwim->Load($aRow['SWI_UID']); - $oDataset->next(); - } - return $aLanes; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Task Rows from a process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $oTask array - */ - function getTaskRows ($sProUid ){ - $oTask = new Tasks( ); - return $oTask->getAllTasks( $sProUid ); - } - - /** - * Create Task Rows from a $aTasks array data and returns those in an array. - * @param $aTasks array - * @return $oTask array - */ - function createTaskRows ($aTasks ){ - $oTask = new Tasks( ); - return $oTask->createTaskRows( $aTasks ); - } - - /** - * Update Task Rows from a $aTasks array data and returns those in an array. - * @param $aTasks array - * @return $oTask array - */ - function updateTaskRows ($aTasks ){ - $oTask = new Tasks( ); - return $oTask->updateTaskRows( $aTasks ); - } - - /** - * Gets all Route rows from a Process and returns those in an array. - * @param $sProUid string for the process Uid - * @return $oTask Tasks array - */ - function getRouteRows ($sProUid ){ - $oTask = new Tasks( ); - return $oTask->getAllRoutes( $sProUid ); - } - - /** - * Create Route Rows from a $aRoutes array data and returns those in an array. - * @param $aRoutes array - * @return $oTask Tasks array - */ - function createRouteRows ($aRoutes ){ - $oTask = new Tasks( ); - return $oTask->createRouteRows( $aRoutes ); - } - - /** - * Update Route Rows from a $aRoutes array data and returns those in an array. - * @param $aRoutes array - * @return $oTask Tasks array - */ - function updateRouteRows ($aRoutes ){ - $oTask = new Tasks( ); - return $oTask->updateRouteRows( $aRoutes ); - } - - /** - * Get Lane Rows from a Process and returns those in an array. - * @param $sProUid string for the process Uid - * @return array - */ - function getLaneRows ($sProUid ){ - 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. - * @return void - */ - function createLaneRows ($aLanes ){ - foreach ( $aLanes as $key => $row ) { - $oLane = new SwimlanesElements(); - if($oLane->swimlanesElementsExists($row['SWI_UID'])) - $oLane->remove($row['SWI_UID']); - - $res = $oLane->create($row); - } - return; - } - - /** - * Create Sub Process rows from an array, removing those subprocesses with - * the same UID. - * @param $SubProcess array - * @return void. - */ - function createSubProcessRows ($SubProcess ){ - foreach ( $SubProcess as $key => $row ) { - $oSubProcess = new SubProcess(); - if($oSubProcess->subProcessExists ($row['SP_UID'])) - $oSubProcess->remove($row['SP_UID']); - - $res = $oSubProcess->create($row); - } - return; - } - - /** - * Create Case Tracker rows from an array, removing those Trackers with - * the same UID. - * @param $CaseTracker array. - * @return void - */ - function createCaseTrackerRows ($CaseTracker ){ - if ( is_array ( $CaseTracker) ) - foreach ( $CaseTracker as $key => $row ) { - $oCaseTracker = new CaseTracker(); - if($oCaseTracker->caseTrackerExists ($row['PRO_UID'])) - $oCaseTracker->remove($row['PRO_UID']); - $res = $oCaseTracker->create($row); - } - return; - } - - /** - * Create Case Tracker Objects rows from an array, removing those Objects - * with the same UID, and recreaiting those from the array data. - * @param $CaseTrackerObject array. - * @return void - */ - function createCaseTrackerObjectRows ($CaseTrackerObject ) { - foreach ( $CaseTrackerObject as $key => $row ) { - $oCaseTrackerObject = new CaseTrackerObject(); - if($oCaseTrackerObject->caseTrackerObjectExists ($row['CTO_UID'])) - $oCaseTrackerObject->remove($row['CTO_UID']); - $res = $oCaseTrackerObject->create($row); - } - return; - } - - /** - * Create Object Permissions rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $sProUid string for the process Uid. - * @return void - */ - function createObjectPermissionsRows ($ObjectPermissions ) { - foreach ( $ObjectPermissions as $key => $row ) { - $oObjectPermissions = new ObjectPermission(); - if($oObjectPermissions->Exists ($row['OP_UID'])) - $oObjectPermissions->remove($row['OP_UID']); - $res = $oObjectPermissions->create($row); - } - return; - } - - /** - * Create Stage rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $Stage array. - * @return void - */ - function createStageRows ($Stage ) { - foreach ( $Stage as $key => $row ) { - $oStage = new Stage(); - if($oStage->Exists ($row['STG_UID'])) - $oStage->remove($row['STG_UID']); - $res = $oStage->create($row); - } - return; - } - - /** - * Create Field Conditions from an array of Field Conditions and Dynaforms, - * removing those Objects with the same UID, and recreaiting the records - * from the arrays data. - * @param $aFieldCondition array. - * @param $aDynaform array. - * @return void - */ - function createFieldCondition($aFieldCondition, $aDynaform ){ - if ( is_array ( $aFieldCondition ) ) - foreach ( $aFieldCondition as $key => $row ) { - $oFieldCondition = new FieldCondition(); - if($oFieldCondition->fieldConditionExists ($row['FCD_UID'], $aDynaform) ) - $oFieldCondition->remove($row['FCD_UID']); - $res = $oFieldCondition->create($row); - } - return; - } - - /** - * Create Event rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $Event array. - * @return void - */ - function createEventRows ($Event ) { - foreach ( $Event as $key => $row ) { - $oEvent = new Event(); - if($oEvent->Exists ($row['EVN_UID'])) - $oEvent->remove($row['EVN_UID']); - - $res = $oEvent->create($row); - } - return; - } - - /** - * Create Case Scheduler Rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $CaseScheduler array. - * @return void - */ - function createCaseSchedulerRows ($CaseScheduler ) { - foreach ( $CaseScheduler as $key => $row ) { - $oCaseScheduler = new CaseScheduler(); - if($oCaseScheduler->Exists($row['SCH_UID'])) - $oCaseScheduler->remove($row['SCH_UID']); - - $res = $oCaseScheduler->create($row); - } - return; - } - - /** - * Create ProcessCategory record - * @param $ProcessCategory array. - * @return void - */ - function createProcessCategoryRow ($row) - { - if ($row && is_array($row) && isset($row['CATEGORY_UID'])) { - $record = ProcessCategoryPeer::retrieveByPK($row['CATEGORY_UID']); - // create only if the category doesn't exists - if (!$record) { - $processCategory = new ProcessCategory(); - $processCategory->fromArray($row, BasePeer::TYPE_FIELDNAME); - $processCategory->save(); - } - } - } - - /** - * Gets Input Documents Rows from aProcess. - * @param $sProUid string. - * @return void - */ - function getInputRows ($sProUid ){ - try { - $aInput = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(InputdocumentPeer::PRO_UID, $sProUid); - $oDataset = InputdocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oInput = new Inputdocument(); - $aInput[] = $oInput->Load( $aRow['INP_DOC_UID'] ); - $oDataset->next(); - } - return $aInput; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Create Input Documents Rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $aInput array. - * @return void - */ - function createInputRows ($aInput ){ - foreach ( $aInput as $key => $row ) { - $oInput = new Inputdocument(); - //unset ($row['TAS_UID']); - if($oInput->InputExists ($row['INP_DOC_UID'])) - $oInput->remove($row['INP_DOC_UID']); - - $res = $oInput->create($row); - } - return; - } - - /** - * change and Renew all Input GUID, because the process needs to have a new set of Inputs - * @param string $oData - * @return boolean - */ - function renewAllInputGuid ( &$oData ) { - $map = array (); - foreach ( $oData->inputs as $key => $val ) { - $newGuid = $this->getUnusedInputGUID(); - $map[ $val['INP_DOC_UID'] ] = $newGuid; - $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; - } - foreach ( $oData->steps as $key => $val ) { - if(isset($val['STEP_TYPE_OBJ'])){ - if ( $val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - } - if ( isset($oData->caseTrackerObject ) && is_array($oData->caseTrackerObject) ) { - foreach ( $oData->caseTrackerObject as $key => $val ) { - if ( $val['CTO_TYPE_OBJ'] == 'INPUT_DOCUMENT' ) { - $newGuid = $map[ $val['CTO_UID_OBJ'] ]; - $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; - } - } - } - if ( isset($oData->objectPermissions ) && is_array($oData->objectPermissions) ) { - foreach ( $oData->objectPermissions as $key => $val ) { - if ( $val['OP_OBJ_TYPE'] == 'INPUT_DOCUMENT' ) { - if(isset($map[ $val['OP_OBJ_UID'] ])){ - $newGuid = $map[ $val['OP_OBJ_UID'] ]; - $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + function getUnusedDynaformGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->dynaformExists( $sNewUid )); + return $sNewUid; + } + + /** + * get a Unused Field Condition GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedFieldConditionGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->fieldsConditionsExists( $sNewUid )); + return $sNewUid; + } + + /** + * get a Unused Event GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedEventGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->eventExists( $sNewUid )); + return $sNewUid; + } + + /** + * get a Unused Case Scheduler GUID + * + * @return $sNewUid a new generated Uid + */ + function getUnusedCaseSchedulerGUID () + { + do { + $sNewUid = G::generateUniqueID(); + } while ($this->caseSchedulerExists( $sNewUid )); + return $sNewUid; + } + + /** + * change the GUID for a serialized process + * + * @param string $sProUid + * @return boolean + */ + function setProcessGUID (&$oData, $sNewProUid) + { + $sProUid = $oData->process['PRO_UID']; + $oData->process['PRO_UID'] = $sNewProUid; + + if (isset( $oData->tasks ) && is_array( $oData->tasks )) { + foreach ($oData->tasks as $key => $val) { + $oData->tasks[$key]['PRO_UID'] = $sNewProUid; } } - } - } - if ( isset($oData->stepSupervisor ) && is_array($oData->stepSupervisor) ) { - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + + if (isset( $oData->routes ) && is_array( $oData->routes )) { + foreach ($oData->routes as $key => $val) { + $oData->routes[$key]['PRO_UID'] = $sNewProUid; + } } - } - } - } - /** - * Gets the Output Documents Rows from a Process. - * @param $sProUid string. - * @return $aOutput array - */ - function getOutputRows ($sProUid ){ - try { - $aOutput = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(OutputdocumentPeer::PRO_UID, $sProUid); - $oDataset = OutputdocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oOutput = new Outputdocument(); - $aOutput[] = $oOutput->Load( $aRow['OUT_DOC_UID'] ); + if (isset( $oData->lanes ) && is_array( $oData->lanes )) { + foreach ($oData->lanes as $key => $val) { + $oData->lanes[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->inputs ) && is_array( $oData->inputs )) { + foreach ($oData->inputs as $key => $val) { + $oData->inputs[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->outputs ) && is_array( $oData->outputs )) { + foreach ($oData->outputs as $key => $val) { + $oData->outputs[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->steps ) && is_array( $oData->steps )) { + foreach ($oData->steps as $key => $val) { + $oData->steps[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->dynaforms ) && is_array( $oData->dynaforms )) { + foreach ($oData->dynaforms as $key => $val) { + $oData->dynaforms[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->triggers ) && is_array( $oData->triggers )) { + foreach ($oData->triggers as $key => $val) { + $oData->triggers[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->reportTables ) && is_array( $oData->reportTables )) { + foreach ($oData->reportTables as $key => $val) { + $oData->reportTables[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->reportTablesVars ) && is_array( $oData->reportTablesVars )) { + foreach ($oData->reportTablesVars as $key => $val) { + $oData->reportTablesVars[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->dbconnections ) && is_array( $oData->dbconnections )) { + foreach ($oData->dbconnections as $key => $val) { + $oData->dbconnections[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->stepSupervisor ) && is_array( $oData->stepSupervisor )) { + foreach ($oData->stepSupervisor as $key => $val) { + $oData->stepSupervisor[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + $oData->objectPermissions[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->caseTracker ) && is_array( $oData->caseTracker )) { + foreach ($oData->caseTracker as $key => $val) { + $oData->caseTracker[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->caseTrackerObject ) && is_array( $oData->caseTrackerObject )) { + foreach ($oData->caseTrackerObject as $key => $val) { + $oData->caseTrackerObject[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->stage ) && is_array( $oData->stage )) { + foreach ($oData->stage as $key => $val) { + $oData->stage[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->subProcess ) && is_array( $oData->subProcess )) { + foreach ($oData->subProcess as $key => $val) { + $oData->subProcess[$key]['PRO_PARENT'] = $sNewProUid; + } + } + + if (isset( $oData->event ) && is_array( $oData->event )) { + foreach ($oData->event as $key => $val) { + $oData->event[$key]['PRO_UID'] = $sNewProUid; + } + } + + if (isset( $oData->caseScheduler ) && is_array( $oData->caseScheduler )) { + foreach ($oData->caseScheduler as $key => $val) { + $oData->caseScheduler[$key]['PRO_UID'] = $sNewProUid; + } + } + return true; + } + + /** + * change the GUID Parent for a serialized process, only in serialized data + * + * @param string $sProUid + * @return boolean + */ + function setProcessParent (&$oData, $sParentUid) + { + $oData->process['PRO_PARENT'] = $sParentUid; + $oData->process['PRO_CREATE_DATE'] = date( 'Y-m-d H:i:s' ); + $oData->process['PRO_UPDATE_DATE'] = date( 'Y-m-d H:i:s' ); + return true; + } + + /** + * change and Renew all Task GUID, because the process needs to have a new set of tasks + * + * @param string $oData + * @return boolean + */ + function renewAllTaskGuid (&$oData) + { + $map = array (); + foreach ($oData->tasks as $key => $val) { + $newGuid = $this->getUnusedTaskGUID(); + $map[$val['TAS_UID']] = $newGuid; + $oData->tasks[$key]['TAS_UID'] = $newGuid; + } + if (isset( $oData->routes ) && is_array( $oData->routes )) { + foreach ($oData->routes as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->routes[$key]['TAS_UID'] = $newGuid; + if (strlen( $val['ROU_NEXT_TASK'] ) > 0 && $val['ROU_NEXT_TASK'] > 0) { + $newGuid = $map[$val['ROU_NEXT_TASK']]; + $oData->routes[$key]['ROU_NEXT_TASK'] = $newGuid; + } + } + } + + if (isset( $oData->steps ) && is_array( $oData->steps )) { + foreach ($oData->steps as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->steps[$key]['TAS_UID'] = $newGuid; + } + } + + if (isset( $oData->steptriggers ) && is_array( $oData->steptriggers )) { + foreach ($oData->steptriggers as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->steptriggers[$key]['TAS_UID'] = $newGuid; + } + } + + if (isset( $oData->taskusers ) && is_array( $oData->taskusers )) { + foreach ($oData->taskusers as $key => $val) { + $newGuid = $map[$val['TAS_UID']]; + $oData->taskusers[$key]['TAS_UID'] = $newGuid; + } + } + + if (isset( $oData->subProcess ) && is_array( $oData->subProcess )) { + foreach ($oData->subProcess as $key => $val) { + $newGuid = $map[$val['TAS_PARENT']]; + $oData->subProcess[$key]['TAS_PARENT'] = $newGuid; + if (isset( $map[$val['TAS_UID']] )) { + $newGuid = $map[$val['TAS_UID']]; + $oData->subProcess[$key]['TAS_UID'] = $newGuid; + } + } + } + + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + if (isset( $map[$val['TAS_UID']] )) { + $newGuid = $map[$val['TAS_UID']]; + $oData->objectPermissions[$key]['TAS_UID'] = $newGuid; + } + } + } + + // New process bpmn + if (isset( $oData->event ) && is_array( $oData->event )) { + foreach ($oData->event as $key => $val) { + if (isset( $val['EVN_TAS_UID_FROM'] ) && isset( $map[$val['EVN_TAS_UID_FROM']] )) { + $newGuid = $map[$val['EVN_TAS_UID_FROM']]; + $oData->event[$key]['EVN_TAS_UID_FROM'] = $newGuid; + } + } + } + + if (isset( $oData->caseScheduler ) && is_array( $oData->caseScheduler )) { + foreach ($oData->caseScheduler as $key => $val) { + if (isset( $map[$val['TAS_UID']] )) { + $newGuid = $map[$val['TAS_UID']]; + $oData->caseScheduler[$key]['TAS_UID'] = $newGuid; + } + } + } + + } + + /** + * change and Renew all Dynaform GUID, because the process needs to have a new set of dynaforms + * + * @param string $oData + * @return boolean + */ + function renewAllDynaformGuid (&$oData) + { + $map = array (); + foreach ($oData->dynaforms as $key => $val) { + $newGuid = $this->getUnusedDynaformGUID(); + $map[$val['DYN_UID']] = $newGuid; + $oData->dynaforms[$key]['DYN_UID'] = $newGuid; + } + + if (isset( $oData->process['PRO_DYNAFORMS'] ) && ! is_array( $oData->process['PRO_DYNAFORMS'] )) { + $oData->process['PRO_DYNAFORMS'] = @unserialize( $oData->process['PRO_DYNAFORMS'] ); + } + + if (! isset( $oData->process['PRO_DYNAFORMS']['PROCESS'] )) { + $oData->process['PRO_DYNAFORMS']['PROCESS'] = ''; + } + + if ($oData->process['PRO_DYNAFORMS']['PROCESS'] != '') { + $oData->process['PRO_DYNAFORMS']['PROCESS'] = $map[$oData->process['PRO_DYNAFORMS']['PROCESS']]; + } + + foreach ($oData->steps as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'DYNAFORM') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + + if (isset( $oData->caseTrackerObject ) && is_array( $oData->caseTrackerObject )) { + foreach ($oData->caseTrackerObject as $key => $val) { + if ($val['CTO_TYPE_OBJ'] == 'DYNAFORM') { + $newGuid = $map[$val['CTO_UID_OBJ']]; + $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; + } + } + } + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + if ($val['OP_OBJ_TYPE'] == 'DYNAFORM') { + if (isset( $map[$val['OP_OBJ_UID']] )) { + $newGuid = $map[$val['OP_OBJ_UID']]; + $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + } + } + } + } + if (isset( $oData->stepSupervisor ) && is_array( $oData->stepSupervisor )) { + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'DYNAFORM') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + foreach ($oData->dynaformFiles as $key => $val) { + $newGuid = $map[$key]; + $oData->dynaformFiles[$key] = $newGuid; + } + } + if (isset( $oData->gridFiles )) { + foreach ($oData->gridFiles as $key => $val) { + $newGuid = $map[$key]; + $oData->gridFiles[$key] = $newGuid; + } + } + if (isset( $oData->fieldCondition ) && is_array( $oData->fieldCondition )) { + foreach ($oData->fieldCondition as $key => $val) { + $newGuid = $map[$val['FCD_DYN_UID']]; + $oData->fieldCondition[$key]['FCD_DYN_UID'] = $newGuid; + } + } + + } + + /** + * get a Process with a search based in the process Uid + * + * @param $sProUid string process Uid + * @return $oProcess Process object + */ + function getProcessRow ($sProUid, $getAllLang = false) + { + $oProcess = new Process(); + return $oProcess->Load( $sProUid, $getAllLang ); + } + + /** + * creates a process new process if a process exists with the same uid of the + * $row['PRO_UID'] parameter then deletes it from the database and creates + * a new one based on the $row parameter + * + * @param $row array parameter with the process data + * @return $oProcess Process object + */ + function createProcessRow ($row) + { + $oProcess = new Process(); + if ($oProcess->processExists( $row['PRO_UID'] )) { + $oProcess->remove( $row['PRO_UID'] ); + } + + return $oProcess->createRow( $row ); + } + + /** + * Update a Process register in DB, if the process doesn't exist with the same + * uid of the $row['PRO_UID'] parameter the function creates a new one based + * on the $row parameter data. + * + * @param $row array parameter with the process data + * @return $oProcess Process object + */ + function updateProcessRow ($row) + { + $oProcess = new Process(); + if ($oProcess->processExists( $row['PRO_UID'] )) + $oProcess->update( $row ); + else + $oProcess->create( $row ); + } + + /** + * Gets the subprocess data from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aSubProcess array + */ + function getSubProcessRow ($sProUid) + { + try { + $aSubProcess = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProUid ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aSubProcess[] = $aRow; + $oDataset->next(); + } + return $aSubProcess; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets a case Tracker Row from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aCaseTracker array + */ + + function getCaseTrackerRow ($sProUid) + { + try { + $aCaseTracker = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aCaseTracker[] = $aRow; + $oDataset->next(); + } + return $aCaseTracker; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets a case TrackerObject Row from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aCaseTracker array + */ + function getCaseTrackerObjectRow ($sProUid) + { + try { + $aCaseTrackerObject = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aCaseTrackerObject[] = $aRow; + $oDataset->next(); + } + return $aCaseTrackerObject; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets a Stage Row from a process and returns it in an array. + * + * @param $sProUid string for the process Uid + * @return $aStage array + */ + function getStageRow ($sProUid) + { + try { + $aStage = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StagePeer::PRO_UID, $sProUid ); + $oDataset = StagePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oStage = new Stage(); + $aStage[] = $oStage->load( $aRow['STG_UID'] ); + $oDataset->next(); + } + return $aStage; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets the Field Conditions from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $aFieldCondition array + */ + + function getFieldCondition ($sProUid) + { + try { + $aFieldCondition = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProUid ); + $oCriteria->addJoin( DynaformPeer::DYN_UID, FieldConditionPeer::FCD_DYN_UID ); + + $oDataset = FieldConditionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aFieldCondition[] = $aRow; + $oDataset->next(); + } + return $aFieldCondition; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets the Event rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $aEvent array + */ + function getEventRow ($sProUid) + { + try { + $aEvent = array (); + $oCriteria = new Criteria( 'workflow' ); + + $oCriteria->add( EventPeer::PRO_UID, $sProUid ); + $oDataset = EventPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oEvent = new Event(); + $aEvent[] = $oEvent->load( $aRow['EVN_UID'] ); + $oDataset->next(); + } + return $aEvent; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets the Cases Scheduler rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $aCaseScheduler array + */ + function getCaseSchedulerRow ($sProUid) + { + try { + $aCaseScheduler = array (); + $oCriteria = new Criteria( 'workflow' ); + + $oCriteria->add( CaseSchedulerPeer::PRO_UID, $sProUid ); + $oDataset = CaseSchedulerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oCaseScheduler = new CaseScheduler(); + $aCaseScheduler[] = $oCaseScheduler->load( $aRow['SCH_UID'] ); + $oDataset->next(); + } + return $aCaseScheduler; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Gets processCategory record, if the process had one + * + * @param $sProUid string for the process Uid + * @return $processCategory array + */ + public function getProcessCategoryRow ($sProUid) + { + $process = ProcessPeer::retrieveByPK( $sProUid ); + + if ($process->getProCategory() == '') { + return null; + } + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ProcessCategoryPeer::CATEGORY_UID, $process->getProCategory() ); + $oDataset = ProcessCategoryPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - return $aOutput; - } - catch (Exception $oError) { - throw($oError); - } - } - /** - * Create Input Documents Rows from an array, removing those Objects - * with the same UID, and recreaiting the records from the array data. - * @param $aOutput array. - * @return void - */ - function createOutputRows ($aOutput ){ - foreach ( $aOutput as $key => $row ) { - $oOutput = new Outputdocument(); - //unset ($row['TAS_UID']); - if($oOutput->OutputExists ($row['OUT_DOC_UID'])) - $oOutput->remove($row['OUT_DOC_UID']); + return $oDataset->getRow(); + } - $res = $oOutput->create($row); + /** + * Get all Swimlanes Elements for any Process + * + * @param string $sProUid + * @return array + */ + public function getAllLanes ($sProUid) + { + try { + $aLanes = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProUid ); + $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oSwim = new SwimlanesElements(); + $aLanes[] = $oSwim->Load( $aRow['SWI_UID'] ); + $oDataset->next(); + } + return $aLanes; + } catch (Exception $oError) { + throw ($oError); + } } - return; - } - /** - * change and Renew all Output GUID, because the process needs to have a new set of Outputs - * @param string $oData - * @return boolean - */ - function renewAllOutputGuid ( &$oData ) { - $map = array (); - foreach ( $oData->outputs as $key => $val ) { - $newGuid = $this->getUnusedOutputGUID(); - $map[ $val['OUT_DOC_UID'] ] = $newGuid; - $oData->outputs[$key]['OUT_DOC_UID'] = $newGuid; + /** + * Get Task Rows from a process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $oTask array + */ + function getTaskRows ($sProUid) + { + $oTask = new Tasks(); + return $oTask->getAllTasks( $sProUid ); } - foreach ( $oData->steps as $key => $val ) { - if(isset($val['STEP_TYPE_OBJ'])){ - if ( $val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - } - foreach ( $oData->caseTrackerObject as $key => $val ) { - if ( $val['CTO_TYPE_OBJ'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['CTO_UID_OBJ'] ]; - $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; - } - } - foreach ( $oData->objectPermissions as $key => $val ) { - if ( $val['OP_OBJ_TYPE'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['OP_OBJ_UID'] ]; - $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; - } - } - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT' ) { - $newGuid = $map[ $val['STEP_UID_OBJ'] ]; - $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; - } - } - } - /** - * change and Renew all Trigger GUID, because the process needs to have a new set of Triggers - * @param string $oData - * @return boolean - */ - function renewAllTriggerGuid ( &$oData ) { - $map = array (); - foreach ( $oData->triggers as $key => $val ) { - $newGuid = $this->getUnusedTriggerGUID(); - $map[ $val['TRI_UID'] ] = $newGuid; - $oData->triggers[$key]['TRI_UID'] = $newGuid; + /** + * Create Task Rows from a $aTasks array data and returns those in an array. + * + * @param $aTasks array + * @return $oTask array + */ + function createTaskRows ($aTasks) + { + $oTask = new Tasks(); + return $oTask->createTaskRows( $aTasks ); } - foreach ( $oData->steptriggers as $key => $val ) { - if (isset($map[ $val['TRI_UID'] ])) { - $newGuid = $map[ $val['TRI_UID'] ]; - $oData->steptriggers[$key]['TRI_UID'] = $newGuid; - } - else { - $oData->steptriggers[$key]['TRI_UID'] = $this->getUnusedTriggerGUID(); - } - } - } - /** - * Renew all the GUID's for Subprocesses - * @param $oData array. - * @return void - */ - function renewAllSubProcessGuid ( &$oData ) { - $map = array (); - foreach ( $oData->subProcess as $key => $val ) { - $newGuid = $this->getUnusedSubProcessGUID(); - $map[ $val['SP_UID'] ] = $newGuid; - $oData->subProcess[$key]['SP_UID'] = $newGuid; + /** + * Update Task Rows from a $aTasks array data and returns those in an array. + * + * @param $aTasks array + * @return $oTask array + */ + function updateTaskRows ($aTasks) + { + $oTask = new Tasks(); + return $oTask->updateTaskRows( $aTasks ); } - } - /** - * Renew all the GUID's for Case Tracker Objects - * @param $oData array. - * @return void - */ - function renewAllCaseTrackerObjectGuid ( &$oData ) { - $map = array (); - foreach ( $oData->caseTrackerObject as $key => $val ) { - $newGuid = $this->getUnusedCaseTrackerObjectGUID(); - $map[ $val['CTO_UID'] ] = $newGuid; - $oData->caseTrackerObject[$key]['CTO_UID'] = $newGuid; + /** + * Gets all Route rows from a Process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return $oTask Tasks array + */ + function getRouteRows ($sProUid) + { + $oTask = new Tasks(); + return $oTask->getAllRoutes( $sProUid ); } - } - /** - * Renew all the GUID's for DB Sources - * @param $oData array. - * @return void - */ - function renewAllDBSourceGuid ( &$oData ) { - $map = array (); - $aSqlConnections = array(); - foreach ( $oData->dbconnections as $key => $val ) { - $newGuid = $val['DBS_UID']; ///-- $this->getUnusedDBSourceGUID(); - $map[ $val['DBS_UID'] ] = $newGuid; - $oData->dbconnections[$key]['DBS_UID'] = $newGuid; + /** + * Create Route Rows from a $aRoutes array data and returns those in an array. + * + * @param $aRoutes array + * @return $oTask Tasks array + */ + function createRouteRows ($aRoutes) + { + $oTask = new Tasks(); + return $oTask->createRouteRows( $aRoutes ); } - $oData->sqlConnections = $map; - } - /** - * Renew all the GUID's for Object Permissions - * @param $oData array. - * @return void - */ - function renewAllObjectPermissionGuid ( &$oData ) { - $map = array (); - foreach ( $oData->objectPermissions as $key => $val ) { - $newGuid = $this->getUnusedObjectPermissionGUID(); - $map[ $val['OP_UID'] ] = $newGuid; - $oData->objectPermissions[$key]['OP_UID'] = $newGuid; + /** + * Update Route Rows from a $aRoutes array data and returns those in an array. + * + * @param $aRoutes array + * @return $oTask Tasks array + */ + function updateRouteRows ($aRoutes) + { + $oTask = new Tasks(); + return $oTask->updateRouteRows( $aRoutes ); } - } - /** - * Renew all the GUID's for Routes Objects - * @param $oData array. - * @return void - */ - function renewAllRouteGuid ( &$oData ) { - $map = array (); - if ( isset($oData->routes ) && is_array($oData->routes) ) { - foreach ( $oData->routes as $key => $val ) { - $newGuid = $this->getUnusedRouteGUID(); - $map[ $val['ROU_UID'] ] = $newGuid; - $oData->routes[$key]['ROU_UID'] = $newGuid; - } + /** + * Get Lane Rows from a Process and returns those in an array. + * + * @param $sProUid string for the process Uid + * @return array + */ + function getLaneRows ($sProUid) + { + return $this->getAllLanes( $sProUid ); } - } - /** - * Renew all the GUID's for Stage Objects - * @param $oData array. - * @return void - */ - function renewAllStageGuid ( &$oData ) { - $map = array (); - foreach ( $oData->stage as $key => $val ) { - $newGuid = $this->getUnusedStageGUID(); - $map[ $val['STG_UID'] ] = $newGuid; - $oData->stage[$key]['STG_UID'] = $newGuid; + /** + * 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 ); } - foreach ( $oData->tasks as $key => $val ) { - if (isset($map[ $val['STG_UID'] ])) { - $newGuid = $map[ $val['STG_UID'] ]; - $oData->tasks[$key]['STG_UID'] = $newGuid; - } - } - } - /** - * Renew all the GUID's for Swimlanes Elements Objects - * @param $oData array. - * @return void - */ - function renewAllSwimlanesElementsGuid ( &$oData ) { - $map = array (); - foreach ( $oData->lanes as $key => $val ) { - $newGuid = $this->getUnusedSLGUID(); - $map[ $val['SWI_UID'] ] = $newGuid; - $oData->lanes[$key]['SWI_UID'] = $newGuid; + /** + * 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 ); } - } - /** - * Renew the GUID's for all the Report Tables Objects - * @param $oData array. - * @return void - */ - function renewAllReportTableGuid ( &$oData ) { - $map = array (); - foreach ( $oData->reportTables as $key => $val ) { - $newGuid = $this->getUnusedRTGUID(); - $map[ $val['REP_TAB_UID'] ] = $newGuid; - $oData->reportTables[$key]['REP_TAB_UID'] = $newGuid; + /** + * Create Lane Rows from a $aLanes array data and returns those in an array. + * + * @param $aLanes array. + * @return void + */ + function createLaneRows ($aLanes) + { + foreach ($aLanes as $key => $row) { + $oLane = new SwimlanesElements(); + if ($oLane->swimlanesElementsExists( $row['SWI_UID'] )) + $oLane->remove( $row['SWI_UID'] ); + + $res = $oLane->create( $row ); + } + return; } - foreach ( $oData->reportTablesVars as $key => $val ) { - if(isset($map[ $val['REP_TAB_UID'] ])){ - /*TODO: Why this can be not defined?? The scenario was when + + /** + * Create Sub Process rows from an array, removing those subprocesses with + * the same UID. + * + * @param $SubProcess array + * @return void. + */ + function createSubProcessRows ($SubProcess) + { + foreach ($SubProcess as $key => $row) { + $oSubProcess = new SubProcess(); + if ($oSubProcess->subProcessExists( $row['SP_UID'] )) + $oSubProcess->remove( $row['SP_UID'] ); + + $res = $oSubProcess->create( $row ); + } + return; + } + + /** + * Create Case Tracker rows from an array, removing those Trackers with + * the same UID. + * + * @param $CaseTracker array. + * @return void + */ + function createCaseTrackerRows ($CaseTracker) + { + if (is_array( $CaseTracker )) + foreach ($CaseTracker as $key => $row) { + $oCaseTracker = new CaseTracker(); + if ($oCaseTracker->caseTrackerExists( $row['PRO_UID'] )) + $oCaseTracker->remove( $row['PRO_UID'] ); + $res = $oCaseTracker->create( $row ); + } + return; + } + + /** + * Create Case Tracker Objects rows from an array, removing those Objects + * with the same UID, and recreaiting those from the array data. + * + * @param $CaseTrackerObject array. + * @return void + */ + function createCaseTrackerObjectRows ($CaseTrackerObject) + { + foreach ($CaseTrackerObject as $key => $row) { + $oCaseTrackerObject = new CaseTrackerObject(); + if ($oCaseTrackerObject->caseTrackerObjectExists( $row['CTO_UID'] )) + $oCaseTrackerObject->remove( $row['CTO_UID'] ); + $res = $oCaseTrackerObject->create( $row ); + } + return; + } + + /** + * Create Object Permissions rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $sProUid string for the process Uid. + * @return void + */ + function createObjectPermissionsRows ($ObjectPermissions) + { + foreach ($ObjectPermissions as $key => $row) { + $oObjectPermissions = new ObjectPermission(); + if ($oObjectPermissions->Exists( $row['OP_UID'] )) + $oObjectPermissions->remove( $row['OP_UID'] ); + $res = $oObjectPermissions->create( $row ); + } + return; + } + + /** + * Create Stage rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $Stage array. + * @return void + */ + function createStageRows ($Stage) + { + foreach ($Stage as $key => $row) { + $oStage = new Stage(); + if ($oStage->Exists( $row['STG_UID'] )) + $oStage->remove( $row['STG_UID'] ); + $res = $oStage->create( $row ); + } + return; + } + + /** + * Create Field Conditions from an array of Field Conditions and Dynaforms, + * removing those Objects with the same UID, and recreaiting the records + * from the arrays data. + * + * @param $aFieldCondition array. + * @param $aDynaform array. + * @return void + */ + function createFieldCondition ($aFieldCondition, $aDynaform) + { + if (is_array( $aFieldCondition )) + foreach ($aFieldCondition as $key => $row) { + $oFieldCondition = new FieldCondition(); + if ($oFieldCondition->fieldConditionExists( $row['FCD_UID'], $aDynaform )) + $oFieldCondition->remove( $row['FCD_UID'] ); + $res = $oFieldCondition->create( $row ); + } + return; + } + + /** + * Create Event rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $Event array. + * @return void + */ + function createEventRows ($Event) + { + foreach ($Event as $key => $row) { + $oEvent = new Event(); + if ($oEvent->Exists( $row['EVN_UID'] )) + $oEvent->remove( $row['EVN_UID'] ); + + $res = $oEvent->create( $row ); + } + return; + } + + /** + * Create Case Scheduler Rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $CaseScheduler array. + * @return void + */ + function createCaseSchedulerRows ($CaseScheduler) + { + foreach ($CaseScheduler as $key => $row) { + $oCaseScheduler = new CaseScheduler(); + if ($oCaseScheduler->Exists( $row['SCH_UID'] )) + $oCaseScheduler->remove( $row['SCH_UID'] ); + + $res = $oCaseScheduler->create( $row ); + } + return; + } + + /** + * Create ProcessCategory record + * + * @param $ProcessCategory array. + * @return void + */ + function createProcessCategoryRow ($row) + { + if ($row && is_array( $row ) && isset( $row['CATEGORY_UID'] )) { + $record = ProcessCategoryPeer::retrieveByPK( $row['CATEGORY_UID'] ); + // create only if the category doesn't exists + if (! $record) { + $processCategory = new ProcessCategory(); + $processCategory->fromArray( $row, BasePeer::TYPE_FIELDNAME ); + $processCategory->save(); + } + } + } + + /** + * Gets Input Documents Rows from aProcess. + * + * @param $sProUid string. + * @return void + */ + function getInputRows ($sProUid) + { + try { + $aInput = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( InputdocumentPeer::PRO_UID, $sProUid ); + $oDataset = InputdocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oInput = new Inputdocument(); + $aInput[] = $oInput->Load( $aRow['INP_DOC_UID'] ); + $oDataset->next(); + } + return $aInput; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Input Documents Rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $aInput array. + * @return void + */ + function createInputRows ($aInput) + { + foreach ($aInput as $key => $row) { + $oInput = new Inputdocument(); + //unset ($row['TAS_UID']); + if ($oInput->InputExists( $row['INP_DOC_UID'] )) + $oInput->remove( $row['INP_DOC_UID'] ); + + $res = $oInput->create( $row ); + } + return; + } + + /** + * change and Renew all Input GUID, because the process needs to have a new set of Inputs + * + * @param string $oData + * @return boolean + */ + function renewAllInputGuid (&$oData) + { + $map = array (); + foreach ($oData->inputs as $key => $val) { + $newGuid = $this->getUnusedInputGUID(); + $map[$val['INP_DOC_UID']] = $newGuid; + $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; + } + foreach ($oData->steps as $key => $val) { + if (isset( $val['STEP_TYPE_OBJ'] )) { + if ($val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + if (isset( $oData->caseTrackerObject ) && is_array( $oData->caseTrackerObject )) { + foreach ($oData->caseTrackerObject as $key => $val) { + if ($val['CTO_TYPE_OBJ'] == 'INPUT_DOCUMENT') { + $newGuid = $map[$val['CTO_UID_OBJ']]; + $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; + } + } + } + if (isset( $oData->objectPermissions ) && is_array( $oData->objectPermissions )) { + foreach ($oData->objectPermissions as $key => $val) { + if ($val['OP_OBJ_TYPE'] == 'INPUT_DOCUMENT') { + if (isset( $map[$val['OP_OBJ_UID']] )) { + $newGuid = $map[$val['OP_OBJ_UID']]; + $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + } + } + } + } + if (isset( $oData->stepSupervisor ) && is_array( $oData->stepSupervisor )) { + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + } + + /** + * Gets the Output Documents Rows from a Process. + * + * @param $sProUid string. + * @return $aOutput array + */ + function getOutputRows ($sProUid) + { + try { + $aOutput = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( OutputdocumentPeer::PRO_UID, $sProUid ); + $oDataset = OutputdocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oOutput = new Outputdocument(); + $aOutput[] = $oOutput->Load( $aRow['OUT_DOC_UID'] ); + $oDataset->next(); + } + return $aOutput; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Input Documents Rows from an array, removing those Objects + * with the same UID, and recreaiting the records from the array data. + * + * @param $aOutput array. + * @return void + */ + function createOutputRows ($aOutput) + { + foreach ($aOutput as $key => $row) { + $oOutput = new Outputdocument(); + //unset ($row['TAS_UID']); + if ($oOutput->OutputExists( $row['OUT_DOC_UID'] )) + $oOutput->remove( $row['OUT_DOC_UID'] ); + + $res = $oOutput->create( $row ); + } + return; + } + + /** + * change and Renew all Output GUID, because the process needs to have a new set of Outputs + * + * @param string $oData + * @return boolean + */ + function renewAllOutputGuid (&$oData) + { + $map = array (); + foreach ($oData->outputs as $key => $val) { + $newGuid = $this->getUnusedOutputGUID(); + $map[$val['OUT_DOC_UID']] = $newGuid; + $oData->outputs[$key]['OUT_DOC_UID'] = $newGuid; + } + foreach ($oData->steps as $key => $val) { + if (isset( $val['STEP_TYPE_OBJ'] )) { + if ($val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->steps[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + foreach ($oData->caseTrackerObject as $key => $val) { + if ($val['CTO_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['CTO_UID_OBJ']]; + $oData->steps[$key]['CTO_UID_OBJ'] = $newGuid; + } + } + foreach ($oData->objectPermissions as $key => $val) { + if ($val['OP_OBJ_TYPE'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['OP_OBJ_UID']]; + $oData->objectPermissions[$key]['OP_OBJ_UID'] = $newGuid; + } + } + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { + $newGuid = $map[$val['STEP_UID_OBJ']]; + $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; + } + } + } + + /** + * change and Renew all Trigger GUID, because the process needs to have a new set of Triggers + * + * @param string $oData + * @return boolean + */ + function renewAllTriggerGuid (&$oData) + { + $map = array (); + foreach ($oData->triggers as $key => $val) { + $newGuid = $this->getUnusedTriggerGUID(); + $map[$val['TRI_UID']] = $newGuid; + $oData->triggers[$key]['TRI_UID'] = $newGuid; + } + foreach ($oData->steptriggers as $key => $val) { + if (isset( $map[$val['TRI_UID']] )) { + $newGuid = $map[$val['TRI_UID']]; + $oData->steptriggers[$key]['TRI_UID'] = $newGuid; + } else { + $oData->steptriggers[$key]['TRI_UID'] = $this->getUnusedTriggerGUID(); + } + } + } + + /** + * Renew all the GUID's for Subprocesses + * + * @param $oData array. + * @return void + */ + function renewAllSubProcessGuid (&$oData) + { + $map = array (); + foreach ($oData->subProcess as $key => $val) { + $newGuid = $this->getUnusedSubProcessGUID(); + $map[$val['SP_UID']] = $newGuid; + $oData->subProcess[$key]['SP_UID'] = $newGuid; + } + } + + /** + * Renew all the GUID's for Case Tracker Objects + * + * @param $oData array. + * @return void + */ + function renewAllCaseTrackerObjectGuid (&$oData) + { + $map = array (); + foreach ($oData->caseTrackerObject as $key => $val) { + $newGuid = $this->getUnusedCaseTrackerObjectGUID(); + $map[$val['CTO_UID']] = $newGuid; + $oData->caseTrackerObject[$key]['CTO_UID'] = $newGuid; + } + } + + /** + * Renew all the GUID's for DB Sources + * + * @param $oData array. + * @return void + */ + function renewAllDBSourceGuid (&$oData) + { + $map = array (); + $aSqlConnections = array (); + foreach ($oData->dbconnections as $key => $val) { + $newGuid = $val['DBS_UID']; ///-- $this->getUnusedDBSourceGUID(); + $map[$val['DBS_UID']] = $newGuid; + $oData->dbconnections[$key]['DBS_UID'] = $newGuid; + } + $oData->sqlConnections = $map; + } + + /** + * Renew all the GUID's for Object Permissions + * + * @param $oData array. + * @return void + */ + function renewAllObjectPermissionGuid (&$oData) + { + $map = array (); + foreach ($oData->objectPermissions as $key => $val) { + $newGuid = $this->getUnusedObjectPermissionGUID(); + $map[$val['OP_UID']] = $newGuid; + $oData->objectPermissions[$key]['OP_UID'] = $newGuid; + } + } + + /** + * Renew all the GUID's for Routes Objects + * + * @param $oData array. + * @return void + */ + function renewAllRouteGuid (&$oData) + { + $map = array (); + if (isset( $oData->routes ) && is_array( $oData->routes )) { + foreach ($oData->routes as $key => $val) { + $newGuid = $this->getUnusedRouteGUID(); + $map[$val['ROU_UID']] = $newGuid; + $oData->routes[$key]['ROU_UID'] = $newGuid; + } + } + } + + /** + * Renew all the GUID's for Stage Objects + * + * @param $oData array. + * @return void + */ + function renewAllStageGuid (&$oData) + { + $map = array (); + foreach ($oData->stage as $key => $val) { + $newGuid = $this->getUnusedStageGUID(); + $map[$val['STG_UID']] = $newGuid; + $oData->stage[$key]['STG_UID'] = $newGuid; + } + foreach ($oData->tasks as $key => $val) { + if (isset( $map[$val['STG_UID']] )) { + $newGuid = $map[$val['STG_UID']]; + $oData->tasks[$key]['STG_UID'] = $newGuid; + } + } + } + + /** + * Renew all the GUID's for Swimlanes Elements Objects + * + * @param $oData array. + * @return void + */ + function renewAllSwimlanesElementsGuid (&$oData) + { + $map = array (); + foreach ($oData->lanes as $key => $val) { + $newGuid = $this->getUnusedSLGUID(); + $map[$val['SWI_UID']] = $newGuid; + $oData->lanes[$key]['SWI_UID'] = $newGuid; + } + } + + /** + * Renew the GUID's for all the Report Tables Objects + * + * @param $oData array. + * @return void + */ + function renewAllReportTableGuid (&$oData) + { + $map = array (); + foreach ($oData->reportTables as $key => $val) { + $newGuid = $this->getUnusedRTGUID(); + $map[$val['REP_TAB_UID']] = $newGuid; + $oData->reportTables[$key]['REP_TAB_UID'] = $newGuid; + } + foreach ($oData->reportTablesVars as $key => $val) { + if (isset( $map[$val['REP_TAB_UID']] )) { + /*TODO: Why this can be not defined?? The scenario was when * imported an existing process but as a new one */ - $newGuid = $map[ $val['REP_TAB_UID'] ]; - $oData->reportTablesVars[$key]['REP_TAB_UID'] = $newGuid; + $newGuid = $map[$val['REP_TAB_UID']]; + $oData->reportTablesVars[$key]['REP_TAB_UID'] = $newGuid; + } } } - } - /** - * Renew all the GUID's for All The Report Vars Objects - * @param $oData array. - * @return void - */ - function renewAllReportVarGuid ( &$oData ) { - $map = array (); - foreach ( $oData->reportTablesVars as $key => $val ) { - $newGuid = $this->getUnusedRTVGUID(); - $map[ $val['REP_VAR_UID'] ] = $newGuid; - $oData->reportTablesVars[$key]['REP_VAR_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all the Field Conditions Objects - * @param $oData array. - * @return void - */ - function renewAllFieldCondition ( &$oData ) { - $map = array (); - foreach ( $oData->fieldCondition as $key => $val ) { - $newGuid = $this->getUnusedFieldConditionGUID(); - $map[ $val['FCD_UID'] ] = $newGuid; - $oData->fieldCondition[$key]['FCD_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all the Events Objects - * @param $oData array. - * @return void - */ - function renewAllEvent( &$oData ) { - $map = array (); - foreach ( $oData->event as $key => $val ) { - $newGuid = $this->getUnusedEventGUID(); - $map[ $val['EVN_UID'] ] = $newGuid; - $oData->event[$key]['EVN_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all Case Scheduler Objects - * @param $oData array. - * @return void - */ - function renewAllCaseScheduler( &$oData ) { - $map = array (); - foreach ( $oData->caseScheduler as $key => $val ) { - $newGuid = $this->getUnusedCaseSchedulerGUID(); - $map[ $val['SCH_UID'] ] = $newGuid; - $oData->caseScheduler[$key]['SCH_UID'] = $newGuid; - } - } - - /** - * Renew the GUID's for all the Uids for all the elements - * @param $oData array. - * @return void - */ - function renewAll( &$oData ) { - $this->renewAllTaskGuid ( $oData ); - $this->renewAllDynaformGuid ( $oData ); - $this->renewAllInputGuid ( $oData ); - $this->renewAllOutputGuid ( $oData ); - $this->renewAllStepGuid ( $oData ); - $this->renewAllTriggerGuid ( $oData ); - $this->renewAllSubProcessGuid ( $oData ); - $this->renewAllCaseTrackerObjectGuid ( $oData ); - $this->renewAllDBSourceGuid ( $oData ); - $this->renewAllObjectPermissionGuid ( $oData ); - $this->renewAllRouteGuid ( $oData ); - $this->renewAllStageGuid ( $oData ); - $this->renewAllSwimlanesElementsGuid ( $oData ); - $this->renewAllReportTableGuid ( $oData ); - $this->renewAllReportVarGuid ( $oData ); - $this->renewAllFieldCondition ( $oData ); - $this->renewAllEvent( $oData ); - $this->renewAllCaseScheduler( $oData ); - } - - /** - * Get Step Rows from a Process - * @param $sProUid array. - * @return array $aStep. - */ - function getStepRows ($sProUid ){ - try { - $aStep = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::PRO_UID, $sProUid); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oStep = new Step(); - $aStep[] = $oStep->Load( $aRow['STEP_UID'] ); - $oDataset->next(); - } - return $aStep; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Create Step Rows from a Process - * @param $aStep array. - * @return void. - */ - function createStepRows ($aStep ){ - foreach ( $aStep as $key => $row ) { - $oStep = new Step(); - if(isset($row['STEP_UID'])) { - if($oStep->StepExists ($row['STEP_UID'])) - $oStep->remove($row['STEP_UID']); - - $res = $oStep->create($row); - } - } - return; - } - - /** - * Create Step Supervisor Rows for a Process from an array of data - * @param $aStepSupervisor array. - * @return void. - */ - function createStepSupervisorRows($aStepSupervisor){ - foreach ($aStepSupervisor as $key => $row ) { - $oStepSupervisor = new StepSupervisor(); - if( $oStepSupervisor->Exists($row['STEP_UID']) ) { - $oStepSupervisor->remove($row['STEP_UID']); - } - $oStepSupervisor->create($row); - } - } #@!Neyek - - /** - * change and Renew all Step GUID, because the process needs to have a new set of Steps - * @param string $oData - * @return boolean - */ - function renewAllStepGuid ( &$oData ) { - $map = array (); - foreach ( $oData->steps as $key => $val ) { - if(isset($val['STEP_UID'])) { - $newGuid = $this->getUnusedStepGUID(); - $map[ $val['STEP_UID'] ] = $newGuid; - $oData->steps[$key]['STEP_UID'] = $newGuid; - } - } - foreach ( $oData->steptriggers as $key => $val ) { - if ( $val['STEP_UID'] > 0 ) { - if (isset($map[ $val['STEP_UID'] ])) { - $newGuid = $map[ $val['STEP_UID'] ]; - $oData->steptriggers[$key]['STEP_UID'] = $newGuid; - } - else { - $oData->steptriggers[$key]['STEP_UID'] = $this->getUnusedStepGUID(); - } - } - } - foreach ( $oData->stepSupervisor as $key => $val ) { - if ( $val['STEP_UID'] > 0 ) { - if (isset($map[ $val['STEP_UID'] ])) { - $newGuid = $map[ $val['STEP_UID'] ]; - $oData->stepSupervisor[$key]['STEP_UID'] = $newGuid; - } - else { - $oData->stepSupervisor[$key]['STEP_UID'] = $this->getUnusedStepGUID(); - } - } - } - } - - /** - * Get Dynaform Rows from a Process - * @param string $sProUid - * @return $aDynaform array - */ - function getDynaformRows ($sProUid ){ - try { - $aDynaform = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProUid); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oDynaform = new Dynaform(); - $aDynaform[] = $oDynaform->Load( $aRow['DYN_UID'] ); - $oDataset->next(); - } - return $aDynaform; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Object Permission Rows from a Process - * @param string $sProUid - * @return $aDynaform array - */ - function getObjectPermissionRows ($sProUid ){ // by erik - try { - $oPermissions = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProUid); - $oCriteria->add(ObjectPermissionPeer::OP_USER_RELATION, 2); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $o = new ObjectPermission(); - $oPermissions[] = $o->Load( $aRow['OP_UID'] ); - $oDataset->next(); - } - return $oPermissions; - } - catch (Exception $oError) { - throw($oError); - } - }#@!neyek - - /** - * Create Dynaform Rows for a Process form an array - * @param array $aDynaform - * @return void - */ - function createDynaformRows ($aDynaform ){ - foreach ( $aDynaform as $key => $row ) { - $oDynaform = new Dynaform(); - //unset ($row['TAS_UID']); - if($oDynaform->exists($row['DYN_UID'])) - $oDynaform->remove($row['DYN_UID']); - - $res = $oDynaform->create($row); - } - return; - } -#@!neyek - - - /** - * Create Step Trigger Rows for a Process form an array - * @param array $aStepTrigger - * @return void - */ - function createStepTriggerRows ($aStepTrigger ){ - foreach ( $aStepTrigger as $key => $row ) { - $oStepTrigger = new StepTrigger(); - //unset ($row['TAS_UID']); - if($oStepTrigger->stepTriggerExists ($row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE'])) - $oStepTrigger->remove($row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE']); - - $res = $oStepTrigger->createRow($row); - } - return; - } - - /** - * Get Step Trigger Rows for a Process form an array - * @param array $aTask - * @return array $aStepTrigger - */ - function getStepTriggerRows ($aTask ){ - try { - $aInTasks = array(); - foreach ( $aTask as $key => $val ) { - $aInTasks[] = $val['TAS_UID']; - } - - $aTrigger = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( StepTriggerPeer::TAS_UID, $aInTasks, Criteria::IN ); - $oDataset = StepTriggerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aStepTrigger = array(); - while ($aRow = $oDataset->getRow()) { - $aStepTrigger[] = $aRow; - $oDataset->next(); - } - return $aStepTrigger; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Step Trigger Rows for a Process form an array - * @param array $aTask - * @return array $aStepTrigger - */ - function getTriggerRows ($sProUid ){ - try { - $aTrigger = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( TriggersPeer::PRO_UID, $sProUid); - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oTrigger = new Triggers(); - $aTrigger[] = $oTrigger->Load( $aRow['TRI_UID'] ); - $oDataset->next(); - } - return $aTrigger; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Create Step Trigger Rows for a Process form an array - * @param array $aTrigger - * @return void - */ - function createTriggerRows ($aTrigger ){ - foreach ( $aTrigger as $key => $row ) { - $oTrigger = new Triggers(); - //unset ($row['TAS_UID']); - if($oTrigger->TriggerExists($row['TRI_UID'])) - $oTrigger->remove($row['TRI_UID']); - - $res = $oTrigger->create($row); - } - return; - } - - /** - * Get Groupwf Rows for a Process form an array - * @param array $aGroups - * @return array $aGroupwf - */ - function getGroupwfRows ($aGroups ){ - try { - $aInGroups = array(); - foreach ( $aGroups as $key => $val ) { - $aInGroups[] = $val['USR_UID']; - } - - $aGroupwf = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( GroupwfPeer::GRP_UID, $aInGroups, Criteria::IN ); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oGroupwf = new Groupwf(); - $aGroupwf[] = $oGroupwf->Load( $aRow['GRP_UID'] ); - $oDataset->next(); - } - return $aGroupwf; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get DB Connections Rows for a Process - * @param array $sProUid - * @return array $aConnections - */ - function getDBConnectionsRows($sProUid) { - try { - $aConnections = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DbSourcePeer::PRO_UID, $sProUid); - $oDataset = DbSourcePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oConnection = new DbSource(); - $aConnections[] = $oConnection->Load($aRow['DBS_UID'], $aRow['PRO_UID']); - $oDataset->next(); - } - return $aConnections; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Step Supervisor Rows for a Process form an array - * @param array $sProUid - * @return array $aStepSup - */ - function getStepSupervisorRows($sProUid) - { - try { - $aConnections = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProUid); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aStepSup = array(); - while ($aRow = $oDataset->getRow()) { - $aStepSup[] = $aRow; - $oDataset->next(); - } - return $aStepSup; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Report Tables Rows for a Process form an array - * @param array $aTask - * @return array $aReps - */ - function getReportTablesRows($sProUid) - { - try { - $aReps = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportTablePeer::PRO_UID, $sProUid); - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oRep = new ReportTable(); - $aReps[] = $oRep->load($aRow['REP_TAB_UID']); - $oDataset->next(); - } - return $aReps; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Report Tables Vars Rows for a Process - * @param string $sProUid - * @return array $aRepVars - */ - function getReportTablesVarsRows($sProUid) - { - try { - $aRepVars = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportVarPeer::PRO_UID, $sProUid); - $oDataset = ReportVarPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oRepVar = new ReportVar(); - $aRepVars[] = $oRepVar->load($aRow['REP_VAR_UID']); - $oDataset->next(); - } - return $aRepVars; - } - catch (Exception $oError) { - throw $oError; - } - } - - /** - * Get Task User Rows for a Process - * @param array $aTask - * @return array $aStepTrigger - */ - function getTaskUserRows ($aTask ){ - try { - $aInTasks = array(); - foreach ( $aTask as $key => $val ) { - $aInTasks[] = $val['TAS_UID']; - } - - $aTaskUser = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->add( TaskUserPeer::TAS_UID, $aInTasks, Criteria::IN ); - $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); - $oDataset = TaskUserPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->clearSelectColumns(); - $oCriteria2->addSelectColumn ( 'COUNT(*)' ); - $oCriteria2->add( GroupwfPeer::GRP_UID, $aRow['USR_UID']); - $oCriteria2->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); - $oDataset2 = GroupwfPeer::doSelectRS($oCriteria2); - //$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset2->next(); - $aRow2 = $oDataset2->getRow(); - $bActiveGroup = $aRow2[0]; - if ( $bActiveGroup == 1 ) - $aTaskUser[] = $aRow; - $oDataset->next(); - } - return $aTaskUser; - } - catch (Exception $oError) { - throw($oError); - } - } - - /** - * Get Task User Rows from an array of data - * @param array $aTaskUser - * @return array $aStepTrigger - */ - function createTaskUserRows ($aTaskUser ){ - foreach ( $aTaskUser as $key => $row ) { - $oTaskUser = new TaskUser(); - if($oTaskUser->TaskUserExists ($row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'])) - $oTaskUser->remove($row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION']); - - $res = $oTaskUser->create($row); - } - return; - } - - /** - * Get Task User Rows from an array of data - * @param array $aTaskUser - * @return array $aStepTrigger - */ - function createGroupRow ($aGroupwf ) { - foreach ( $aGroupwf as $key => $row ) { - $oGroupwf = new Groupwf(); - if ( $oGroupwf->GroupwfExists ( $row['GRP_UID'] ) ) { - $oGroupwf->remove($row['GRP_UID']); - } - $res = $oGroupwf->create($row); - } - } - - /** - * Create DB Connections rows from an array of data - * @param array $aConnections - * @return void - */ - function createDBConnectionsRows ($aConnections ) { - foreach ( $aConnections as $sKey => $aRow ) { - $oConnection = new DbSource(); - if( $oConnection->Exists($aRow['DBS_UID'], $aRow['PRO_UID']) ) { - $oConnection->remove($aRow['DBS_UID'], $aRow['PRO_UID']); - } - $oConnection->create($aRow); - - // Update information in the table of contents - $oContent = new Content(); - $ConCategory = 'DBS_DESCRIPTION'; - $ConParent = ''; - $ConId = $aRow['DBS_UID']; - $ConLang = SYS_LANG; - if( $oContent->Exists($ConCategory, $ConParent, $ConId, $ConLang) ) { - $oContent->removeContent($ConCategory, $ConParent, $ConId); - } - $oContent->addContent($ConCategory, $ConParent, $ConId, $ConLang,""); - } - } #@!neyek - - /** - * Create Report Tables from an array of data - * @param array $aReportTables - * @param array $aReportTablesVars - * @return void - */ - function createReportTables($aReportTables, $aReportTablesVars) - { - $this->createReportTablesVars($aReportTablesVars); - $oReportTables = new ReportTables(); - foreach ( $aReportTables as $sKey => $aRow ) { - $bExists = true; - $sTable = $aRow['REP_TAB_NAME']; - $iCounter = 1; - while ($bExists) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ReportTablePeer::REP_TAB_NAME, $sTable); - $oDataset = ReportTablePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $bExists = ($aRow2 = $oDataset->getRow()); - if ($bExists) { - $sTable = $aRow['REP_TAB_NAME'] . '_' . $iCounter; - $iCounter++; - } - else { - $aRow['REP_TAB_NAME'] = $sTable; - } - } - $aFields = $oReportTables->getTableVars($aRow['REP_TAB_UID'], true); - $oReportTables->createTable($aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields); - $oReportTables->populateTable($aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields, $aRow['PRO_UID'], $aRow['REP_TAB_GRID']); - $aReportTables[$sKey]['REP_TAB_NAME'] = $aRow['REP_TAB_NAME']; - $oRep = new ReportTable(); - if($oRep->reportTableExists ($aRow['REP_TAB_UID'])) - $oRep->remove($aRow['REP_TAB_UID']); - $oRep->create($aRow); - } - } #@!neyek - - /** - * Update Report Tables from an array of data - * @param array $aReportTables - * @param array $aReportTablesVars - * @return void - */ - function updateReportTables($aReportTables, $aReportTablesVars) - { - $this->cleanupReportTablesReferences($aReportTables); - $this->createReportTables($aReportTables, $aReportTablesVars); - } #@!neyek - - /** - * Create Report Tables Vars from an array of data - * @param array $aReportTablesVars - * @return void - */ - function createReportTablesVars($aReportTablesVars) - { - foreach ( $aReportTablesVars as $sKey => $aRow ) { - $oRep = new ReportVar(); - if($oRep->reportVarExists ($aRow['REP_VAR_UID'])) - $oRep->remove($aRow['REP_VAR_UID']); - - $oRep->create($aRow); - } - } #@!neyek - - /** - * Cleanup Report Tables References from an array of data - * @param array $aReportTables - * @return void - */ - function cleanupReportTablesReferences($aReportTables) - { - foreach ( $aReportTables as $sKey => $aRow ) { - $oReportTables = new ReportTables(); - $oReportTables->deleteReportTable($aRow['REP_TAB_UID']); - $oReportTables->deleteAllReportVars($aRow['REP_TAB_UID']); - $oReportTables->dropTable($aRow['REP_TAB_NAME']); - } - } #@!neyek - - /** - * change Status of any Process - * @param string $sProUid - * @return boolean - */ - function serializeProcess ( $sProUid = '') { - $oProcess = new Process( ); - $oData->process = $this->getProcessRow( $sProUid, false); - $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 ); - $oData->steps = $this->getStepRows( $sProUid ); - $oData->triggers = $this->getTriggerRows( $sProUid ); - $oData->taskusers = $this->getTaskUserRows( $oData->tasks ); - $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); - $oData->steptriggers = $this->getStepTriggerRows( $oData->tasks ); - $oData->dbconnections = $this->getDBConnectionsRows($sProUid); - $oData->reportTables = $this->getReportTablesRows($sProUid); - $oData->reportTablesVars = $this->getReportTablesVarsRows($sProUid); - $oData->stepSupervisor = $this->getStepSupervisorRows($sProUid); - $oData->objectPermissions = $this->getObjectPermissionRows ($sProUid); - $oData->subProcess = $this->getSubProcessRow ($sProUid); - $oData->caseTracker = $this->getCaseTrackerRow ($sProUid); - $oData->caseTrackerObject = $this->getCaseTrackerObjectRow ($sProUid); - $oData->stage = $this->getStageRow ($sProUid); - $oData->fieldCondition = $this->getFieldCondition($sProUid); - $oData->event = $this->getEventRow ($sProUid); - $oData->caseScheduler = $this->getCaseSchedulerRow ($sProUid); - $oData->processCategory = $this->getProcessCategoryRow ($sProUid); - - //krumo ($oData);die; - //$oJSON = new Services_JSON(); - //krumo ( $oJSON->encode($oData) ); - //return $oJSON->encode($oData); - return serialize($oData); - } - - /** - * Save a Serialized Process from an object - * @param array $oData - * @return $result an array - */ - function saveSerializedProcess ( $oData ) { - //$oJSON = new Services_JSON(); - //$data = $oJSON->decode($oData); - //$sProUid = $data->process->PRO_UID; - $data = unserialize ($oData); - $sProUid = $data->process['PRO_UID']; - $path = PATH_DOCUMENT . 'output' . PATH_SEP; - - if ( !is_dir($path) ) { - G::verifyPath($path, true); - } - $proTitle = (substr(G::inflect($data->process['PRO_TITLE']), 0, 245)); - $proTitle = preg_replace("/[^A-Za-z0-9_]/", "", $proTitle); - //Calculating the maximum length of file name - $pathLength = strlen(PATH_DATA ."sites".PATH_SEP.SYS_SYS.PATH_SEP."files".PATH_SEP."output".PATH_SEP); - $length = strlen($proTitle) + $pathLength; - if ($length >= 250) { - $proTitle = myTruncate($proTitle, 250 - $pathLength, '_', ''); - } - $index = ''; - - $lastIndex = ''; - - do { - $filename = $path . $proTitle . $index . '.pm'; - $lastIndex = $index; - - if ( $index == '' ) - $index = 1; - else - $index ++; - } while ( file_exists ( $filename ) ); - - - $proTitle .= $lastIndex; - - $filenameOnly = $proTitle . '.pm'; - - $fp = fopen( $filename.'tpm', "wb"); - - $fsData = sprintf ( "%09d", strlen ( $oData) ); - $bytesSaved = fwrite( $fp, $fsData ); //writing the size of $oData - $bytesSaved += fwrite( $fp, $oData ); //writing the $oData - - foreach ($data->dynaforms as $key => $val ) { - $sFileName = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.xml'; - if ( file_exists ( $sFileName ) ) { - $xmlGuid = $val['DYN_UID']; - $fsXmlGuid = sprintf ( "%09d", strlen ( $xmlGuid ) ); - $bytesSaved += fwrite( $fp, $fsXmlGuid ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $xmlGuid ); //writing the xmlfile - - $xmlContent = file_get_contents ( $sFileName ); - $fsXmlContent = sprintf ( "%09d", strlen ( $xmlContent) ); - $bytesSaved += fwrite( $fp, $fsXmlContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $xmlContent ); //writing the xmlfile - } - - $sFileName2 = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.html'; - if ( file_exists ( $sFileName2 ) ) { - $htmlGuid = $val['DYN_UID']; - $fsHtmlGuid = sprintf ( "%09d", strlen ( $htmlGuid ) ); - $bytesSaved += fwrite( $fp, $fsHtmlGuid ); //writing size dynaform id - $bytesSaved += fwrite( $fp, $htmlGuid ); //writing dynaform id - - $htmlContent = file_get_contents ( $sFileName2 ); - $fsHtmlContent = sprintf ( "%09d", strlen ( $htmlContent ) ); - $bytesSaved += fwrite( $fp, $fsHtmlContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $htmlContent ); //writing the htmlfile - } - } - /** - * By - * here we should work for the new functionalities - * we have a many files for attach into this file + /** + * Renew all the GUID's for All The Report Vars Objects * - * here we go with the anothers files ;) + * @param $oData array. + * @return void */ - //before to do something we write a header into pm file for to do a differentiation between document types - - - //create the store object - //$file_objects = new ObjectCellection(); - - // for mailtemplates files - $MAILS_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'mailTemplates'.PATH_SEP.$data->process['PRO_UID']; - - $isMailTempSent = false; - $isPublicSent = false; - //if this process have any mailfile - if ( is_dir( $MAILS_ROOT_PATH ) ) { - - //get mail files list from this directory - $file_list = scandir($MAILS_ROOT_PATH); - - foreach ($file_list as $filename) { - // verify if this filename is a valid file, because it could be . or .. on *nix systems - if($filename != '.' && $filename != '..'){ - if (@is_readable($MAILS_ROOT_PATH.PATH_SEP.$filename)) { - $sFileName = $MAILS_ROOT_PATH . PATH_SEP . $filename; - if ( file_exists ( $sFileName ) ) { - if ( ! $isMailTempSent ) { - $bytesSaved += fwrite( $fp, 'MAILTEMPL'); - $isMailTempSent = true; - } - //$htmlGuid = $val['DYN_UID']; - $fsFileName = sprintf ( "%09d", strlen ( $filename ) ); - $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size - $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size - - $fileContent = file_get_contents ( $sFileName ); - $fsFileContent = sprintf ( "%09d", strlen ( $fileContent ) ); - $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile - } - + function renewAllReportVarGuid (&$oData) + { + $map = array (); + foreach ($oData->reportTablesVars as $key => $val) { + $newGuid = $this->getUnusedRTVGUID(); + $map[$val['REP_VAR_UID']] = $newGuid; + $oData->reportTablesVars[$key]['REP_VAR_UID'] = $newGuid; } - } } - } - - // for public files - $PUBLIC_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'public'.PATH_SEP.$data->process['PRO_UID']; - - //if this process have any mailfile - if ( is_dir( $PUBLIC_ROOT_PATH ) ) { - - //get mail files list from this directory - $file_list = scandir($PUBLIC_ROOT_PATH); - - foreach ($file_list as $filename) { - // verify if this filename is a valid file, because it could be . or .. on *nix systems - if($filename != '.' && $filename != '..'){ - if (@is_readable($PUBLIC_ROOT_PATH.PATH_SEP.$filename)) { - $sFileName = $PUBLIC_ROOT_PATH . PATH_SEP . $filename; - if ( file_exists ( $sFileName ) ) { - if ( ! $isPublicSent ) { - $bytesSaved += fwrite( $fp, 'PUBLIC '); - $isPublicSent = true; - } - //$htmlGuid = $val['DYN_UID']; - $fsFileName = sprintf ( "%09d", strlen ( $filename ) ); - $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size - $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size - - $fileContent = file_get_contents ( $sFileName ); - $fsFileContent = sprintf ( "%09d", strlen ( $fileContent ) ); - $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile - } + /** + * Renew the GUID's for all the Field Conditions Objects + * + * @param $oData array. + * @return void + */ + function renewAllFieldCondition (&$oData) + { + $map = array (); + foreach ($oData->fieldCondition as $key => $val) { + $newGuid = $this->getUnusedFieldConditionGUID(); + $map[$val['FCD_UID']] = $newGuid; + $oData->fieldCondition[$key]['FCD_UID'] = $newGuid; } - } } - } -/* + /** + * Renew the GUID's for all the Events Objects + * + * @param $oData array. + * @return void + */ + function renewAllEvent (&$oData) + { + $map = array (); + foreach ($oData->event as $key => $val) { + $newGuid = $this->getUnusedEventGUID(); + $map[$val['EVN_UID']] = $newGuid; + $oData->event[$key]['EVN_UID'] = $newGuid; + } + } + + /** + * Renew the GUID's for all Case Scheduler Objects + * + * @param $oData array. + * @return void + */ + function renewAllCaseScheduler (&$oData) + { + $map = array (); + foreach ($oData->caseScheduler as $key => $val) { + $newGuid = $this->getUnusedCaseSchedulerGUID(); + $map[$val['SCH_UID']] = $newGuid; + $oData->caseScheduler[$key]['SCH_UID'] = $newGuid; + } + } + + /** + * Renew the GUID's for all the Uids for all the elements + * + * @param $oData array. + * @return void + */ + function renewAll (&$oData) + { + $this->renewAllTaskGuid( $oData ); + $this->renewAllDynaformGuid( $oData ); + $this->renewAllInputGuid( $oData ); + $this->renewAllOutputGuid( $oData ); + $this->renewAllStepGuid( $oData ); + $this->renewAllTriggerGuid( $oData ); + $this->renewAllSubProcessGuid( $oData ); + $this->renewAllCaseTrackerObjectGuid( $oData ); + $this->renewAllDBSourceGuid( $oData ); + $this->renewAllObjectPermissionGuid( $oData ); + $this->renewAllRouteGuid( $oData ); + $this->renewAllStageGuid( $oData ); + $this->renewAllSwimlanesElementsGuid( $oData ); + $this->renewAllReportTableGuid( $oData ); + $this->renewAllReportVarGuid( $oData ); + $this->renewAllFieldCondition( $oData ); + $this->renewAllEvent( $oData ); + $this->renewAllCaseScheduler( $oData ); + } + + /** + * Get Step Rows from a Process + * + * @param $sProUid array. + * @return array $aStep. + */ + function getStepRows ($sProUid) + { + try { + $aStep = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::PRO_UID, $sProUid ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oStep = new Step(); + $aStep[] = $oStep->Load( $aRow['STEP_UID'] ); + $oDataset->next(); + } + return $aStep; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Step Rows from a Process + * + * @param $aStep array. + * @return void. + */ + function createStepRows ($aStep) + { + foreach ($aStep as $key => $row) { + $oStep = new Step(); + if (isset( $row['STEP_UID'] )) { + if ($oStep->StepExists( $row['STEP_UID'] )) + $oStep->remove( $row['STEP_UID'] ); + + $res = $oStep->create( $row ); + } + } + return; + } + + /** + * Create Step Supervisor Rows for a Process from an array of data + * + * @param $aStepSupervisor array. + * @return void. + */ + function createStepSupervisorRows ($aStepSupervisor) + { + foreach ($aStepSupervisor as $key => $row) { + $oStepSupervisor = new StepSupervisor(); + if ($oStepSupervisor->Exists( $row['STEP_UID'] )) { + $oStepSupervisor->remove( $row['STEP_UID'] ); + } + $oStepSupervisor->create( $row ); + } + } #@!Neyek + + + /** + * change and Renew all Step GUID, because the process needs to have a new set of Steps + * + * @param string $oData + * @return boolean + */ + function renewAllStepGuid (&$oData) + { + $map = array (); + foreach ($oData->steps as $key => $val) { + if (isset( $val['STEP_UID'] )) { + $newGuid = $this->getUnusedStepGUID(); + $map[$val['STEP_UID']] = $newGuid; + $oData->steps[$key]['STEP_UID'] = $newGuid; + } + } + foreach ($oData->steptriggers as $key => $val) { + if ($val['STEP_UID'] > 0) { + if (isset( $map[$val['STEP_UID']] )) { + $newGuid = $map[$val['STEP_UID']]; + $oData->steptriggers[$key]['STEP_UID'] = $newGuid; + } else { + $oData->steptriggers[$key]['STEP_UID'] = $this->getUnusedStepGUID(); + } + } + } + foreach ($oData->stepSupervisor as $key => $val) { + if ($val['STEP_UID'] > 0) { + if (isset( $map[$val['STEP_UID']] )) { + $newGuid = $map[$val['STEP_UID']]; + $oData->stepSupervisor[$key]['STEP_UID'] = $newGuid; + } else { + $oData->stepSupervisor[$key]['STEP_UID'] = $this->getUnusedStepGUID(); + } + } + } + } + + /** + * Get Dynaform Rows from a Process + * + * @param string $sProUid + * @return $aDynaform array + */ + function getDynaformRows ($sProUid) + { + try { + $aDynaform = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProUid ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oDynaform = new Dynaform(); + $aDynaform[] = $oDynaform->Load( $aRow['DYN_UID'] ); + $oDataset->next(); + } + return $aDynaform; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Object Permission Rows from a Process + * + * @param string $sProUid + * @return $aDynaform array + */ + function getObjectPermissionRows ($sProUid) + { // by erik + try { + $oPermissions = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProUid ); + $oCriteria->add( ObjectPermissionPeer::OP_USER_RELATION, 2 ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $o = new ObjectPermission(); + $oPermissions[] = $o->Load( $aRow['OP_UID'] ); + $oDataset->next(); + } + return $oPermissions; + } catch (Exception $oError) { + throw ($oError); + } + } #@!neyek + + + /** + * Create Dynaform Rows for a Process form an array + * + * @param array $aDynaform + * @return void + */ + function createDynaformRows ($aDynaform) + { + foreach ($aDynaform as $key => $row) { + $oDynaform = new Dynaform(); + //unset ($row['TAS_UID']); + if ($oDynaform->exists( $row['DYN_UID'] )) + $oDynaform->remove( $row['DYN_UID'] ); + + $res = $oDynaform->create( $row ); + } + return; + } + #@!neyek + + + /** + * Create Step Trigger Rows for a Process form an array + * + * @param array $aStepTrigger + * @return void + */ + function createStepTriggerRows ($aStepTrigger) + { + foreach ($aStepTrigger as $key => $row) { + $oStepTrigger = new StepTrigger(); + //unset ($row['TAS_UID']); + if ($oStepTrigger->stepTriggerExists( $row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE'] )) + $oStepTrigger->remove( $row['STEP_UID'], $row['TAS_UID'], $row['TRI_UID'], $row['ST_TYPE'] ); + + $res = $oStepTrigger->createRow( $row ); + } + return; + } + + /** + * Get Step Trigger Rows for a Process form an array + * + * @param array $aTask + * @return array $aStepTrigger + */ + function getStepTriggerRows ($aTask) + { + try { + $aInTasks = array (); + foreach ($aTask as $key => $val) { + $aInTasks[] = $val['TAS_UID']; + } + + $aTrigger = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $aInTasks, Criteria::IN ); + $oDataset = StepTriggerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aStepTrigger = array (); + while ($aRow = $oDataset->getRow()) { + $aStepTrigger[] = $aRow; + $oDataset->next(); + } + return $aStepTrigger; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Step Trigger Rows for a Process form an array + * + * @param array $aTask + * @return array $aStepTrigger + */ + function getTriggerRows ($sProUid) + { + try { + $aTrigger = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProUid ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oTrigger = new Triggers(); + $aTrigger[] = $oTrigger->Load( $aRow['TRI_UID'] ); + $oDataset->next(); + } + return $aTrigger; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Create Step Trigger Rows for a Process form an array + * + * @param array $aTrigger + * @return void + */ + function createTriggerRows ($aTrigger) + { + foreach ($aTrigger as $key => $row) { + $oTrigger = new Triggers(); + //unset ($row['TAS_UID']); + if ($oTrigger->TriggerExists( $row['TRI_UID'] )) + $oTrigger->remove( $row['TRI_UID'] ); + + $res = $oTrigger->create( $row ); + } + return; + } + + /** + * Get Groupwf Rows for a Process form an array + * + * @param array $aGroups + * @return array $aGroupwf + */ + function getGroupwfRows ($aGroups) + { + try { + $aInGroups = array (); + foreach ($aGroups as $key => $val) { + $aInGroups[] = $val['USR_UID']; + } + + $aGroupwf = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GroupwfPeer::GRP_UID, $aInGroups, Criteria::IN ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oGroupwf = new Groupwf(); + $aGroupwf[] = $oGroupwf->Load( $aRow['GRP_UID'] ); + $oDataset->next(); + } + return $aGroupwf; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get DB Connections Rows for a Process + * + * @param array $sProUid + * @return array $aConnections + */ + function getDBConnectionsRows ($sProUid) + { + try { + $aConnections = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DbSourcePeer::PRO_UID, $sProUid ); + $oDataset = DbSourcePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oConnection = new DbSource(); + $aConnections[] = $oConnection->Load( $aRow['DBS_UID'], $aRow['PRO_UID'] ); + $oDataset->next(); + } + return $aConnections; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Step Supervisor Rows for a Process form an array + * + * @param array $sProUid + * @return array $aStepSup + */ + function getStepSupervisorRows ($sProUid) + { + try { + $aConnections = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProUid ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aStepSup = array (); + while ($aRow = $oDataset->getRow()) { + $aStepSup[] = $aRow; + $oDataset->next(); + } + return $aStepSup; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Report Tables Rows for a Process form an array + * + * @param array $aTask + * @return array $aReps + */ + function getReportTablesRows ($sProUid) + { + try { + $aReps = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportTablePeer::PRO_UID, $sProUid ); + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oRep = new ReportTable(); + $aReps[] = $oRep->load( $aRow['REP_TAB_UID'] ); + $oDataset->next(); + } + return $aReps; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Report Tables Vars Rows for a Process + * + * @param string $sProUid + * @return array $aRepVars + */ + function getReportTablesVarsRows ($sProUid) + { + try { + $aRepVars = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportVarPeer::PRO_UID, $sProUid ); + $oDataset = ReportVarPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oRepVar = new ReportVar(); + $aRepVars[] = $oRepVar->load( $aRow['REP_VAR_UID'] ); + $oDataset->next(); + } + return $aRepVars; + } catch (Exception $oError) { + throw $oError; + } + } + + /** + * Get Task User Rows for a Process + * + * @param array $aTask + * @return array $aStepTrigger + */ + function getTaskUserRows ($aTask) + { + try { + $aInTasks = array (); + foreach ($aTask as $key => $val) { + $aInTasks[] = $val['TAS_UID']; + } + + $aTaskUser = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskUserPeer::TAS_UID, $aInTasks, Criteria::IN ); + $oCriteria->add( TaskUserPeer::TU_RELATION, 2 ); + $oDataset = TaskUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oCriteria2 = new Criteria( 'workflow' ); + $oCriteria2->clearSelectColumns(); + $oCriteria2->addSelectColumn( 'COUNT(*)' ); + $oCriteria2->add( GroupwfPeer::GRP_UID, $aRow['USR_UID'] ); + $oCriteria2->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' ); + $oDataset2 = GroupwfPeer::doSelectRS( $oCriteria2 ); + //$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + $bActiveGroup = $aRow2[0]; + if ($bActiveGroup == 1) + $aTaskUser[] = $aRow; + $oDataset->next(); + } + return $aTaskUser; + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * Get Task User Rows from an array of data + * + * @param array $aTaskUser + * @return array $aStepTrigger + */ + function createTaskUserRows ($aTaskUser) + { + foreach ($aTaskUser as $key => $row) { + $oTaskUser = new TaskUser(); + if ($oTaskUser->TaskUserExists( $row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'] )) + $oTaskUser->remove( $row['TAS_UID'], $row['USR_UID'], $row['TU_TYPE'], $row['TU_RELATION'] ); + + $res = $oTaskUser->create( $row ); + } + return; + } + + /** + * Get Task User Rows from an array of data + * + * @param array $aTaskUser + * @return array $aStepTrigger + */ + function createGroupRow ($aGroupwf) + { + foreach ($aGroupwf as $key => $row) { + $oGroupwf = new Groupwf(); + if ($oGroupwf->GroupwfExists( $row['GRP_UID'] )) { + $oGroupwf->remove( $row['GRP_UID'] ); + } + $res = $oGroupwf->create( $row ); + } + } + + /** + * Create DB Connections rows from an array of data + * + * @param array $aConnections + * @return void + */ + function createDBConnectionsRows ($aConnections) + { + foreach ($aConnections as $sKey => $aRow) { + $oConnection = new DbSource(); + if ($oConnection->Exists( $aRow['DBS_UID'], $aRow['PRO_UID'] )) { + $oConnection->remove( $aRow['DBS_UID'], $aRow['PRO_UID'] ); + } + $oConnection->create( $aRow ); + + // Update information in the table of contents + $oContent = new Content(); + $ConCategory = 'DBS_DESCRIPTION'; + $ConParent = ''; + $ConId = $aRow['DBS_UID']; + $ConLang = SYS_LANG; + if ($oContent->Exists( $ConCategory, $ConParent, $ConId, $ConLang )) { + $oContent->removeContent( $ConCategory, $ConParent, $ConId ); + } + $oContent->addContent( $ConCategory, $ConParent, $ConId, $ConLang, "" ); + } + } #@!neyek + + + /** + * Create Report Tables from an array of data + * + * @param array $aReportTables + * @param array $aReportTablesVars + * @return void + */ + function createReportTables ($aReportTables, $aReportTablesVars) + { + $this->createReportTablesVars( $aReportTablesVars ); + $oReportTables = new ReportTables(); + foreach ($aReportTables as $sKey => $aRow) { + $bExists = true; + $sTable = $aRow['REP_TAB_NAME']; + $iCounter = 1; + while ($bExists) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ReportTablePeer::REP_TAB_NAME, $sTable ); + $oDataset = ReportTablePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $bExists = ($aRow2 = $oDataset->getRow()); + if ($bExists) { + $sTable = $aRow['REP_TAB_NAME'] . '_' . $iCounter; + $iCounter ++; + } else { + $aRow['REP_TAB_NAME'] = $sTable; + } + } + $aFields = $oReportTables->getTableVars( $aRow['REP_TAB_UID'], true ); + $oReportTables->createTable( $aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields ); + $oReportTables->populateTable( $aRow['REP_TAB_NAME'], $aRow['REP_TAB_CONNECTION'], $aRow['REP_TAB_TYPE'], $aFields, $aRow['PRO_UID'], $aRow['REP_TAB_GRID'] ); + $aReportTables[$sKey]['REP_TAB_NAME'] = $aRow['REP_TAB_NAME']; + $oRep = new ReportTable(); + if ($oRep->reportTableExists( $aRow['REP_TAB_UID'] )) + $oRep->remove( $aRow['REP_TAB_UID'] ); + $oRep->create( $aRow ); + } + } #@!neyek + + + /** + * Update Report Tables from an array of data + * + * @param array $aReportTables + * @param array $aReportTablesVars + * @return void + */ + function updateReportTables ($aReportTables, $aReportTablesVars) + { + $this->cleanupReportTablesReferences( $aReportTables ); + $this->createReportTables( $aReportTables, $aReportTablesVars ); + } #@!neyek + + + /** + * Create Report Tables Vars from an array of data + * + * @param array $aReportTablesVars + * @return void + */ + function createReportTablesVars ($aReportTablesVars) + { + foreach ($aReportTablesVars as $sKey => $aRow) { + $oRep = new ReportVar(); + if ($oRep->reportVarExists( $aRow['REP_VAR_UID'] )) + $oRep->remove( $aRow['REP_VAR_UID'] ); + + $oRep->create( $aRow ); + } + } #@!neyek + + + /** + * Cleanup Report Tables References from an array of data + * + * @param array $aReportTables + * @return void + */ + function cleanupReportTablesReferences ($aReportTables) + { + foreach ($aReportTables as $sKey => $aRow) { + $oReportTables = new ReportTables(); + $oReportTables->deleteReportTable( $aRow['REP_TAB_UID'] ); + $oReportTables->deleteAllReportVars( $aRow['REP_TAB_UID'] ); + $oReportTables->dropTable( $aRow['REP_TAB_NAME'] ); + } + } #@!neyek + + + /** + * change Status of any Process + * + * @param string $sProUid + * @return boolean + */ + function serializeProcess ($sProUid = '') + { + $oProcess = new Process(); + $oData->process = $this->getProcessRow( $sProUid, false ); + $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 ); + $oData->steps = $this->getStepRows( $sProUid ); + $oData->triggers = $this->getTriggerRows( $sProUid ); + $oData->taskusers = $this->getTaskUserRows( $oData->tasks ); + $oData->groupwfs = $this->getGroupwfRows( $oData->taskusers ); + $oData->steptriggers = $this->getStepTriggerRows( $oData->tasks ); + $oData->dbconnections = $this->getDBConnectionsRows( $sProUid ); + $oData->reportTables = $this->getReportTablesRows( $sProUid ); + $oData->reportTablesVars = $this->getReportTablesVarsRows( $sProUid ); + $oData->stepSupervisor = $this->getStepSupervisorRows( $sProUid ); + $oData->objectPermissions = $this->getObjectPermissionRows( $sProUid ); + $oData->subProcess = $this->getSubProcessRow( $sProUid ); + $oData->caseTracker = $this->getCaseTrackerRow( $sProUid ); + $oData->caseTrackerObject = $this->getCaseTrackerObjectRow( $sProUid ); + $oData->stage = $this->getStageRow( $sProUid ); + $oData->fieldCondition = $this->getFieldCondition( $sProUid ); + $oData->event = $this->getEventRow( $sProUid ); + $oData->caseScheduler = $this->getCaseSchedulerRow( $sProUid ); + $oData->processCategory = $this->getProcessCategoryRow( $sProUid ); + + //krumo ($oData);die; + //$oJSON = new Services_JSON(); + //krumo ( $oJSON->encode($oData) ); + //return $oJSON->encode($oData); + return serialize( $oData ); + } + + /** + * Save a Serialized Process from an object + * + * @param array $oData + * @return $result an array + */ + function saveSerializedProcess ($oData) + { + //$oJSON = new Services_JSON(); + //$data = $oJSON->decode($oData); + //$sProUid = $data->process->PRO_UID; + $data = unserialize( $oData ); + $sProUid = $data->process['PRO_UID']; + $path = PATH_DOCUMENT . 'output' . PATH_SEP; + + if (! is_dir( $path )) { + G::verifyPath( $path, true ); + } + $proTitle = (substr( G::inflect( $data->process['PRO_TITLE'] ), 0, 245 )); + $proTitle = preg_replace( "/[^A-Za-z0-9_]/", "", $proTitle ); + //Calculating the maximum length of file name + $pathLength = strlen( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP ); + $length = strlen( $proTitle ) + $pathLength; + if ($length >= 250) { + $proTitle = myTruncate( $proTitle, 250 - $pathLength, '_', '' ); + } + $index = ''; + + $lastIndex = ''; + + do { + $filename = $path . $proTitle . $index . '.pm'; + $lastIndex = $index; + + if ($index == '') + $index = 1; + else + $index ++; + } while (file_exists( $filename )); + + $proTitle .= $lastIndex; + + $filenameOnly = $proTitle . '.pm'; + + $fp = fopen( $filename . 'tpm', "wb" ); + + $fsData = sprintf( "%09d", strlen( $oData ) ); + $bytesSaved = fwrite( $fp, $fsData ); //writing the size of $oData + $bytesSaved += fwrite( $fp, $oData ); //writing the $oData + + + foreach ($data->dynaforms as $key => $val) { + $sFileName = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.xml'; + if (file_exists( $sFileName )) { + $xmlGuid = $val['DYN_UID']; + $fsXmlGuid = sprintf( "%09d", strlen( $xmlGuid ) ); + $bytesSaved += fwrite( $fp, $fsXmlGuid ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $xmlGuid ); //writing the xmlfile + + + $xmlContent = file_get_contents( $sFileName ); + $fsXmlContent = sprintf( "%09d", strlen( $xmlContent ) ); + $bytesSaved += fwrite( $fp, $fsXmlContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $xmlContent ); //writing the xmlfile + } + + $sFileName2 = PATH_DYNAFORM . $val['DYN_FILENAME'] . '.html'; + if (file_exists( $sFileName2 )) { + $htmlGuid = $val['DYN_UID']; + $fsHtmlGuid = sprintf( "%09d", strlen( $htmlGuid ) ); + $bytesSaved += fwrite( $fp, $fsHtmlGuid ); //writing size dynaform id + $bytesSaved += fwrite( $fp, $htmlGuid ); //writing dynaform id + + + $htmlContent = file_get_contents( $sFileName2 ); + $fsHtmlContent = sprintf( "%09d", strlen( $htmlContent ) ); + $bytesSaved += fwrite( $fp, $fsHtmlContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $htmlContent ); //writing the htmlfile + } + } + /** + * By + * here we should work for the new functionalities + * we have a many files for attach into this file + * + * here we go with the anothers files ;) + */ + //before to do something we write a header into pm file for to do a differentiation between document types + + + //create the store object + //$file_objects = new ObjectCellection(); + + + // for mailtemplates files + $MAILS_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'mailTemplates' . PATH_SEP . $data->process['PRO_UID']; + + $isMailTempSent = false; + $isPublicSent = false; + //if this process have any mailfile + if (is_dir( $MAILS_ROOT_PATH )) { + + //get mail files list from this directory + $file_list = scandir( $MAILS_ROOT_PATH ); + + foreach ($file_list as $filename) { + // verify if this filename is a valid file, because it could be . or .. on *nix systems + if ($filename != '.' && $filename != '..') { + if (@is_readable( $MAILS_ROOT_PATH . PATH_SEP . $filename )) { + $sFileName = $MAILS_ROOT_PATH . PATH_SEP . $filename; + if (file_exists( $sFileName )) { + if (! $isMailTempSent) { + $bytesSaved += fwrite( $fp, 'MAILTEMPL' ); + $isMailTempSent = true; + } + //$htmlGuid = $val['DYN_UID']; + $fsFileName = sprintf( "%09d", strlen( $filename ) ); + $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size + $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size + + + $fileContent = file_get_contents( $sFileName ); + $fsFileContent = sprintf( "%09d", strlen( $fileContent ) ); + $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile + } + + } + } + } + } + + // for public files + $PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP . $data->process['PRO_UID']; + + //if this process have any mailfile + if (is_dir( $PUBLIC_ROOT_PATH )) { + + //get mail files list from this directory + $file_list = scandir( $PUBLIC_ROOT_PATH ); + + foreach ($file_list as $filename) { + // verify if this filename is a valid file, because it could be . or .. on *nix systems + if ($filename != '.' && $filename != '..') { + if (@is_readable( $PUBLIC_ROOT_PATH . PATH_SEP . $filename )) { + $sFileName = $PUBLIC_ROOT_PATH . PATH_SEP . $filename; + if (file_exists( $sFileName )) { + if (! $isPublicSent) { + $bytesSaved += fwrite( $fp, 'PUBLIC ' ); + $isPublicSent = true; + } + //$htmlGuid = $val['DYN_UID']; + $fsFileName = sprintf( "%09d", strlen( $filename ) ); + $bytesSaved += fwrite( $fp, $fsFileName ); //writing the fileName size + $bytesSaved += fwrite( $fp, $filename ); //writing the fileName size + + + $fileContent = file_get_contents( $sFileName ); + $fsFileContent = sprintf( "%09d", strlen( $fileContent ) ); + $bytesSaved += fwrite( $fp, $fsFileContent ); //writing the size of xml file + $bytesSaved += fwrite( $fp, $fileContent ); //writing the htmlfile + } + + } + } + } + } + + /* // for public files $PUBLIC_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'public'.PATH_SEP.$data->process['PRO_UID']; @@ -2551,481 +2774,497 @@ class Processes { */ /* under here, I've not modified those lines */ - fclose ($fp); + fclose( $fp ); - //$bytesSaved = file_put_contents ( $filename , $oData ); - $filenameLink = 'processes_DownloadFile?p=' . $proTitle . '&r=' . rand(100,1000); - $result['PRO_UID'] = $data->process['PRO_UID']; - $result['PRO_TITLE'] = $data->process['PRO_TITLE']; - $result['PRO_DESCRIPTION'] = $data->process['PRO_DESCRIPTION']; - $result['SIZE'] = $bytesSaved; - $result['FILENAME'] = $filenameOnly; - $result['FILENAME_LINK'] = $filenameLink; - return $result; - } - - /** - * Get the process Data form a filename - * @param array $pmFilename - * @return void - */ - function getProcessData ( $pmFilename ) { - $oProcess = new Process(); - if (! file_exists($pmFilename) ) - throw ( new Exception ( 'Unable to read uploaded file, please check permissions. ')); - - if (! filesize($pmFilename) >= 9 ) - throw ( new Exception ( 'Uploaded file is corrupted, please check the file before continuing. ')); - clearstatcache(); - $fp = fopen( $pmFilename, "rb"); - $fsData = intval( fread ( $fp, 9)); //reading the size of $oData - $contents = ''; - $contents = @fread( $fp, $fsData ); //reading string $oData - - if ($contents != '') { - $oData = unserialize ($contents); - if ($oData === false) - throw new Exception("Process file is not valid"); - - foreach($oData->dynaforms as $key => $value) - { - if($value['DYN_TYPE']=='grid') - { $oData->gridFiles[$value['DYN_UID'] ] = $value['DYN_UID']; - } - } - - $oData->dynaformFiles = array(); - $sIdentifier = 0; - while ( !feof ( $fp ) && is_numeric ( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the block identifier - if ( is_numeric ( $sIdentifier ) ) { - $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename - if ( $fsXmlGuid > 0 ) - $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid - - $fsXmlContent = intval( fread ( $fp, 9)); //reading the size of $XmlContent - if ( $fsXmlContent > 0 ) { - $oData->dynaformFiles[$XmlGuid ] = $XmlGuid; - $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent - unset($XmlContent); - } - } - } + //$bytesSaved = file_put_contents ( $filename , $oData ); + $filenameLink = 'processes_DownloadFile?p=' . $proTitle . '&r=' . rand( 100, 1000 ); + $result['PRO_UID'] = $data->process['PRO_UID']; + $result['PRO_TITLE'] = $data->process['PRO_TITLE']; + $result['PRO_DESCRIPTION'] = $data->process['PRO_DESCRIPTION']; + $result['SIZE'] = $bytesSaved; + $result['FILENAME'] = $filenameOnly; + $result['FILENAME_LINK'] = $filenameLink; + return $result; } - else { - $oData = null; + + /** + * Get the process Data form a filename + * + * @param array $pmFilename + * @return void + */ + function getProcessData ($pmFilename) + { + $oProcess = new Process(); + if (! file_exists( $pmFilename )) + throw (new Exception( 'Unable to read uploaded file, please check permissions. ' )); + + if (! filesize( $pmFilename ) >= 9) + throw (new Exception( 'Uploaded file is corrupted, please check the file before continuing. ' )); + clearstatcache(); + $fp = fopen( $pmFilename, "rb" ); + $fsData = intval( fread( $fp, 9 ) ); //reading the size of $oData + $contents = ''; + $contents = @fread( $fp, $fsData ); //reading string $oData + + + if ($contents != '') { + $oData = unserialize( $contents ); + if ($oData === false) + throw new Exception( "Process file is not valid" ); + + foreach ($oData->dynaforms as $key => $value) { + if ($value['DYN_TYPE'] == 'grid') { + $oData->gridFiles[$value['DYN_UID']] = $value['DYN_UID']; + } + } + + $oData->dynaformFiles = array (); + $sIdentifier = 0; + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the block identifier + if (is_numeric( $sIdentifier )) { + $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename + if ($fsXmlGuid > 0) + $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid + + + $fsXmlContent = intval( fread( $fp, 9 ) ); //reading the size of $XmlContent + if ($fsXmlContent > 0) { + $oData->dynaformFiles[$XmlGuid] = $XmlGuid; + $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent + unset( $XmlContent ); + } + } + } + } else { + $oData = null; + } + fclose( $fp ); + return $oData; } - fclose ( $fp); - return $oData; - } - // import process related functions + // import process related functions - /** - * function checkExistingGroups - * @author gustavo cruz gustavo-at-colosa.com - * @param $sGroupList array of a group list - * @return $existingGroupList array of existing groups or null - * @desc checkExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, that is the result $sFilteredGroups array. - */ - function checkExistingGroups( $sGroupList ){ - $aGroupwf = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE'); - $oCriteria->add( ContentPeer::CON_LANG, 'en'); - $oCriteria->addJoin (ContentPeer::CON_ID, GroupwfPeer::GRP_UID); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aGroupwf[] = $aRow; + + /** + * function checkExistingGroups + * checkExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, that is the result $sFilteredGroups array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sGroupList array of a group list + * @return $existingGroupList array of existing groups or null + */ + function checkExistingGroups ($sGroupList) + { + $aGroupwf = array (); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addSelectColumn( ContentPeer::CON_ID ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, 'en' ); + $oCriteria->addJoin( ContentPeer::CON_ID, GroupwfPeer::GRP_UID ); + $oDataset = ContentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - //check if any group name exists in the dbase - if(is_array($sGroupList)){ - foreach ($aGroupwf as $groupBase){ - foreach ($sGroupList as $group){ - if($groupBase['CON_VALUE']==$group['GRP_TITLE']&&$groupBase['CON_ID']!=$group['GRP_UID']){ - $existingGroupList[]=$group; - } - } - } - } - //return $sGroupList; - if (isset($existingGroupList)) - return $existingGroupList; - else - return null; - - } - - /** - * function renameExistingGroups - * @author gustavo cruz gustavo-at-colosa.com - * @param $sGroupList array of a group list - * @return $renamedGroupList array of existing groups - * @desc renameExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, then rename the file adding a number - * suffix to the title atribute of each element of the $renamedGroupList array. - */ - - function renameExistingGroups( $sGroupList ){ - $checkedGroup = $this->checkExistingGroups($sGroupList); - foreach ($sGroupList as $groupBase){ - foreach ($checkedGroup as $group){ - if($groupBase['GRP_TITLE']==$group['GRP_TITLE']){ - $index = substr($groupBase['GRP_TITLE'],-1,0); - if (is_int($index)){ - $index++; - } else { - $index=1; - } - $groupBase['GRP_TITLE'] = $groupBase['GRP_TITLE'].$index; - } - + while ($aRow = $oDataset->getRow()) { + $aGroupwf[] = $aRow; + $oDataset->next(); } - $renamedGroupList[] = $groupBase; - } - - if (isset($renamedGroupList)) - return $renamedGroupList; - else - return null; - - } - - /** - * function mergeExistingGroups - * @author gustavo cruz gustavo-at-colosa.com - * @param $sGroupList array of a group list - * @return $mergedGroupList array of existing groups - * @desc mergeExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, then replaces the id of the elements in - * in the $mergedGroupList array. - */ - function mergeExistingGroups( $sGroupList){ - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_ID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE'); - $oCriteria->add( ContentPeer::CON_LANG, 'en'); - $oCriteria->addJoin (ContentPeer::CON_ID, GroupwfPeer::GRP_UID); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $aGroupwf[] = $aRow; - $oDataset->next(); - } - //check if any group name exists in the dbase - foreach ($sGroupList as $group){ - $merged = false; - foreach ($aGroupwf as $groupBase){ - if($groupBase['CON_VALUE']==$group['GRP_TITLE']&&$groupBase['CON_ID']!=$group['GRP_UID']){ - $group['GRP_UID'] = $groupBase['CON_ID']; - $mergedGroupList[]=$group; - $merged = true; - } - } - // - if (!$merged){ - $mergedGroupList[]=$group; - } - } - - - if (isset($mergedGroupList)){ - return $mergedGroupList; - } - else{ - return null; - } - } - - /** - * function mergeExistingUsers - * @author gustavo cruz gustavo-at-colosa.com - * @param $sBaseGroupList array of a group list with the original group list - * @param $sGroupList array of a group list with the merged group list - * @param $sTaskUserList array of the task user list, it contents the link between - * the task and the group list - * @return $mergedTaskUserList array of the merged task user list - * @desc mergeExistingGroups check if any of the groups listed in the parameter - * array exist and wich are those, then replaces the id of the elements in - * in the $mergedGroupList array. - */ - function mergeExistingUsers( $sBaseGroupList, $sGroupList, $sTaskUserList ){ - foreach ($sTaskUserList as $taskuser){ - $merged = false; - foreach ($sBaseGroupList as $groupBase){ - foreach ($sGroupList as $group){ - // check if the group has been merged - if($groupBase['GRP_TITLE']==$group['GRP_TITLE']&&$groupBase['GRP_UID']!=$group['GRP_UID']&&$groupBase['GRP_UID']==$taskuser['USR_UID']){ - // merging the user id to match the merged group - $taskuser['USR_UID']=$group['GRP_UID']; - $mergedTaskUserList[] = $taskuser; - $merged=true; + //check if any group name exists in the dbase + if (is_array( $sGroupList )) { + foreach ($aGroupwf as $groupBase) { + foreach ($sGroupList as $group) { + if ($groupBase['CON_VALUE'] == $group['GRP_TITLE'] && $groupBase['CON_ID'] != $group['GRP_UID']) { + $existingGroupList[] = $group; + } } } } - //if hasn't been merged set the default value - if(!$merged){ - $mergedTaskUserList[] = $taskuser; + //return $sGroupList; + if (isset( $existingGroupList )) + return $existingGroupList; + else + return null; + + } + + /** + * function renameExistingGroups + * renameExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, then rename the file adding a number + * suffix to the title atribute of each element of the $renamedGroupList array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sGroupList array of a group list + * @return $renamedGroupList array of existing groups + */ + + function renameExistingGroups ($sGroupList) + { + $checkedGroup = $this->checkExistingGroups( $sGroupList ); + foreach ($sGroupList as $groupBase) { + foreach ($checkedGroup as $group) { + if ($groupBase['GRP_TITLE'] == $group['GRP_TITLE']) { + $index = substr( $groupBase['GRP_TITLE'], - 1, 0 ); + if (is_int( $index )) { + $index ++; + } else { + $index = 1; + } + $groupBase['GRP_TITLE'] = $groupBase['GRP_TITLE'] . $index; + } + + } + $renamedGroupList[] = $groupBase; + } + + if (isset( $renamedGroupList )) + return $renamedGroupList; + else + return null; + + } + + /** + * function mergeExistingGroups + * mergeExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, then replaces the id of the elements in + * in the $mergedGroupList array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sGroupList array of a group list + * @return $mergedGroupList array of existing groups + */ + function mergeExistingGroups ($sGroupList) + { + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( GroupwfPeer::GRP_UID ); + $oCriteria->addSelectColumn( ContentPeer::CON_ID ); + $oCriteria->addSelectColumn( ContentPeer::CON_VALUE ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, 'en' ); + $oCriteria->addJoin( ContentPeer::CON_ID, GroupwfPeer::GRP_UID ); + $oDataset = ContentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aGroupwf[] = $aRow; + $oDataset->next(); + } + //check if any group name exists in the dbase + foreach ($sGroupList as $group) { + $merged = false; + foreach ($aGroupwf as $groupBase) { + if ($groupBase['CON_VALUE'] == $group['GRP_TITLE'] && $groupBase['CON_ID'] != $group['GRP_UID']) { + $group['GRP_UID'] = $groupBase['CON_ID']; + $mergedGroupList[] = $group; + $merged = true; + } + } + // + if (! $merged) { + $mergedGroupList[] = $group; + } + } + + if (isset( $mergedGroupList )) { + return $mergedGroupList; + } else { + return null; } } - if (isset($mergedTaskUserList)){ - return $mergedTaskUserList; - } - else{ - return null; - } - } - // end of import process related functions - - /** - * disable all previous process with the parent $sProUid - * @param $sProUid process uid - * @return void - */ - function disablePreviousProcesses( $sProUid ) { - //change status of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ProcessPeer::PRO_PARENT, $sProUid); - $oDataset = ProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $oProcess = new Process(); - while ($aRow = $oDataset->getRow()) { - $aRow['PRO_STATUS'] = 'DISABLED'; - $aRow['PRO_UPDATE_DATE'] = 'now'; - $oProcess->update ( $aRow); - $oDataset->next(); + /** + * function mergeExistingUsers + * mergeExistingGroups check if any of the groups listed in the parameter + * array exist and wich are those, then replaces the id of the elements in + * in the $mergedGroupList array. + * + * @author gustavo cruz gustavo-at-colosa.com + * @param $sBaseGroupList array of a group list with the original group list + * @param $sGroupList array of a group list with the merged group list + * @param $sTaskUserList array of the task user list, it contents the link between + * the task and the group list + * @return $mergedTaskUserList array of the merged task user list + */ + function mergeExistingUsers ($sBaseGroupList, $sGroupList, $sTaskUserList) + { + foreach ($sTaskUserList as $taskuser) { + $merged = false; + foreach ($sBaseGroupList as $groupBase) { + foreach ($sGroupList as $group) { + // check if the group has been merged + if ($groupBase['GRP_TITLE'] == $group['GRP_TITLE'] && $groupBase['GRP_UID'] != $group['GRP_UID'] && $groupBase['GRP_UID'] == $taskuser['USR_UID']) { + // merging the user id to match the merged group + $taskuser['USR_UID'] = $group['GRP_UID']; + $mergedTaskUserList[] = $taskuser; + $merged = true; + } + } + } + //if hasn't been merged set the default value + if (! $merged) { + $mergedTaskUserList[] = $taskuser; + } + } + if (isset( $mergedTaskUserList )) { + return $mergedTaskUserList; + } else { + return null; + } } - } + // end of import process related functions - /** - * create the files from a .pm file - * @param $oData process data - * @param $pmFilename process file name - * @return boolean true - */ - function createFiles ( $oData, $pmFilename ) { - if (! file_exists($pmFilename)) - throw ( new Exception ( 'Unable to read uploaded .pm file, please check permissions. ') ); - if (! filesize($pmFilename) >= 9 ) - throw ( new Exception ( 'Uploaded .pm file is corrupted, please check the file before continue. ')); + /** + * disable all previous process with the parent $sProUid + * + * @param $sProUid process uid + * @return void + */ + function disablePreviousProcesses ($sProUid) + { + //change status of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ProcessPeer::PRO_PARENT, $sProUid ); + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $oProcess = new Process(); + while ($aRow = $oDataset->getRow()) { + $aRow['PRO_STATUS'] = 'DISABLED'; + $aRow['PRO_UPDATE_DATE'] = 'now'; + $oProcess->update( $aRow ); + $oDataset->next(); + } + + } + + /** + * create the files from a . + * pm file + * + * @param $oData process data + * @param $pmFilename process file name + * @return boolean true + */ + function createFiles ($oData, $pmFilename) + { + if (! file_exists( $pmFilename )) + throw (new Exception( 'Unable to read uploaded .pm file, please check permissions. ' )); + + if (! filesize( $pmFilename ) >= 9) + throw (new Exception( 'Uploaded .pm file is corrupted, please check the file before continue. ' )); + + $fp = fopen( $pmFilename, "rb" ); + $fsData = intval( fread( $fp, 9 ) ); //reading the size of $oData + $contents = fread( $fp, $fsData ); //reading string $oData - $fp = fopen( $pmFilename, "rb"); - $fsData = intval( fread ( $fp, 9)); //reading the size of $oData - $contents = fread( $fp, $fsData ); //reading string $oData $path = PATH_DYNAFORM . $oData->process['PRO_UID'] . PATH_SEP; - if ( !is_dir($path) ) { - G::verifyPath($path, true); + if (! is_dir( $path )) { + G::verifyPath( $path, true ); } $sIdentifier = 1; - while ( !feof ( $fp ) && is_numeric( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the size of $filename - if ( is_numeric( $sIdentifier ) ) { - $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename - if ( $fsXmlGuid > 0 ) - $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid - $fsXmlContent = intval( fread ( $fp, 9)); //reading the size of $XmlContent - if ( $fsXmlContent > 0 ) { - $newXmlGuid = $oData->dynaformFiles[ $XmlGuid ]; - if(isset($oData->process['PRO_UID_OLD'])){ - $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the size of $filename + if (is_numeric( $sIdentifier )) { + $fsXmlGuid = intval( $sIdentifier ); //reading the size of $filename + if ($fsXmlGuid > 0) + $XmlGuid = fread( $fp, $fsXmlGuid ); //reading string $XmlGuid + $fsXmlContent = intval( fread( $fp, 9 ) ); //reading the size of $XmlContent + if ($fsXmlContent > 0) { + $newXmlGuid = $oData->dynaformFiles[$XmlGuid]; + if (isset( $oData->process['PRO_UID_OLD'] )) { + $XmlContent = fread( $fp, $fsXmlContent ); //reading string $XmlContent - $XmlContent = str_replace($oData->process['PRO_UID_OLD'], $oData->process['PRO_UID'], $XmlContent); - $XmlContent = str_replace($XmlGuid, $newXmlGuid, $XmlContent); - //foreach - if (isset($oData->gridFiles)) { - if (is_array($oData->gridFiles)) { - foreach($oData->gridFiles as $key => $value) - { - $XmlContent = str_replace($key, $value, $XmlContent); - } + $XmlContent = str_replace( $oData->process['PRO_UID_OLD'], $oData->process['PRO_UID'], $XmlContent ); + $XmlContent = str_replace( $XmlGuid, $newXmlGuid, $XmlContent ); + + //foreach + if (isset( $oData->gridFiles )) { + if (is_array( $oData->gridFiles )) { + foreach ($oData->gridFiles as $key => $value) { + $XmlContent = str_replace( $key, $value, $XmlContent ); + } + } + } + + if (isset( $oData->sqlConnections )) { + foreach ($oData->sqlConnections as $key => $value) { + $XmlContent = str_replace( $key, $value, $XmlContent ); + } + + } + + #here we verify if is adynaform or a html + $aAux = explode( ' ', $XmlContent ); + $ext = (strpos( $aAux[0], 'sqlConnections)) { - foreach($oData->sqlConnections as $key => $value ){ - $XmlContent = str_replace($key, $value, $XmlContent); - } - - } - - #here we verify if is adynaform or a html - $aAux = explode(' ', $XmlContent); - $ext = (strpos($aAux[0], 'process['PRO_UID'] . PATH_SEP; + $pathPublic = PATH_DATA_SITE . 'public' . PATH_SEP . $oData->process['PRO_UID'] . PATH_SEP; $pathMailTem = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP . $oData->process['PRO_UID'] . PATH_SEP; - G::mk_dir ( $pathPublic ); - G::mk_dir ( $pathMailTem ); + G::mk_dir( $pathPublic ); + G::mk_dir( $pathMailTem ); - if ( $sIdentifier == 'MAILTEMPL' ) { - $sIdentifier = 1; - while ( !feof ( $fp ) && is_numeric( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the size of $filename - if ( is_numeric( $sIdentifier ) ) { - $fsFileName = intval( $sIdentifier ); //reading the size of $filename - if ( $fsFileName > 0 ) - $sFileName = fread( $fp, $fsFileName ); //reading filename string - $fsContent = function_exists('mb_strlen') ? mb_strlen(fread($fp, 9)) : strlen(fread($fp, 9)); //reading the size of $Content - if ( $fsContent > 0 ) { - $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent - $newFileName = $pathMailTem . $sFileName; - $bytesSaved = @file_put_contents ( $newFileName, $fileContent ); - if ( $bytesSaved != $fsContent ) - throw ( new Exception ('Error writing MailTemplate file in directory : ' . $pathMailTem ) ); - } + if ($sIdentifier == 'MAILTEMPL') { + $sIdentifier = 1; + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the size of $filename + if (is_numeric( $sIdentifier )) { + $fsFileName = intval( $sIdentifier ); //reading the size of $filename + if ($fsFileName > 0) + $sFileName = fread( $fp, $fsFileName ); //reading filename string + $fsContent = function_exists( 'mb_strlen' ) ? mb_strlen( fread( $fp, 9 ) ) : strlen( fread( $fp, 9 ) ); //reading the size of $Content + if ($fsContent > 0) { + $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent + $newFileName = $pathMailTem . $sFileName; + $bytesSaved = @file_put_contents( $newFileName, $fileContent ); + if ($bytesSaved != $fsContent) + throw (new Exception( 'Error writing MailTemplate file in directory : ' . $pathMailTem )); + } + } } - } } - if ( trim($sIdentifier) == 'PUBLIC' ) { - $sIdentifier = 1; - while ( !feof ( $fp ) && is_numeric( $sIdentifier ) ) { - $sIdentifier = fread ( $fp, 9); //reading the size of $filename - if ( is_numeric( $sIdentifier ) ) { - $fsFileName = intval( $sIdentifier ); //reading the size of $filename - if ( $fsFileName > 0 ) - $sFileName = fread( $fp, $fsFileName ); //reading filename string - $fsContent = function_exists('mb_strlen') ? mb_strlen(fread($fp, 9)) : strlen(fread($fp, 9)); //reading the size of $Content - if ( $fsContent > 0 ) { - $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent - $newFileName = $pathPublic . $sFileName; - $bytesSaved = @file_put_contents ( $newFileName, $fileContent ); - if ( $bytesSaved != $fsContent ) - throw ( new Exception ('Error writing Public file in directory : ' . $pathPublic ) ); - } + if (trim( $sIdentifier ) == 'PUBLIC') { + $sIdentifier = 1; + while (! feof( $fp ) && is_numeric( $sIdentifier )) { + $sIdentifier = fread( $fp, 9 ); //reading the size of $filename + if (is_numeric( $sIdentifier )) { + $fsFileName = intval( $sIdentifier ); //reading the size of $filename + if ($fsFileName > 0) + $sFileName = fread( $fp, $fsFileName ); //reading filename string + $fsContent = function_exists( 'mb_strlen' ) ? mb_strlen( fread( $fp, 9 ) ) : strlen( fread( $fp, 9 ) ); //reading the size of $Content + if ($fsContent > 0) { + $fileContent = fread( $fp, $fsContent ); //reading string $XmlContent + $newFileName = $pathPublic . $sFileName; + $bytesSaved = @file_put_contents( $newFileName, $fileContent ); + if ($bytesSaved != $fsContent) + throw (new Exception( 'Error writing Public file in directory : ' . $pathPublic )); + } + } } - } } - fclose ( $fp); + fclose( $fp ); return true; } + /** + * this function remove all Process except the PROCESS ROW + * + * @param string $sProUid + * @return boolean + */ + function removeProcessRows ($sProUid) + { + try { + //Instance all classes necesaries + $oProcess = new Process(); + $oDynaform = new Dynaform(); + $oInputDocument = new InputDocument(); + $oOutputDocument = new OutputDocument(); + $oTrigger = new Triggers(); + $oStepTrigger = new StepTrigger(); + $oRoute = new Route(); + $oStep = new Step(); + $oSubProcess = new SubProcess(); + $oCaseTracker = new CaseTracker(); + $oCaseTrackerObject = new CaseTrackerObject(); + $oObjectPermission = new ObjectPermission(); + $oSwimlaneElement = new SwimlanesElements(); + $oConnection = new DbSource(); + $oStage = new Stage(); + $oEvent = new Event(); + $oCaseScheduler = new CaseScheduler(); - /** - * this function remove all Process except the PROCESS ROW - * @param string $sProUid - * @return boolean - */ - function removeProcessRows ($sProUid ) { - try { - //Instance all classes necesaries - $oProcess = new Process(); - $oDynaform = new Dynaform(); - $oInputDocument = new InputDocument(); - $oOutputDocument = new OutputDocument(); - $oTrigger = new Triggers(); - $oStepTrigger = new StepTrigger(); - $oRoute = new Route(); - $oStep = new Step(); - $oSubProcess = new SubProcess(); - $oCaseTracker = new CaseTracker(); - $oCaseTrackerObject=new CaseTrackerObject(); - $oObjectPermission= new ObjectPermission(); - $oSwimlaneElement = new SwimlanesElements(); - $oConnection = new DbSource(); - $oStage = new Stage(); - $oEvent = new Event(); - $oCaseScheduler = new CaseScheduler(); + //Delete the tasks of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TaskPeer::PRO_UID, $sProUid ); + $oDataset = TaskPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $oTask = new Task(); + while ($aRow = $oDataset->getRow()) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $aRow['TAS_UID'] ); + StepTriggerPeer::doDelete( $oCriteria ); + if ($oTask->taskExists( $aRow['TAS_UID'] )) + $oTask->remove( $aRow['TAS_UID'] ); + $oDataset->next(); + } - //Delete the tasks of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TaskPeer::PRO_UID, $sProUid); - $oDataset = TaskPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $oTask = new Task(); - while ($aRow = $oDataset->getRow()) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepTriggerPeer::TAS_UID, $aRow['TAS_UID']); - StepTriggerPeer::doDelete($oCriteria); - if ($oTask->taskExists($aRow['TAS_UID'])) - $oTask->remove($aRow['TAS_UID']); - $oDataset->next(); - } + //Delete the dynaforms of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DynaformPeer::PRO_UID, $sProUid ); + $oDataset = DynaformPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '_tmp*'; + foreach (glob( $sWildcard ) as $fn) { + @unlink( $fn ); + } + $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '.*'; + foreach (glob( $sWildcard ) as $fn) { + @unlink( $fn ); + } + if ($oDynaform->dynaformExists( $aRow['DYN_UID'] )) + $oDynaform->remove( $aRow['DYN_UID'] ); + $oDataset->next(); + } - //Delete the dynaforms of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DynaformPeer::PRO_UID, $sProUid); - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '_tmp*'; - foreach( glob($sWildcard) as $fn ) { - @unlink($fn); - } - $sWildcard = PATH_DYNAFORM . $aRow['PRO_UID'] . PATH_SEP . $aRow['DYN_UID'] . '.*'; - foreach( glob($sWildcard) as $fn ) { - @unlink($fn); - } - if ($oDynaform->dynaformExists($aRow['DYN_UID'])) - $oDynaform->remove($aRow['DYN_UID']); - $oDataset->next(); - } + //Delete the input documents of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( InputDocumentPeer::PRO_UID, $sProUid ); + $oDataset = InputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oInputDocument->InputExists( $aRow['INP_DOC_UID'] )) + $oInputDocument->remove( $aRow['INP_DOC_UID'] ); + $oDataset->next(); + } - //Delete the input documents of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(InputDocumentPeer::PRO_UID, $sProUid); - $oDataset = InputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oInputDocument->InputExists($aRow['INP_DOC_UID'])) - $oInputDocument->remove($aRow['INP_DOC_UID']); - $oDataset->next(); - } + //Delete the output documents of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( OutputDocumentPeer::PRO_UID, $sProUid ); + $oDataset = OutputDocumentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oOutputDocument->OutputExists( $aRow['OUT_DOC_UID'] )) + $oOutputDocument->remove( $aRow['OUT_DOC_UID'] ); + $oDataset->next(); + } - //Delete the output documents of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(OutputDocumentPeer::PRO_UID, $sProUid); - $oDataset = OutputDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oOutputDocument->OutputExists($aRow['OUT_DOC_UID'])) - $oOutputDocument->remove($aRow['OUT_DOC_UID']); - $oDataset->next(); - } - - //Delete the steps - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepPeer::PRO_UID, $sProUid); - $oDataset = StepPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - //Delete the steptrigger of process - /*$oCriteria = new Criteria('workflow'); + //Delete the steps + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepPeer::PRO_UID, $sProUid ); + $oDataset = StepPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + //Delete the steptrigger of process + /*$oCriteria = new Criteria('workflow'); $oCriteria->add(StepTriggerPeer::STEP_UID, $aRow['STEP_UID']); $oDataseti = StepTriggerPeer::doSelectRS($oCriteria); $oDataseti->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -3035,191 +3274,193 @@ class Processes { $oStepTrigger->remove($aRowi['STEP_UID'], $aRowi['TAS_UID'], $aRowi['TRI_UID'], $aRowi['ST_TYPE']); $oDataseti->next(); }*/ - $oStep->remove($aRow['STEP_UID']); - $oDataset->next(); - } + $oStep->remove( $aRow['STEP_UID'] ); + $oDataset->next(); + } - //Delete the StepSupervisor - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProUid); - $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oStep->StepExists($aRow['STEP_UID'])) - $oStep->remove($aRow['STEP_UID']); - $oDataset->next(); - } + //Delete the StepSupervisor + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepSupervisorPeer::PRO_UID, $sProUid ); + $oDataset = StepSupervisorPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oStep->StepExists( $aRow['STEP_UID'] )) + $oStep->remove( $aRow['STEP_UID'] ); + $oDataset->next(); + } - //Delete the triggers of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(TriggersPeer::PRO_UID, $sProUid); - $oDataset = TriggersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oTrigger->TriggerExists($aRow['TRI_UID'])) - $oTrigger->remove($aRow['TRI_UID']); - $oDataset->next(); - } + //Delete the triggers of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( TriggersPeer::PRO_UID, $sProUid ); + $oDataset = TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oTrigger->TriggerExists( $aRow['TRI_UID'] )) + $oTrigger->remove( $aRow['TRI_UID'] ); + $oDataset->next(); + } - //Delete the routes of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(RoutePeer::PRO_UID, $sProUid); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oRoute->routeExists($aRow['ROU_UID'])) - $oRoute->remove($aRow['ROU_UID']); - $oDataset->next(); - } + //Delete the routes of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( RoutePeer::PRO_UID, $sProUid ); + $oDataset = RoutePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oRoute->routeExists( $aRow['ROU_UID'] )) + $oRoute->remove( $aRow['ROU_UID'] ); + $oDataset->next(); + } - //Delete the swimlanes elements of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProUid); - $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oSwimlaneElement->swimlanesElementsExists($aRow['SWI_UID'])) - $oSwimlaneElement->remove($aRow['SWI_UID']); - $oDataset->next(); - } + //Delete the swimlanes elements of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProUid ); + $oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oSwimlaneElement->swimlanesElementsExists( $aRow['SWI_UID'] )) + $oSwimlaneElement->remove( $aRow['SWI_UID'] ); + $oDataset->next(); + } - //Delete the DB connections of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(DbSourcePeer::PRO_UID, $sProUid); - $oDataset = DbSourcePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oConnection->Exists($aRow['DBS_UID'], $aRow['PRO_UID'])) - $oConnection->remove($aRow['DBS_UID'], $aRow['PRO_UID']); - $oDataset->next(); - } + //Delete the DB connections of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( DbSourcePeer::PRO_UID, $sProUid ); + $oDataset = DbSourcePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oConnection->Exists( $aRow['DBS_UID'], $aRow['PRO_UID'] )) + $oConnection->remove( $aRow['DBS_UID'], $aRow['PRO_UID'] ); + $oDataset->next(); + } - //Delete the sub process of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(SubProcessPeer::PRO_PARENT, $sProUid); - $oDataset = SubProcessPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if ($oSubProcess->subProcessExists($aRow['SP_UID'])) - $oSubProcess->remove($aRow['SP_UID']); - $oDataset->next(); - } + //Delete the sub process of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( SubProcessPeer::PRO_PARENT, $sProUid ); + $oDataset = SubProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oSubProcess->subProcessExists( $aRow['SP_UID'] )) + $oSubProcess->remove( $aRow['SP_UID'] ); + $oDataset->next(); + } - //Delete the caseTracker of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oCaseTracker->caseTrackerExists ($aRow['PRO_UID'])) - $oCaseTracker->remove($aRow['PRO_UID']); - $oDataset->next(); - } + //Delete the caseTracker of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oCaseTracker->caseTrackerExists( $aRow['PRO_UID'] )) + $oCaseTracker->remove( $aRow['PRO_UID'] ); + $oDataset->next(); + } - //Delete the caseTrackerObject of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $sProUid); - $oDataset = CaseTrackerObjectPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oCaseTrackerObject->caseTrackerObjectExists ($aRow['CTO_UID'])) { - $oCaseTrackerObject->remove($aRow['CTO_UID']); - } - $oDataset->next(); - } + //Delete the caseTrackerObject of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProUid ); + $oDataset = CaseTrackerObjectPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oCaseTrackerObject->caseTrackerObjectExists( $aRow['CTO_UID'] )) { + $oCaseTrackerObject->remove( $aRow['CTO_UID'] ); + } + $oDataset->next(); + } - //Delete the ObjectPermission of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProUid); - $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oObjectPermission->Exists ($aRow['OP_UID'])) { - $oObjectPermission->remove($aRow['OP_UID']); + //Delete the ObjectPermission of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProUid ); + $oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oObjectPermission->Exists( $aRow['OP_UID'] )) { + $oObjectPermission->remove( $aRow['OP_UID'] ); + } + $oDataset->next(); + } + + //Delete the Stage of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StagePeer::PRO_UID, $sProUid ); + $oDataset = StagePeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oStage->Exists( $aRow['STG_UID'] )) + $oStage->remove( $aRow['STG_UID'] ); + $oDataset->next(); + } + + //Delete the Event of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( EventPeer::PRO_UID, $sProUid ); + $oDataset = EventPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oEvent->Exists( $aRow['EVN_UID'] )) + $oEvent->remove( $aRow['EVN_UID'] ); + $oDataset->next(); + if ($oEvent->existsByTaskUidFrom( $aRow['TAS_UID'] )) { + $aRowEvent = $oEvent->getRowByTaskUidFrom( $aRow['TAS_UID'] ); + $oEvent->remove( $aRowEvent['EVN_UID'] ); + } + $oDataset->next(); + } + + //Delete the CaseScheduler of process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( CaseSchedulerPeer::PRO_UID, $sProUid ); + $oDataset = CaseSchedulerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if ($oCaseScheduler->Exists( $aRow['SCH_UID'] )) + $oCaseScheduler->remove( $aRow['SCH_UID'] ); + $oDataset->next(); + } + + return true; + } catch (Exception $oError) { + throw ($oError); } - $oDataset->next(); } - //Delete the Stage of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(StagePeer::PRO_UID, $sProUid); - $oDataset = StagePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oStage->Exists ($aRow['STG_UID'])) - $oStage->remove($aRow['STG_UID']); - $oDataset->next(); - } + /** + * this function creates a new Process, defined in the object $oData + * + * @param string $sProUid + * @return boolean + */ + function createProcessFromData ($oData, $pmFilename) + { + $this->removeProcessRows( $oData->process['PRO_UID'] ); - //Delete the Event of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(EventPeer::PRO_UID, $sProUid); - $oDataset = EventPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oEvent->Exists ($aRow['EVN_UID'])) - $oEvent->remove($aRow['EVN_UID']); - $oDataset->next(); - if($oEvent->existsByTaskUidFrom($aRow['TAS_UID'])) { - $aRowEvent = $oEvent->getRowByTaskUidFrom($aRow['TAS_UID']); - $oEvent->remove($aRowEvent['EVN_UID']); - } - $oDataset->next(); - } + // (*) Creating process dependencies + // creating the process category + $this->createProcessCategoryRow( isset( $oData->processCategory ) ? $oData->processCategory : null ); - //Delete the CaseScheduler of process - $oCriteria = new Criteria('workflow'); - $oCriteria->add(CaseSchedulerPeer::PRO_UID, $sProUid); - $oDataset = CaseSchedulerPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if($oCaseScheduler->Exists ($aRow['SCH_UID'])) - $oCaseScheduler->remove($aRow['SCH_UID']); - $oDataset->next(); - } + // create the process + $this->createProcessRow( $oData->process ); - return true; - } - catch ( Exception $oError) { - throw($oError); - } - } + $this->createTaskRows( $oData->tasks ); + //it was commented becuase it seems to be working fine + //$this->createEventRows(isset($oData->event) ? $oData->event : array()); - /** - * this function creates a new Process, defined in the object $oData - * @param string $sProUid - * @return boolean - */ - function createProcessFromData ($oData, $pmFilename ) { - $this->removeProcessRows ($oData->process['PRO_UID'] ); - // (*) Creating process dependencies - // creating the process category - $this->createProcessCategoryRow(isset($oData->processCategory) ? $oData->processCategory : null); + $aRoutesUID = $this->createRouteRows( $oData->routes ); + $this->createLaneRows( $oData->lanes ); - // create the process - $this->createProcessRow($oData->process); - - $this->createTaskRows($oData->tasks); - //it was commented becuase it seems to be working fine - //$this->createEventRows(isset($oData->event) ? $oData->event : array()); - - $aRoutesUID = $this->createRouteRows($oData->routes); - $this->createLaneRows($oData->lanes); - - /*if(!isset($oData->gateways)){ + /*if(!isset($oData->gateways)){ //Adding gateway information while importing processes from older version //Making compatible with old export process $oRoutes = $oData->routes; @@ -3242,291 +3483,314 @@ class Processes { } else*/ - if(isset($oData->gateways)) - $this->createGatewayRows($oData->gateways); + if (isset( $oData->gateways )) + $this->createGatewayRows( $oData->gateways ); - $this->createDynaformRows($oData->dynaforms); - $this->createInputRows($oData->inputs); - $this->createOutputRows($oData->outputs); - $this->createStepRows($oData->steps); - $this->createStepSupervisorRows(isset($oData->stepSupervisor) ? $oData->stepSupervisor : array()); - $this->createTriggerRows($oData->triggers); - $this->createStepTriggerRows($oData->steptriggers); - $this->createTaskUserRows($oData->taskusers); - $this->createGroupRow($oData->groupwfs); - $this->createDBConnectionsRows(isset($oData->dbconnections) ? $oData->dbconnections : array()); - $this->createReportTables(isset($oData->reportTables) ? $oData->reportTables : array(), isset($oData->reportTablesVars) ? $oData->reportTablesVars : array()); - $this->createSubProcessRows(isset($oData->subProcess) ? $oData->subProcess : array()); - $this->createCaseTrackerRows(isset($oData->caseTracker) ? $oData->caseTracker : array()); - $this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject: array()); - $this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array()); - $this->createStageRows(isset($oData->stage) ? $oData->stage : array()); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( isset( $oData->stepSupervisor ) ? $oData->stepSupervisor : array () ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( isset( $oData->dbconnections ) ? $oData->dbconnections : array () ); + $this->createReportTables( isset( $oData->reportTables ) ? $oData->reportTables : array (), isset( $oData->reportTablesVars ) ? $oData->reportTablesVars : array () ); + $this->createSubProcessRows( isset( $oData->subProcess ) ? $oData->subProcess : array () ); + $this->createCaseTrackerRows( isset( $oData->caseTracker ) ? $oData->caseTracker : array () ); + $this->createCaseTrackerObjectRows( isset( $oData->caseTrackerObject ) ? $oData->caseTrackerObject : array () ); + $this->createObjectPermissionsRows( isset( $oData->objectPermissions ) ? $oData->objectPermissions : array () ); + $this->createStageRows( isset( $oData->stage ) ? $oData->stage : array () ); - $this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms); + $this->createFieldCondition( isset( $oData->fieldCondition ) ? $oData->fieldCondition : array (), $oData->dynaforms ); - // Create before to createRouteRows for avoid duplicates - $this->createEventRows(isset($oData->event) ? $oData->event : array()); + // Create before to createRouteRows for avoid duplicates + $this->createEventRows( isset( $oData->event ) ? $oData->event : array () ); - $this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array()); + $this->createCaseSchedulerRows( isset( $oData->caseScheduler ) ? $oData->caseScheduler : array () ); - // and finally create the files, dynaforms (xml and html), emailTemplates and Public files - $this->createFiles($oData, $pmFilename); - } - - /** - * this function creates a new Process, defined in the object $oData - * @param string $sProUid - * @return boolean - */ - function updateProcessFromData ($oData, $pmFilename ) { - $this->updateProcessRow ($oData->process ); - $this->removeProcessRows ($oData->process['PRO_UID'] ); - $this->createTaskRows ($oData->tasks ); - $this->createRouteRows ($oData->routes ); - $this->createLaneRows ($oData->lanes ); - $this->createDynaformRows ($oData->dynaforms ); - $this->createInputRows ($oData->inputs ); - $this->createOutputRows ($oData->outputs ); - $this->createStepRows ($oData->steps ); - $this->createStepSupervisorRows($oData->stepSupervisor); - $this->createTriggerRows ($oData->triggers); - $this->createStepTriggerRows ($oData->steptriggers); - $this->createTaskUserRows ($oData->taskusers); - $this->createGroupRow ($oData->groupwfs ); - $this->createDBConnectionsRows($oData->dbconnections); - $this->updateReportTables($oData->reportTables, $oData->reportTablesVars); - $this->createFiles ( $oData, $pmFilename ); - $this->createSubProcessRows( $oData->subProcess ); - $this->createCaseTrackerRows( $oData->caseTracker); - $this->createCaseTrackerObjectRows( $oData->caseTrackerObject); - $this->createObjectPermissionsRows( $oData->objectPermissions); - $this->createStageRows( $oData->stage); - $this->createFieldCondition($oData->fieldCondition, $oData->dynaforms); - $this->createEventRows( $oData->event); - $this->createCaseSchedulerRows( $oData->caseScheduler ); - $this->createProcessCategoryRow(isset($oData->processCategory) ? $oData->processCategory : null); - - } - -/** - * get the starting task for a user but from a Tasks object - * @param $sProUid process uid - * @param $sUserUid user uid - * @return an array of tasks - */ - function getStartingTaskForUser ($sProUid, $sUsrUid ){ - $oTask = new Tasks( ); - - return $oTask->getStartingTaskForUser( $sProUid, $sUsrUid ); - } - - /************************************************* - functions to enable open ProcessMaker Library - *************************************************/ - /** - * Open a WebService connection - * @param $user username for pm - * @param $pass password for the user - * @return 1 integer. - */ - function ws_open ( $user, $pass ) { - global $sessionId; - global $client; - $endpoint = PML_WSDL_URL; - $sessionId = ''; - $proxy = array(); - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } + // and finally create the files, dynaforms (xml and html), emailTemplates and Public files + $this->createFiles( $oData, $pmFilename ); } - $client = new SoapClient($endpoint, $proxy); - $params = array('userid'=>$user, 'password'=>$pass ); - $result = $client->__SoapCall('login', array($params)); - if ( $result->status_code == 0 ) { - $sessionId = $result->message; - return 1; + /** + * this function creates a new Process, defined in the object $oData + * + * @param string $sProUid + * @return boolean + */ + function updateProcessFromData ($oData, $pmFilename) + { + $this->updateProcessRow( $oData->process ); + $this->removeProcessRows( $oData->process['PRO_UID'] ); + $this->createTaskRows( $oData->tasks ); + $this->createRouteRows( $oData->routes ); + $this->createLaneRows( $oData->lanes ); + $this->createDynaformRows( $oData->dynaforms ); + $this->createInputRows( $oData->inputs ); + $this->createOutputRows( $oData->outputs ); + $this->createStepRows( $oData->steps ); + $this->createStepSupervisorRows( $oData->stepSupervisor ); + $this->createTriggerRows( $oData->triggers ); + $this->createStepTriggerRows( $oData->steptriggers ); + $this->createTaskUserRows( $oData->taskusers ); + $this->createGroupRow( $oData->groupwfs ); + $this->createDBConnectionsRows( $oData->dbconnections ); + $this->updateReportTables( $oData->reportTables, $oData->reportTablesVars ); + $this->createFiles( $oData, $pmFilename ); + $this->createSubProcessRows( $oData->subProcess ); + $this->createCaseTrackerRows( $oData->caseTracker ); + $this->createCaseTrackerObjectRows( $oData->caseTrackerObject ); + $this->createObjectPermissionsRows( $oData->objectPermissions ); + $this->createStageRows( $oData->stage ); + $this->createFieldCondition( $oData->fieldCondition, $oData->dynaforms ); + $this->createEventRows( $oData->event ); + $this->createCaseSchedulerRows( $oData->caseScheduler ); + $this->createProcessCategoryRow( isset( $oData->processCategory ) ? $oData->processCategory : null ); + } - throw ( new Exception ( $result->message ) ); - return 1; - } - /** - * Open a WebService public connection - * @param $user username for pm - * @param $pass password for the user - * @return 1 integer. - */ - function ws_open_public ( ) { + /** + * get the starting task for a user but from a Tasks object + * + * @param $sProUid process uid + * @param $sUserUid user uid + * @return an array of tasks + */ + function getStartingTaskForUser ($sProUid, $sUsrUid) + { + $oTask = new Tasks(); - global $sessionId; - global $client; - $endpoint = PML_WSDL_URL; - $sessionId = ''; - ini_set("soap.wsdl_cache_enabled", "0"); // enabling WSDL cache - try { - $proxy = array(); + return $oTask->getStartingTaskForUser( $sProUid, $sUsrUid ); + } + + /** + * *********************************************** + * functions to enable open ProcessMaker Library + * *********************************************** + */ + /** + * Open a WebService connection + * + * @param $user username for pm + * @param $pass password for the user + * @return 1 integer. + */ + function ws_open ($user, $pass) + { + global $sessionId; + global $client; + $endpoint = PML_WSDL_URL; + $sessionId = ''; + $proxy = array (); $sysConf = System::getSystemConfiguration(); if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } } - $client = @new SoapClient($endpoint, $proxy); - } catch (Exception $e) { - throw ( new Exception ( $e->getMessage() ) ); + $client = new SoapClient( $endpoint, $proxy ); + + $params = array ('userid' => $user,'password' => $pass + ); + $result = $client->__SoapCall( 'login', array ($params + ) ); + if ($result->status_code == 0) { + $sessionId = $result->message; + return 1; + } + throw (new Exception( $result->message )); + return 1; } - - return 1; - } - - /** - * Consume the processList WebService - * @return $result process list. - */ - function ws_processList ( ){ - global $sessionId; - global $client; - - $endpoint = PML_WSDL_URL; - $proxy = array(); - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } - } - $client = new SoapClient($endpoint, $proxy); - - $sessionId = ''; - $params = array('sessionId'=>$sessionId ); - $result = $client->__SoapCall('processList', array($params)); - if ( $result->status_code == 0 ) { - return $result; - } - throw ( new Exception ( $result->message ) ); - } - - /** - * download a File - * @param $file file to download - * @param $local_path path of the file - * @param $newfilename - * @return $errorMsg process list. - */ - function downloadFile ($file, $local_path, $newfilename) { - $err_msg = ''; - $out = fopen($local_path . $newfilename, 'wb'); - if ($out == FALSE){ - throw ( new Exception ("File $newfilename not opened") ); - } - - if (!function_exists('curl_init')){ - G::SendTemporalMessage ('ID_CURLFUN_ISUNDEFINED', "warning",'LABEL','','100%',''); - G::header('location: ../processes/processes_Library'); - die(); - } - $ch = curl_init(); - - curl_setopt($ch, CURLOPT_FILE, $out); - curl_setopt($ch, CURLOPT_HEADER, 0); - curl_setopt($ch, CURLOPT_URL, $file); - - curl_exec($ch); - $errorMsg = curl_error ( $ch); - fclose ( $out ); - - curl_close($ch); - return $errorMsg; - - }//end function - - /** - * get the process Data from a process - * @param $proId process Uid - * @return $result - */ - function ws_processGetData ( $proId ){ - global $sessionId; - global $client; - - $endpoint = PML_WSDL_URL; - $proxy = array(); - $sysConf = System::getSystemConfiguration(); - if ($sysConf['proxy_host'] != '') { - $proxy['proxy_host'] = $sysConf['proxy_host']; - if ($sysConf['proxy_port'] != '') { - $proxy['proxy_port'] = $sysConf['proxy_port']; - } - if ($sysConf['proxy_user'] != '') { - $proxy['proxy_login'] = $sysConf['proxy_user']; - } - if ($sysConf['proxy_pass'] != '') { - $proxy['proxy_password'] = $sysConf['proxy_pass']; - } - } - $client = new SoapClient($endpoint, $proxy); - - $sessionId = ''; - $params = array('sessionId'=>$sessionId , 'processId'=> $proId); - $result = $client->__SoapCall('processGetData', array($params)); - if ( $result->status_code == 0 ) { - return $result; - } - throw ( new Exception ( $result->message ) ); - } - - /** - * parse an array of Items - * @param $proId process Uid - * @return $result - */ - function parseItemArray( $array ) { - if (!isset ($array->item) && !is_array($array) ) { - return null; - } - - $result = array(); - if ( isset ( $array->item ) ) { - foreach ($array->item as $key => $value) { - $result[$value->key] = $value->value; - } - } - else { - foreach ($array as $key => $value) { - $result[$value->key] = $value->value; - } - } - return $result; - } - - public function getProcessFiles($proUid, $type) + /** + * Open a WebService public connection + * + * @param $user username for pm + * @param $pass password for the user + * @return 1 integer. + */ + function ws_open_public () { - $filesList = array(); + + global $sessionId; + global $client; + $endpoint = PML_WSDL_URL; + $sessionId = ''; + ini_set( "soap.wsdl_cache_enabled", "0" ); // enabling WSDL cache + try { + $proxy = array (); + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } + } + $client = @new SoapClient( $endpoint, $proxy ); + } catch (Exception $e) { + throw (new Exception( $e->getMessage() )); + } + + return 1; + } + + /** + * Consume the processList WebService + * + * @return $result process list. + */ + function ws_processList () + { + global $sessionId; + global $client; + + $endpoint = PML_WSDL_URL; + $proxy = array (); + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } + } + $client = new SoapClient( $endpoint, $proxy ); + + $sessionId = ''; + $params = array ('sessionId' => $sessionId + ); + $result = $client->__SoapCall( 'processList', array ($params + ) ); + if ($result->status_code == 0) { + return $result; + } + throw (new Exception( $result->message )); + } + + /** + * download a File + * + * @param $file file to download + * @param $local_path path of the file + * @param $newfilename + * @return $errorMsg process list. + */ + function downloadFile ($file, $local_path, $newfilename) + { + $err_msg = ''; + $out = fopen( $local_path . $newfilename, 'wb' ); + if ($out == FALSE) { + throw (new Exception( "File $newfilename not opened" )); + } + + if (! function_exists( 'curl_init' )) { + G::SendTemporalMessage( 'ID_CURLFUN_ISUNDEFINED', "warning", 'LABEL', '', '100%', '' ); + G::header( 'location: ../processes/processes_Library' ); + die(); + } + $ch = curl_init(); + + curl_setopt( $ch, CURLOPT_FILE, $out ); + curl_setopt( $ch, CURLOPT_HEADER, 0 ); + curl_setopt( $ch, CURLOPT_URL, $file ); + + curl_exec( $ch ); + $errorMsg = curl_error( $ch ); + fclose( $out ); + + curl_close( $ch ); + return $errorMsg; + + } //end function + + + /** + * get the process Data from a process + * + * @param $proId process Uid + * @return $result + */ + function ws_processGetData ($proId) + { + global $sessionId; + global $client; + + $endpoint = PML_WSDL_URL; + $proxy = array (); + $sysConf = System::getSystemConfiguration(); + if ($sysConf['proxy_host'] != '') { + $proxy['proxy_host'] = $sysConf['proxy_host']; + if ($sysConf['proxy_port'] != '') { + $proxy['proxy_port'] = $sysConf['proxy_port']; + } + if ($sysConf['proxy_user'] != '') { + $proxy['proxy_login'] = $sysConf['proxy_user']; + } + if ($sysConf['proxy_pass'] != '') { + $proxy['proxy_password'] = $sysConf['proxy_pass']; + } + } + $client = new SoapClient( $endpoint, $proxy ); + + $sessionId = ''; + $params = array ('sessionId' => $sessionId,'processId' => $proId + ); + $result = $client->__SoapCall( 'processGetData', array ($params + ) ); + if ($result->status_code == 0) { + return $result; + } + throw (new Exception( $result->message )); + } + + /** + * parse an array of Items + * + * @param $proId process Uid + * @return $result + */ + function parseItemArray ($array) + { + if (! isset( $array->item ) && ! is_array( $array )) { + return null; + } + + $result = array (); + if (isset( $array->item )) { + foreach ($array->item as $key => $value) { + $result[$value->key] = $value->value; + } + } else { + foreach ($array as $key => $value) { + $result[$value->key] = $value->value; + } + } + return $result; + } + + public function getProcessFiles ($proUid, $type) + { + $filesList = array (); switch ($type) { case "mail": @@ -3537,114 +3801,127 @@ class Processes { $basePath = PATH_DATA_PUBLIC; break; default: - throw new Exception("Unknow Process Files Type \"$type\"."); + throw new Exception( "Unknow Process Files Type \"$type\"." ); break; } $dir = $basePath . $proUid . PATH_SEP; - G::verifyPath($dir, true); //Create if it does not exist + G::verifyPath( $dir, true ); //Create if it does not exist + //Creating the default template (if not exists) - if (!file_exists($dir . "alert_message.html")) { - @copy(PATH_TPL . "mails" . PATH_SEP . "alert_message.html", $dir . "alert_message.html"); + if (! file_exists( $dir . "alert_message.html" )) { + @copy( PATH_TPL . "mails" . PATH_SEP . "alert_message.html", $dir . "alert_message.html" ); } - if (!file_exists($dir . "unassignedMessage.html")) { - @copy(PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . "unassignedMessage.html"); + if (! file_exists( $dir . "unassignedMessage.html" )) { + @copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . "unassignedMessage.html" ); } - $files = glob($dir . "*.*"); + $files = glob( $dir . "*.*" ); foreach ($files as $file) { - $fileName = basename($file); + $fileName = basename( $file ); if ($fileName != "alert_message.html" && $fileName != "unassignedMessage.html") { - $filesList[] = array("filepath" => $file, "filename" => $fileName); + $filesList[] = array ("filepath" => $file,"filename" => $fileName + ); } } return $filesList; } -}//end class processes +} //end class processes + /** * Object Document class + * * @package workflow.engine.ProcessMaker */ -class ObjectDocument{ - public $type; - public $name; - public $data; - public $origin; +class ObjectDocument +{ + public $type; + public $name; + public $data; + public $origin; - /** - * Constructor - */ - function __construct(){ - $this->type = ''; - $this->name = ''; - $this->data = ''; - $this->origin = ''; + /** + * Constructor + */ + function __construct () + { + $this->type = ''; + $this->name = ''; + $this->data = ''; + $this->origin = ''; } } /** * ObjectDocument Collection + * * @package workflow.engine.ProcessMaker */ -class ObjectCellection{ - public $num; - public $swapc; - public $objects; +class ObjectCellection +{ + public $num; + public $swapc; + public $objects; - /** - * Constructor - */ - function __construct (){ - $this->objects = Array(); - $this->num = 0; - $this->swapc = $this->num; - array_push($this->objects, 'void'); + /** + * Constructor + */ + function __construct () + { + $this->objects = Array (); + $this->num = 0; + $this->swapc = $this->num; + array_push( $this->objects, 'void' ); } - /** - * add in the collecetion a new object Document - * @param $name name object document - * @param $type type object document - * @param $data data object document - * @param $origin origin object document - * @return void - */ - function add($name, $type, $data, $origin){ - $o = new ObjectDocument(); - $o->name = $name; - $o->type = $type; - $o->data = $data; - $o->origin = $origin; + /** + * add in the collecetion a new object Document + * + * @param $name name object document + * @param $type type object document + * @param $data data object document + * @param $origin origin object document + * @return void + */ + function add ($name, $type, $data, $origin) + { + $o = new ObjectDocument(); + $o->name = $name; + $o->type = $type; + $o->data = $data; + $o->origin = $origin; - $this->num++; - array_push($this->objects, $o); - $this->swapc = $this->num; + $this->num ++; + array_push( $this->objects, $o ); + $this->swapc = $this->num; } - /** - * get the collection of ObjectDocument - * @param $name name object document - * @param $type type object document - * @param $data data object document - * @param $origin origin object document - * @return void - */ - function get(){ - if($this->swapc > 0) { - $e = $this->objects[$this->swapc]; - $this->swapc--; - return $e; + /** + * get the collection of ObjectDocument + * + * @param $name name object document + * @param $type type object document + * @param $data data object document + * @param $origin origin object document + * @return void + */ + function get () + { + if ($this->swapc > 0) { + $e = $this->objects[$this->swapc]; + $this->swapc --; + return $e; } else { - $this->swapc = $this->num; - return false; + $this->swapc = $this->num; + return false; + } } - } }