Files
luos/workflow/engine/classes/class.processes.php
jennylee efb721c562 BUG-15116 InputFile is lost when importing a process.
When an already created process is imported with the 'Create a completely new process..' option, the inputs asociated in the dynaforms are not the input created for this new process, this new (copy) process still has associated the input of the original process (same UID), this because the uid of the new input is never replaced in the new process's dynaform xml file.

So it was created a new field in the data object (the data that has all the information about the new process) where is all the old inputs uid and the new ones. Then using this object this old uids are replaced with the new inputs uids.
2014-06-13 15:01:52 -04:00

4074 lines
137 KiB
PHP
Executable File

<?php
/**
* class.processes.php
*
* @package workflow.engine.ProcessMaker
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2008 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*/
require_once 'classes/model/Content.php';
require_once 'classes/model/Process.php';
require_once 'classes/model/Task.php';
require_once 'classes/model/Route.php';
require_once 'classes/model/SwimlanesElements.php';
require_once 'classes/model/InputDocument.php';
require_once 'classes/model/ObjectPermission.php';
require_once 'classes/model/OutputDocument.php';
require_once 'classes/model/Step.php';
require_once 'classes/model/StepTrigger.php';
require_once 'classes/model/Dynaform.php';
require_once 'classes/model/Triggers.php';
require_once 'classes/model/Groupwf.php';
require_once 'classes/model/ReportTable.php';
require_once 'classes/model/ReportVar.php';
require_once 'classes/model/DbSource.php';
require_once 'classes/model/StepSupervisor.php';
require_once 'classes/model/SubProcess.php';
require_once 'classes/model/CaseTracker.php';
require_once 'classes/model/CaseTrackerObject.php';
require_once 'classes/model/Stage.php';
require_once 'classes/model/TaskUser.php';
require_once 'classes/model/FieldCondition.php';
require_once 'classes/model/Event.php';
require_once 'classes/model/CaseScheduler.php';
require_once 'classes/model/ProcessCategory.php';
require_once 'classes/model/Configuration.php';
G::LoadClass( 'tasks' );
G::LoadClass( 'reportTables' );
G::LoadClass( 'processMap' );
G::LoadThirdParty( 'pear/json', 'class.json' );
class Processes
{
/**
* change Status of any Process
*
* @param string $sProUid
* @return boolean
* @package workflow.engine.ProcessMaker
*/
public 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 );
}
/**
* change debug mode of any Process
*
* @param string $sProUid
* @return boolean
* @package workflow.engine.ProcessMaker
*/
public 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 );
}
/**
* changes in DB the parent GUID
*
* @param $sProUid process uid
* @param $sParentUid process parent uid
* @return $sProUid
*/
public 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
*/
public function processExists ($sProUid = '')
{
$oProcess = new Process();
return $oProcess->processExists( $sProUid );
}
/**
* get an unused process GUID
*
* @return $sProUid
*/
public function getUnusedProcessGUID ()
{
do {
$sNewProUid = G::generateUniqueID();
} while ($this->processExists( $sNewProUid ));
return $sNewProUid;
}
/**
* verify if the task $sTasUid exists
*
* @param string $sTasUid
* @return boolean
*/
public function taskExists ($sTasUid = '')
{
$oTask = new Task();
return $oTask->taskExists( $sTasUid );
}
/**
* get an unused task GUID
*
* @return $sTasUid
*/
public function getUnusedTaskGUID ()
{
do {
$sNewTasUid = G::generateUniqueID();
} while ($this->taskExists( $sNewTasUid ));
return $sNewTasUid;
}
/**
* verify if the dynaform $sDynUid exists
*
* @param string $sDynUid
* @return boolean
*/
public function dynaformExists ($sDynUid = '')
{
$oDynaform = new Dynaform();
return $oDynaform->dynaformExists( $sDynUid );
}
/**
* verify if the object exists
*
* @param string $sUid
* @return boolean
*/
public function inputExists ($sUid = '')
{
$oInput = new InputDocument();
return $oInput->inputExists( $sUid );
}
/**
* verify if the object exists
*
* @param string $sUid
* @return boolean
*/
public function outputExists ($sUid = '')
{
$oOutput = new OutputDocument();
return $oOutput->outputExists( $sUid );
}
/**
* verify if the object exists
*
* @param string $sUid
* @return boolean
*/
public function triggerExists ($sUid = '')
{
$oTrigger = new Triggers();
return $oTrigger->triggerExists( $sUid );
}
/**
* verify if the object exists
*
* @param string $sUid
* @return boolean
*/
public function SubProcessExists ($sUid = '')
{
$oSubProcess = new SubProcess();
return $oSubProcess->subProcessExists( $sUid );
}
/**
* verify if a caseTrackerObject object exists
*
* @param string $sUid
* @return boolean
*/
public function caseTrackerObjectExists ($sUid = '')
{
$oCaseTrackerObject = new CaseTrackerObject();
return $oCaseTrackerObject->caseTrackerObjectExists( $sUid );
}
/**
* verify if a caseTracker Object exists
*
* @param string $sUid
* @return boolean
*/
public function caseTrackerExists ($sUid = '')
{
$oCaseTracker = new CaseTracker();
return $oCaseTracker->caseTrackerExists( $sUid );
}
/**
* verify if a dbconnection exists
*
* @param string $sUid
* @return boolean
*/
public function dbConnectionExists ($sUid = '')
{
$oDBSource = new DbSource();
return $oDBSource->Exists( $sUid );
}
/**
* verify if a objectPermission exists
*
* @param string $sUid
* @return boolean
*/
public function objectPermissionExists ($sUid = '')
{
$oObjectPermission = new ObjectPermission();
return $oObjectPermission->Exists( $sUid );
}
/**
* verify if a route exists
*
* @param string $sUid
* @return boolean
*/
public function routeExists ($sUid = '')
{
$oRoute = new Route();
return $oRoute->routeExists( $sUid );
}
/**
* verify if a stage exists
*
* @param string $sUid
* @return boolean
*/
public function stageExists ($sUid = '')
{
$oStage = new Stage();
return $oStage->Exists( $sUid );
}
/**
* verify if a swimlane exists
*
* @param string $sUid
* @return boolean
*/
public function slExists ($sUid = '')
{
$oSL = new SwimlanesElements();
return $oSL->swimlanesElementsExists( $sUid );
}
/**
* verify if a reportTable exists
*
* @param string $sUid
* @return boolean
*/
public function reportTableExists ($sUid = '')
{
$oReportTable = new ReportTable();
return $oReportTable->reportTableExists( $sUid );
}
/**
* verify if a reportVar exists
*
* @param string $sUid
* @return boolean
*/
public function reportVarExists ($sUid = '')
{
$oReportVar = new ReportVar();
return $oReportVar->reportVarExists( $sUid );
}
/**
* verify if a caseTrackerObject exists
*
* @param string $sUid
* @return boolean
*/
public function fieldsConditionsExists ($sUid = '')
{
$oFieldCondition = new FieldCondition();
return $oFieldCondition->Exists( $sUid );
}
/**
* verify if an event exists
*
* @param string $sUid
* @return boolean
*/
public function eventExists ($sUid = '')
{
$oEvent = new Event();
return $oEvent->Exists( $sUid );
}
/**
* verify if a caseScheduler exists
*
* @param string $sUid
* @return boolean
*/
public function caseSchedulerExists ($sUid = '')
{
$oCaseScheduler = new CaseScheduler();
return $oCaseScheduler->Exists( $sUid );
}
/**
* get an unused input GUID
*
* @return $sProUid
*/
public function getUnusedInputGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->inputExists( $sNewUid ));
return $sNewUid;
}
/**
* get an unused output GUID
*
* @return $sProUid
*/
public function getUnusedOutputGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->outputExists( $sNewUid ));
return $sNewUid;
}
/**
* get an unused trigger GUID
*
* @return $sProUid
*/
public function getUnusedTriggerGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->triggerExists( $sNewUid ));
return $sNewUid;
}
/**
* get an unused trigger GUID
*
* @return $sProUid
*/
public function getUnusedSubProcessGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->subProcessExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused CaseTrackerObject GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedCaseTrackerObjectGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->caseTrackerObjectExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Database Source GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedDBSourceGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->dbConnectionExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Object Permission GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedObjectPermissionGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->objectPermissionExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Route GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedRouteGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->routeExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Stage GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedStageGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->stageExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused SL GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedSLGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->slExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Report Table GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedRTGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->reportTableExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Report Var GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedRTVGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->reportVarExists( $sNewUid ));
return $sNewUid;
}
/**
* verify if the object exists
*
* @param string $sUid
* @return boolean
*/
public function stepExists ($sUid = '')
{
$oStep = new Step();
return $oStep->stepExists( $sUid );
}
/**
* get an unused step GUID
*
* @return $sUid
*/
public function getUnusedStepGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->stepExists( $sNewUid ));
return $sNewUid;
}
/*
* get an unused Dynaform GUID
* @return $sDynUid
*/
public function getUnusedDynaformGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->dynaformExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Field Condition GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedFieldConditionGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->fieldsConditionsExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Event GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedEventGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->eventExists( $sNewUid ));
return $sNewUid;
}
/**
* get a Unused Case Scheduler GUID
*
* @return $sNewUid a new generated Uid
*/
public function getUnusedCaseSchedulerGUID ()
{
do {
$sNewUid = G::generateUniqueID();
} while ($this->caseSchedulerExists( $sNewUid ));
return $sNewUid;
}
/**
* change the GUID for a serialized process
*
* @param string $sProUid
* @return boolean
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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.
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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;
}
/**
* Remove All Fields Conditions from an array of Field Conditions and Dynaforms,
* from the arrays data.
*
* @param $aDynaform array
* @return void
*/
public function removeAllFieldCondition ($aDynaform)
{
foreach ($aDynaform as $key => $row) {
$oCriteria = new Criteria();
$oCriteria->add( FieldConditionPeer::FCD_DYN_UID, $row['DYN_UID'] );
FieldConditionPeer::doDelete( $oCriteria );
}
}
/**
* 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public function renewAllInputGuid (&$oData)
{
$map = array ();
foreach ($oData->inputs as $key => $val) {
$newGuid = $this->getUnusedInputGUID();
$map[$val['INP_DOC_UID']] = $newGuid;
$oData->inputFiles[$oData->inputs[$key]['INP_DOC_UID']] = $newGuid;
$oData->inputs[$key]['INP_DOC_UID'] = $newGuid;
}
if (!isset($oData->inputFiles)) {
$oData->inputFiles = array();
}
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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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;
}
}
}
/**
* Renew all the GUID's for All The Report Vars Objects
*
* @param $oData array.
* @return void
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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.
*/
public 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.
*/
public 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.
*/
public 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
*/
public 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
*/
public 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
*/
public function getObjectPermissionRows ($sProUid, &$oData)
{
// 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'] );
$oGroupwf = new Groupwf();
$oData->groupwfs[] = $oGroupwf->Load( $aRow['USR_UID'] );
$oDataset->next();
}
return $oPermissions;
} catch (Exception $oError) {
throw ($oError);
}
}
#@!neyek
/**
* Get Object Permission Rows from a Process
*
* @param string $sProUid
* @return $aDynaform array
*/
public function getGroupwfSupervisor ($sProUid, &$oData)
{
try {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add(ProcessUserPeer::PRO_UID, $sProUid );
$oCriteria->add(ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR' );
$oDataset = ProcessUserPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oGroupwf = new Groupwf();
$oData->groupwfs[] = $oGroupwf->Load( $aRow['USR_UID'] );
$oDataset->next();
}
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* Create Dynaform Rows for a Process form an array
*
* @param array $aDynaform
* @return void
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public function createTaskUserRows ($aTaskUser)
{
if (is_array($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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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
*/
public 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);
$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 );
$oData->taskExtraProperties = $this->getTaskExtraPropertiesRows( $sProUid );
$this->getGroupwfSupervisor( $sProUid, $oData);
//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
*/
public 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 <erik@colosa.com>
* 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'];
//if this process have any mailfile
if ( is_dir( $PUBLIC_ROOT_PATH ) ) {
//get mail files list from this directory
$files_list = scandir($PUBLIC_ROOT_PATH);
foreach ($file_list as $filename) {
// verify if this filename is a valid file, beacuse it could be . or .. on *nix systems
if($filename != '.' && $filename != '..'){
if (@is_readable($PUBLIC_ROOT_PATH.PATH_SEP.$nombre_archivo)) {
$tmp = explode('.', $filename);
$ext = $tmp[1];
$ext_fp = fopen($PUBLIC_ROOT_PATH.PATH_SEP.$nombre_archivo, 'r');
$file_data = fread($ext_fp, filesize($PUBLIC_ROOT_PATH.PATH_SEP.$nombre_archivo));
fclose($ext_fp);
$file_objects->add($filename, $ext, $file_data,'public');
}
}
}
}
//So,. we write the store object into pm export file
$extended_data = serialize($file_objects);
$bytesSaved += fwrite( $fp, $extended_data );
*/
/* under here, I've not modified those lines */
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
*/
public 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;
}
// import process related functions
/**
* 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
*/
public 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;
$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
* 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
*/
public 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
*/
public 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
* 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
*/
public 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
/**
* disable all previous process with the parent $sProUid
*
* @param $sProUid process uid
* @return void
*/
public 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
*/
public 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
$path = PATH_DYNAFORM . $oData->process['PRO_UID'] . PATH_SEP;
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
$XmlContent = str_replace( $oData->process['PRO_UID_OLD'], $oData->process['PRO_UID'], $XmlContent );
$XmlContent = str_replace( $XmlGuid, $newXmlGuid, $XmlContent );
foreach($oData->inputFiles as $input => $valInput){
$oldInput = $input;
$newInput = $oData->inputFiles[$oldInput];
$XmlContent = str_replace( $oldInput, $newInput, $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], '<?xml' ) !== false ? '.xml' : '.html');
$sFileName = $path . $newXmlGuid . $ext;
$bytesSaved = @file_put_contents( $sFileName, $XmlContent );
//if ( $bytesSaved != $fsXmlContent ) throw ( new Exception ('Error writing dynaform file in directory : ' . $path ) );
}
}
}
}
//now mailTemplates and public files
$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 );
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 = intval( fread ( $fp, 9)) or 0; //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 = intval( fread ( $fp, 9)) or 0; //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 );
return true;
}
/**
* The current method is for filter every row that exist in
* the Configuration table
*
* @param array $aTaskExtraProperties
* @return void
*/
public function createTaskExtraPropertiesRows ($aTaskExtraProperties)
{
if (count($aTaskExtraProperties) > 0) {
$oConfig = new Configuration();
foreach ($aTaskExtraProperties as $key => $row) {
if ($oConfig->exists( $row['CFG_UID'], $row['OBJ_UID'], $row['PRO_UID'], $row['USR_UID'], $row['APP_UID']) ) {
$oConfig->remove( $row['CFG_UID'], $row['OBJ_UID'], $row['PRO_UID'], $row['USR_UID'], $row['APP_UID'] );
$oConfig->setDeleted(false);
}
$res = $oConfig->create( $row );
$oConfig->setNew(true);
$oConfig->setProperties();
}
}
return;
}
/**
* this function remove all Process except the PROCESS ROW
*
* @param string $sProUid
* @return boolean
*/
public 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();
$oConfig = new Configuration();
//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 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 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);
$oDataseti->next();
while ($aRowi = $oDataseti->getRow()) {
if ($oStepTrigger->stepTriggerExists($aRowi['STEP_UID'], $aRowi['TAS_UID'], $aRowi['TRI_UID'], $aRowi['ST_TYPE']))
$oStepTrigger->remove($aRowi['STEP_UID'], $aRowi['TAS_UID'], $aRowi['TRI_UID'], $aRowi['ST_TYPE']);
$oDataseti->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 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 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 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 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'] );
}
$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();
}
//Delete the TaskExtraProperties of the process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( ConfigurationPeer::CFG_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::OBJ_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::CFG_VALUE );
$oCriteria->addSelectColumn( TaskPeer::PRO_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::USR_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::APP_UID );
$oCriteria->add( TaskPeer::PRO_UID, $sProUid );
$oCriteria->add( ConfigurationPeer::CFG_UID, 'TAS_EXTRA_PROPERTIES' );
$oCriteria->addJoin( ConfigurationPeer::OBJ_UID, TaskPeer::TAS_UID );
$oDataset = ConfigurationPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
if ($oConfig->exists($aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID'])) {
$oConfig->remove( $aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID'] );
}
$oDataset->next();
}
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* this function creates a new Process, defined in the object $oData
*
* @param string $sProUid
* @return boolean
*/
public 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 );
// 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 )) {
$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->createFieldCondition( isset( $oData->fieldCondition ) ? $oData->fieldCondition : array (), $oData->dynaforms );
// Create before to createRouteRows for avoid duplicates
$this->createEventRows( isset( $oData->event ) ? $oData->event : array () );
$this->createCaseSchedulerRows( isset( $oData->caseScheduler ) ? $oData->caseScheduler : array () );
//Create data related to Configuration table
$this->createTaskExtraPropertiesRows( isset( $oData->taskExtraProperties ) ? $oData->taskExtraProperties : 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
*/
public function updateProcessFromData ($oData, $pmFilename)
{
$this->updateProcessRow( $oData->process );
$this->removeProcessRows( $oData->process['PRO_UID'] );
$this->removeAllFieldCondition($oData->dynaforms );
$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 );
$this->createTaskExtraPropertiesRows( isset( $oData->taskExtraProperties ) ? $oData->taskExtraProperties : array () );
}
/**
* 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
*/
public 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.
*/
public 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'];
}
}
$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;
}
/**
* Open a WebService public connection
*
* @param $user username for pm
* @param $pass password for the user
* @return 1 integer.
*/
public function ws_open_public ()
{
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.
*/
public 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.
*/
public 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
*/
public 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
*/
public 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":
case "email":
$basePath = PATH_DATA_MAILTEMPLATES;
break;
case "public":
$basePath = PATH_DATA_PUBLIC;
break;
default:
throw new Exception( "Unknow Process Files Type \"$type\"." );
break;
}
$dir = $basePath . $proUid . PATH_SEP;
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 . "unassignedMessage.html")) && file_exists($dir . G::LoadTranslation('ID_UNASSIGNED_MESSAGE'))) {
if (defined('PARTNER_FLAG')) {
@copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessagePartner.html", $dir . G::LoadTranslation('ID_UNASSIGNED_MESSAGE'));
} else {
@copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . G::LoadTranslation('ID_UNASSIGNED_MESSAGE'));
}
}
$files = glob( $dir . "*.*" );
foreach ($files as $file) {
$fileName = basename( $file );
if ($fileName != "alert_message.html" && $fileName != G::LoadTranslation('ID_UNASSIGNED_MESSAGE')) {
$filesList[] = array ("filepath" => $file,"filename" => $fileName);
}
}
return $filesList;
}
/**
* get rows related to Task extra properties of the process seleceted
*
* @param $proId process Uid
* @return $result
*/
public function getTaskExtraPropertiesRows( $proId )
{
try {
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn( ConfigurationPeer::CFG_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::OBJ_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::CFG_VALUE );
$oCriteria->addSelectColumn( ConfigurationPeer::PRO_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::USR_UID );
$oCriteria->addSelectColumn( ConfigurationPeer::APP_UID );
$oCriteria->add( TaskPeer::PRO_UID, $proId );
$oCriteria->add( ConfigurationPeer::CFG_UID, 'TAS_EXTRA_PROPERTIES' );
$oCriteria->addJoin( ConfigurationPeer::OBJ_UID, TaskPeer::TAS_UID );
$oDataset = ConfigurationPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aConfRows = array();
while ($aRow = $oDataset->getRow()) {
$aConfRows[] = $aRow;
$oDataset->next();
}
return $aConfRows;
} catch (Exception $oError) {
throw ($oError);
}
}
}
//end class processes
/**
* Object Document class
*
* @package workflow.engine.ProcessMaker
*/
class ObjectDocument
{
public $type;
public $name;
public $data;
public $origin;
/**
* Constructor
*/
public function __construct ()
{
$this->type = '';
$this->name = '';
$this->data = '';
$this->origin = '';
}
}
/**
* ObjectDocument Collection
*
* @package workflow.engine.ProcessMaker
*/
class ObjectCellection
{
public $num;
public $swapc;
public $objects;
/**
* Constructor
*/
public 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
*/
public 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;
}
/**
* 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
*/
public function get ()
{
if ($this->swapc > 0) {
$e = $this->objects[$this->swapc];
$this->swapc --;
return $e;
} else {
$this->swapc = $this->num;
return false;
}
}
}