Files
luos/workflow/engine/classes/class.xpdl.php
Alvaro Campos 60a8af93cb BUG 8615 "Duplicacion de campos en el password" SOLVED
- en realidad no duplica el password, sino que muestra el mismo pero encriptado
- para evitar este tipo de confusiones decidimos dejar vacio el password asi como está en el editor de usuarios, este solo se solicitara si no tiene guardada una contraseña en el servidor o si la direccion del servidor ha cambiado.
2012-03-07 18:20:56 -04:00

3937 lines
153 KiB
PHP
Executable File

<?php
/**
* class.xpdl.php
* @package workflow.engine.classes
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2011 Colosa Inc.
*
* 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.
*/
G::LoadClass('processes');
G::LoadClass('tasks');
G::LoadClass('derivation');
require_once 'classes/model/Users.php';
require_once 'classes/model/Configuration.php';
require_once 'classes/model/Gateway.php';
require_once 'classes/model/Event.php';
/**
* @package workflow.engine.classes
*/
class Xpdl extends processes
{
/**
* This function creates a new Process, defined in the object $oData
* @param array $aData
* @param array $tasks
* @param string $pmFilename
* @return void
*/
function createProcessFromDataXpdl ($oData,$tasks) {
if ( !isset($oData->process['PRO_UID']) || trim($oData->process['PRO_UID']) == '' )
$oData->process['PRO_UID'] = G::generateUniqueID() ;
$this->removeProcessRows ($oData->process['PRO_UID'] );
$uid = $this->createProcessRow($oData->process);
$this->createTaskRows($oData->tasks);
$newTasks=$this->verifyTasks($uid,$tasks);
if ( !isset($oData->routes) ) $oData->routes = array();
$this->createRouteRowsXpdl($uid,$oData->routes,$newTasks);
$this->createLaneRows($oData->lanes);
$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->createSubProcessRowsXpdl($uid,isset($oData->subProcess) ? $oData->subProcess : array(),$newTasks);
$this->createCaseTrackerRows(isset($oData->caseTracker) ? $oData->caseTracker : array());
$this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject: array());
$this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array());
$this->createStageRows(isset($oData->stage) ? $oData->stage : array());
$this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms);
$this->createEventRows(isset($oData->event) ? $oData->event : array());
$this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array());
}
/**
* this function creates a new Process, defined in the object $oData
* @param string $sProUid
* @return boolean
*/
function updateProcessFromDataXpdl ($oData, $tasks ) {
if(is_array($oData->process))
$this->updateProcessRow ($oData->process );
$this->removeProcessRows ($oData->process['PRO_UID'] );
$uid = $this->createProcessRow($oData->process);
$this->createTaskRows($oData->tasks);
$newTasks=$this->verifyTasks($uid,$tasks);
$this->createRouteRowsXpdl($uid,$oData->routes,$newTasks);
$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->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 function creates a new Process, defined in the object $oData
* @param string $sProUid
* @return boolean
*/
function createProcessFromDataPmxml ($oData )
{
$this->removeProcessRows ($oData->process['PRO_UID'] );
$this->createProcessRow($oData->process);
$this->createDynaformRows($oData->dynaforms);
}
/**
* This function update the dynaforms
* @param string $sProUid
* @param array $fields
* @return boolean
*/
// function updateDynaformsPmxml($uid,$fields)
// {
// $oData->dynaforms = $this->getDynaformRows ( $uid);
// $count = sizeof($oData->dynaforms);
// foreach ($fields as $val => $id){
// $oData->dynaforms[$count]= $id;
// $count = $count + 1 ;
// }
// $this->createDynaformRows ($oData->dynaforms );
// }
/**
* This function create the subProcess from data
* @param array $oData
* @param array $tasks
* @return void
*/
function createSubProcessFromDataXpdl ($oData,$tasks)
{ $this->removeProcessRows ($oData->process['PRO_UID'] );
$uid = $this->createProcessRow($oData->process);
$this->createTaskRows($oData->tasks);
$newTasks = $this->verifyTasks($uid,$tasks);
$this->createRouteRowsXpdl($uid,$oData->routes,$newTasks);
$this->createLaneRows($oData->lanes);
$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->createSubProcessRowsXpdl($uid,isset($oData->subProcess) ? $oData->subProcess : array(),$newTasks);
$this->createCaseTrackerRows(isset($oData->caseTracker) ? $oData->caseTracker : array());
$this->createCaseTrackerObjectRows(isset($oData->caseTrackerObject) ? $oData->caseTrackerObject: array());
$this->createObjectPermissionsRows(isset($oData->objectPermissions) ? $oData->objectPermissions : array());
$this->createStageRows(isset($oData->stage) ? $oData->stage : array());
$this->createFieldCondition(isset($oData->fieldCondition) ? $oData->fieldCondition : array(), $oData->dynaforms);
$this->createEventRows(isset($oData->event) ? $oData->event : array());
$this->createCaseSchedulerRows(isset($oData->caseScheduler) ? $oData->caseScheduler : array());
}
/**
* This function verify the tasks of a process that was created with the tasks they were sent to the process
* @param string $oProUid
* @param array $fieldsTasks
* @return array
*/
function verifyTasks($sProUid,$fieldsTasks)
{
$process = new Process( );
$oData->tasks = $this->getTaskRows($sProUid);
$findTask= 0;
$findNext= 0;
foreach ($fieldsTasks as $taskVal => $idVal){
foreach ($oData->tasks as $task => $id ){
if($idVal['TAS_TITLE'] == $id['TAS_TITLE'] and $idVal['TAS_POSX'] == $id['TAS_POSX'] and $idVal['TAS_POSY'] == $id['TAS_POSY']){
if(isset($idVal['TAS_DESCRIPTION']) and isset($id['TAS_DESCRIPTION'])){
if($idVal['TAS_DESCRIPTION'] == $id['TAS_DESCRIPTION']){
$fieldsTasks[$taskVal]['TAS_UID_DATA'] = $id['TAS_UID'];
}
}
$fieldsTasks[$taskVal]['TAS_UID_DATA'] = $id['TAS_UID'];
}
}
}
return $fieldsTasks;
}
/**
* This function creates the rows of the process
* @param string $sProUid
* @param array $routes
* @param array $fieldsTasks
* @return void
*/
function createRouteRowsXpdl($sProUid,$routes,$fieldsTasks)
{
$process = new Process( );
$oData->tasks = $this->getTaskRows($sProUid);
foreach ($routes as $taskRoute => $idRoute){
$findTask = 0;
$findNext = 0;
foreach ($oData->tasks as $task => $id ){
if($idRoute['TAS_UID'] == $id['TAS_UID']){
$findTask = 1;
}
if($idRoute['ROU_NEXT_TASK']!='-1'){
if($idRoute['ROU_NEXT_TASK'] == $id['TAS_UID']){
$findNext= 1;
}
}
else{
$findNext= 1;
}
}
if($findTask==0){
$id = $this->findIdTask($idRoute['TAS_UID'],$fieldsTasks);
$routes[$taskRoute]['TAS_UID']=$id;
}
if($findNext==0){
$id = $this->findIdTask($idRoute['ROU_NEXT_TASK'],$fieldsTasks);
$routes[$taskRoute]['ROU_NEXT_TASK']=$id;
}
}
$this->createRouteRows($routes);
}
/**
* Create Sub Process rows from an array, removing those subprocesses with
* the same UID.
* @param $SubProcess array
* @return void.
*/
function createSubProcessRowsXpdl ($sProUid,$SubProcess,$tasks )
{
$process = new Process();
$oData->tasks = $this->getTaskRows($sProUid);
foreach ( $SubProcess as $key => $row ) {
$findTask = 0;
foreach ($oData->tasks as $task => $id ){
if($row['TAS_PARENT'] == $id['TAS_UID']){
$findTask = 1;
}
}
if($findTask==0){
$id = $this->findIdTask($row['TAS_PARENT'],$tasks );
$SubProcess[$key]['TAS_PARENT']=$id;
}
$oSubProcess = new SubProcess();
if($oSubProcess->subProcessExists ($row['SP_UID'])){
$oSubProcess->remove($row['SP_UID']);
}
$res = $oSubProcess->create($row);
}
return;
}
/**
* this function find the id of the task
* @param string $idTask
* @param array $routes
* @return array
*/
function findIdTask($idTask,$routes)
{
foreach ($routes as $value => $id ){
if($id['TAS_UID'] == $idTask){
return $id['TAS_UID_DATA'];
}
}
}
/**
* This function create the file .xpdl from a process
* @param string $sProUid
* @return void
*/
function xmdlProcess ( $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->inputs = $this->getInputRows( $sProUid );
$oData->outputs = $this->getOutputRows( $sProUid );
$oData->dynaforms = $this->getDynaformRows ( $sProUid );
$oData->steps = $this->getStepRows( $sProUid );
$oData->triggers = $this->getTriggerRows( $sProUid );
$oData->taskusers = $this->getTaskUserRows( $oData->tasks );
$oData->groupwfs = $this->getGroupwfRows( $oData->taskusers );
$oData->steptriggers = $this->getStepTriggerRows( $oData->tasks );
$oData->dbconnections = $this->getDBConnectionsRows($sProUid);
$oData->reportTables = $this->getReportTablesRows($sProUid);
$oData->reportTablesVars = $this->getReportTablesVarsRows($sProUid);
$oData->stepSupervisor = $this->getStepSupervisorRows($sProUid);
$oData->objectPermissions = $this->getObjectPermissionRows ($sProUid);
$oData->subProcess = $this->getSubProcessRow ($sProUid);
$oData->caseTracker = $this->getCaseTrackerRow ($sProUid);
$oData->caseTrackerObject = $this->getCaseTrackerObjectRow ($sProUid);
$oData->stage = $this->getStageRow ($sProUid);
$oData->fieldCondition = $this->getFieldCondition($sProUid);
$oData->event = $this->getEventRow ($sProUid);
$oData->caseScheduler = $this->getCaseSchedulerRow ($sProUid);
$path = PATH_DOCUMENT . 'output' . PATH_SEP;
if ( !is_dir($path) ) {
G::verifyPath($path, true);
}
$proTitle = (substr(G::inflect($oData->process['PRO_TITLE']), 0, 30));
$proTitle = preg_replace("/[^A-Za-z0-9_]/", "", $proTitle);
$index = '';
$lastIndex = '';
do {
$filename = $path . $proTitle . $index . '.xpdl';
$lastIndex = $index;
if ( $index == '' )
$index = 1;
else
$index ++;
} while ( file_exists ( $filename ) );
$proTitle .= $lastIndex;
$filenameOnly = $proTitle . '.xpdl';
$xml = fopen( $filename.'tpm', "wb");
$process = $oData->process;
$coordinateMaximumY = 0;
$coordinateMaximumX = 0;
$lanes = $oData->lanes;
foreach ($lanes as $keyLane => $valLane ) {
if($valLane['SWI_TYPE']=="TEXT"){
$textLane = $valLane['SWI_TEXT'];
$longText = strlen($textLane);
$height = 0;
$width = 0;
if($longText < 40){
$height = 20;
$width = ($longText*10)+ 10;
}
if($longText > 40){
$numberRows = $longText/40;
$height = $numberRows * 20;
$width = 250;
}
$coordinateX = $valLane['SWI_X'] + $width;
$coordinateY = $valLane['SWI_Y'] + $height ;
if($coordinateX > $coordinateMaximumX){
$coordinateMaximumX = $coordinateX;
}
if($coordinateY > $coordinateMaximumY){
$coordinateMaximumY = $coordinateY;
}
}
}
foreach ($oData->tasks as $keyLane => $val ) {
$coordinateX = $val['TAS_POSX']+ 160;
$coordinateY = $val['TAS_POSY']+ 38;
if($coordinateX > $coordinateMaximumX){
$coordinateMaximumX = $coordinateX;
}
if($coordinateY > $coordinateMaximumY){
$coordinateMaximumY = $coordinateY;
}
}
$data = $this->createPool($process,$coordinateMaximumX + 60,$coordinateMaximumY +60);
fwrite ($xml, '<?xml version="1.0" encoding="utf-8"?>');
fwrite ($xml, $data);
$artifacts = '<Artifacts>';
$artifacts .= $this->createArtifacts($lanes,'0');
$dataProcess ='
<WorkflowProcesses>';
$dataProcess.= '
<WorkflowProcess Id= "'.$process['PRO_UID'].'" '.
'Name="'.$process['PRO_TITLE'].'">
<RedefinableHeader>
</RedefinableHeader>
';
$activitySets = '<ActivitySets>';
$subProcess = $oData->subProcess;
$subProcesses = $this-> createSubProcessesXpdl($subProcess,$oData->tasks);
$activitySets.= $subProcesses['ACTIVITIES'];
$activitySets.= '</ActivitySets>';
$artifacts .= $subProcesses['ARTIFACTS'];
$artifacts .='
</Artifacts>';
fwrite ($xml,$artifacts);
fwrite ($xml,$dataProcess);
fwrite ($xml,$activitySets);
// Here are generated activities of a file. XPDL
// for this use the process tasks
$tasks = $oData->tasks;
$events = $oData->event;
$scheduler = $oData->caseScheduler;
$dataTasks = $this-> createActivitiesXpdl($tasks,$events,$scheduler);
fwrite ($xml,$dataTasks['ACTIVITIES']);
$taskHidden = $dataTasks['TASK_HIDDEN'];
$routes = $oData->routes;
$dataRoutes = $this-> createTransitionsXpdl($routes,$tasks,$taskHidden);
fwrite ($xml,$dataRoutes['ACTIVITIES']);
$data = '
</Activities>';
fwrite ($xml, $data);
fwrite ($xml, $dataTasks['TRANSITION']);
fwrite ($xml, $dataRoutes['TRANSITION']);
$data = '
</Transitions>
<ExtendedAttributes />
</WorkflowProcess>
</WorkflowProcesses>
<ExtendedAttributes />
</Package>';
fwrite ($xml, $data);
fclose ($xml);
$filenameLink = 'processes_DownloadFileXpdl?p=' . $proTitle . '&r=' . rand(100,1000);
$result['FILENAMEXPDL'] = $proTitle.'.xpdl';
$result['FILENAME_LINKXPDL']= $filenameLink;
return $result;
}
/**
* This function create the pool from the process
* @param array $process
* @param string $coordinateMaximumX
* @param string $coordinateMaximumY
* @return string
*/
function createPool ($process,$coordinateMaximumX,$coordinateMaximumY)
{
$data = '';
$data .= '
<Package xmlns="http://www.wfmc.org/2008/XPDL2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '.
'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'.
' Id = "'.$process['PRO_UID'].'" Name ="'.$process['PRO_UID'].'" OnlyOneProcess="false">
<PackageHeader>
<XPDLVersion>2.1</XPDLVersion>
<Vendor>Process Maker</Vendor>
<Created>'.$process['PRO_CREATE_DATE'].'</Created>
<Description>'.$process['PRO_DESCRIPTION'].'</Description>
<Documentation />
</PackageHeader>
<RedefinableHeader>
<Author></Author>
<Version />
<Countrykey>CO</Countrykey>
</RedefinableHeader>
<ExternalPackages />
<Participants />
<Pools>
<Pool Id="Pool'.$process['PRO_UID'].'" BoundaryVisible="true" Name="'.$process['PRO_TITLE'].'" Process="'.$process['PRO_UID'].'" >
<Lanes>
</Lanes>
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="processmaker" Height="'.$coordinateMaximumY.'" Width="'.$coordinateMaximumX.'" BorderColor="-16777216" FillColor="-1">
<Coordinates XCoordinate="30" YCoordinate="30">
</Coordinates>
</NodeGraphicsInfo>
</NodeGraphicsInfos>
</Pool>
</Pools>
<MessageFlows />
<Associations />
';
return $data;
}
/**
* This function generated the Artifacts of a file. XPDL
* @param array $lanes
* @param string $id
* @return string
*/
function createArtifacts($lanes,$id)
{
$artifacts = '';
$idTask = '';
foreach ($lanes as $keyLane => $valLane ) {
if($valLane['SWI_TYPE']=="TEXT"){
$idLane = $valLane['SWI_UID'];
$textLane = $valLane['SWI_TEXT'];
$coordinateX = $valLane['SWI_X'];
$coordinateY = $valLane['SWI_Y'];
$longText = strlen($textLane);
if($longText < 40){
$height = 20;
$width = ($longText*10)+ 10;
}
if($longText > 40){
$numberRows = $longText/40;
$height = $numberRows * 20;
$width = 250;
}
if($id != 0){
$idTask = ' ActivitySetId="'.$id.'"';
}
$artifacts .='
<Artifact Id="'.$idLane.'" ArtifactType="Annotation" TextAnnotation="'.$textLane.'"'.$idTask.'>
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="processmaker" Height="'.$height.'" Width="'.$width.'" BorderColor="-2763307" FillColor="-2763307">
<Coordinates XCoordinate="'.$coordinateX.'" YCoordinate="'.$coordinateY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<Documentation />
</Artifact>';
}
}
return $artifacts;
}
/**
* This function creates SubProcesses
* @param array $tasks
* @param array $subProcess
* @return array
*/
function createSubProcessesXpdl($subProcess,$tasks)
{
$activitySets = '';
$dataCreated = '';
$artifacts = '';
foreach ($subProcess as $key => $row) {
if($row['SP_UID'] != ''){
$idTask = $row['TAS_PARENT'];
foreach ($tasks as $id => $value) {
if($value['TAS_UID'] == $idTask){
$nameTask = htmlentities($value['TAS_TITLE']);
}
}
$activitySets.='
<ActivitySet Id="'.$idTask.'" Name="'.$nameTask.'">';
if($row['PRO_UID'] != '' && $row['PRO_UID'] != 0){
$dataSubProcess= $this->serializeProcess($row['PRO_UID']);
$data = unserialize ($dataSubProcess);
$tasks = $data->tasks;
$subProcessData= $data->subProcess;
$subProcessTask= $data->tasks;
$lanes = $data->lanes;
$events = $data->event;
$scheduler = $data->caseScheduler;
$artifacts = $this->createArtifacts($lanes,$idTask);
$dataCreated = $this->createSubProcessesXpdl($subProcessData,$subProcessTask);
$dataTasks = $this->createActivitiesXpdl($tasks,$events,$scheduler);
$activitySets .=$dataTasks['ACTIVITIES'];
$taskHidden = $dataTasks['TASK_HIDDEN'];
$routes = $data->routes;
$dataRoutes = $this->createTransitionsXpdl($routes,$tasks,$taskHidden);
$activitySets .=$dataRoutes['ACTIVITIES'];
$activitySets .= '
</Activities>';
$activitySets .=$dataTasks['TRANSITION'];
$activitySets .=$dataRoutes['TRANSITION'];
$activitySets .= '
</Transitions>';
}
else{
$data ='
<Activities />
<Transitions />';
}
$activitySets.='</ActivitySet>';
$activitySets.=$dataCreated;
}
}
$fields['ACTIVITIES']= $activitySets;
$fields['ARTIFACTS'] = $artifacts;
return $fields;
}
/**
* This function creates activities from the tasks
* @param array $tasks
* @return array
*/
function createActivitiesXpdl($tasks,$events,$scheduler)
{
$dataTasks = '
<Activities>';
$transitions ='
<Transitions>';
$start = 0;
$implementation = '';
$taskHidden = array();
$description = '';
foreach ($tasks as $key => $val ) {
$idTask = $val['TAS_UID'];
$nameTask = $val['TAS_TITLE'];
$coordinateX = $val['TAS_POSX'];
$coordinateY = $val['TAS_POSY'];
if($val['TAS_TYPE']== 'NORMAL' or $val['TAS_TYPE']== 'SUBPROCESS'){
if($val['TAS_TYPE']== 'NORMAL'){
$implementation = '
<Implementation>
<Task />
</Implementation>';
}
if($val['TAS_TYPE']== 'SUBPROCESS'){
$implementation = '
<BlockActivity ActivitySetId="'.$val['TAS_UID'].'" />';
}
if(isset($val['TAS_DESCRIPTION'])){
$description = $val['TAS_DESCRIPTION'];
}
else{
$description = '';
}
$fillColor = $val['TAS_COLOR'];
if($val['TAS_START']=="TRUE"){
$start = 1;
}
if($start==1){
$start=0;
$positionX=$coordinateX+65;
$positionY=$coordinateY-45;
$dataTasks .='
<Activity Id="s'.$idTask.'">
<Description>'.$description.'</Description>
<Event>
<StartEvent Trigger="None" />
</Event>
<Performers />
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker"'.
' Height="30" Width="30" BorderColor="-10311914" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
</Activity>';
$transitions.='
<Transition Id="x'.$idTask.'" From="s'.$idTask.'" To="'.$idTask.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$dataTasks .='
<Activity Id="'.$idTask.'" Name="'.$nameTask.'">
<Description>'.$description.'</Description>'
.$implementation.'
<Performers />
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker"'.
' Height="38" Width="160" BorderColor="-16553830" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$coordinateX.'" YCoordinate="'.$coordinateY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
</Activity>';
}
else{
if($val['TAS_TYPE']== 'HIDDEN'){
$taskHidden[] = $tasks[$key];
}
}
}
$aux = $events;
foreach ($events as $key => $row) {
$aux[$key]= $row['TAS_UID'];
}
if(sizeof($events)> 0){
array_multisort($aux,SORT_ASC,$events);
unset($aux);
}
$findTask = 0;
$idTasks = array();
$arrayTasks = array();
$port = 5;
foreach($events as $key => $val){
if($val['EVN_ACTION'] == 'SEND_MESSAGE' and $val['EVN_RELATED_TO'] == 'SINGLE'){
$idEvent = $val['EVN_UID'];
$idTask = $val['TAS_UID'];
foreach($tasks as $id => $value){
if($value['TAS_UID'] == $idTask){
$coordinateX = $value['TAS_POSX'] + 19;
$coordinateY = $value['TAS_POSY'] + 38;
$coordinateXM = $coordinateX + 96;
$coordinateYM = $coordinateY + 65;
}
}
foreach($arrayTasks as $id => $value){
if($idTask == $value['ID']){
$coordinateX = $value['X'] + 30;
$coordinateY = $value['Y'];
$coordinateXM = $value['XM']+ 30;
$coordinateYM = $value['YM'];
if($coordinateY < 30){
$coordinateX = $value['FIRSTX'] + 30;
$coordinateY = $value['FIRSTY'];
}
$arrayTasks[$id]['X'] = $coordinateX;
$arrayTasks[$id]['Y'] = $coordinateY;
$arrayTasks[$id]['PORT'] = $port + 1;
$findTask = 1;
$port = $arrayTasks[$id]['PORT'];
}
}
$description = $val['EVN_DESCRIPTION'];
$arrayTo = $val['EVN_ACTION_PARAMETERS'];
foreach($arrayTo as $idTo => $valueTo){
$to = $valueTo;
}
$to = explode('|',$to);
$to = $to[0];
$oConfiguration = new Configuration();
$emailArray = $oConfiguration->load('Emails','','','','');
$arrayFrom = unserialize($emailArray['CFG_VALUE']);
$passwd = $arrayFrom['MESS_PASSWORD'];
$passwdDec = G::decrypt($passwd,'EMAILENCRYPT');
if (strpos( $passwdDec, 'hash:' ) !== false) {
list($hash, $pass) = explode(":", $passwdDec);
$passwd = $pass;
}
$from = $arrayFrom['MESS_ACCOUNT'];
if($to == 'ext'){
$oUser = new Users();
$aUser = $oUser->load($_SESSION['USER_LOGGED']);
$to = $aUser['USR_USERNAME'];
}
$dataTasks .='
<Activity Id="'.$idEvent.'">
<Description />
<Event>
<IntermediateEvent Trigger="Timer" Target="'.$idTask.'" IsAttached="true">
<TriggerTimer>
<ItemElementName>TimeCycle</ItemElementName>
</TriggerTimer>
</IntermediateEvent>
</Event>
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="BizAgi_Process_Modeler" Height="30" Width="30" BorderColor="-6909623" FillColor="-66833">
<Coordinates XCoordinate="'.$coordinateX.'" YCoordinate="'.$coordinateY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>
<Activity Id="m'.$idEvent.'" Name="'.$description.'">
<Description>'.$description.'</Description>
<Event>
<IntermediateEvent Trigger="Message" Implementation="Other">
<TriggerResultMessage CatchThrow="THROW">
<Message Id="'.$idEvent.'" From="admin" To="'.$to.'" Name="'.$description.'">
</Message>
</TriggerResultMessage>
</IntermediateEvent>
</Event>
<Documentation>'.$description.'</Documentation>
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="BizAgi_Process_Modeler" Height="30" Width="30" BorderColor="-6909623" FillColor="-66833">
<Coordinates XCoordinate="'.$coordinateXM.'" YCoordinate="'.$coordinateYM.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
$transitions.='
<Transition Id="t'.$idEvent.'" From="'.$idEvent.'" To="m'.$idEvent.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="'.$port.'" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
if($findTask == 0){
$idTasks['ID'] = $idTask;
$idTasks['X'] = $coordinateX;
$idTasks['Y'] = $coordinateY;
$idTasks['FIRSTX'] = $coordinateX;
$idTasks['FIRSTY'] = $coordinateY;
$idTasks['XM'] = $coordinateXM;
$idTasks['YM'] = $coordinateYM;
$idTasks['PORT'] = $port;
$arrayTasks[] = $idTasks;
}
}
}
$idTasks = array();
$arrayTasks = array();
$findTask = 0;
foreach($scheduler as $key => $val){
if($val['SCH_OPTION'] == 4){
$idSch = $val['SCH_UID'];
$name = $val['SCH_NAME'];
$idTask = $val['TAS_UID'];
foreach($tasks as $id => $value){
if($value['TAS_UID'] == $idTask){
$coordinateX = $value['TAS_POSX'] - 60;
$coordinateY = $value['TAS_POSY'] + 5;
}
}
foreach($arrayTasks as $id => $value){
if($idTask == $value['ID']){
$coordinateX = $value['X'];
$coordinateY = $value['Y'] - 40;
if($coordinateY < 30){
$coordinateX = $value['FIRSTX'] + 50;
$coordinateY = $value['FIRSTY'] - 90;
}
$arrayTasks[$id]['X'] = $coordinateX;
$arrayTasks[$id]['Y'] = $coordinateY;
$findTask = 1;
}
}
$time = $val['SCH_TIME_NEXT_RUN'];
$time = explode(' ',$time);
$time = $time[0];
$time = str_replace('-','/',$time);
$dataTasks .='
<Activity Id="'.$idSch.'" Name="'.$name.'">
<Description />
<Event>
<StartEvent Trigger="Timer">
<TriggerTimer TimeDate="'.$time.'">
<ItemElementName>TimeCycle</ItemElementName>
</TriggerTimer>
</StartEvent>
</Event>
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="BizAgi_Process_Modeler" Height="30" Width="30" BorderColor="-10311914" FillColor="-1638505">
<Coordinates XCoordinate="'.$coordinateX.'" YCoordinate="'.$coordinateY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
$transitions.='
<Transition Id="t'.$idSch.'" From="'.$idSch.'" To="'.$idTask.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="4" ToPort="3">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
if($findTask == 0){
$idTasks['ID'] = $idTask;
$idTasks['X'] = $coordinateX;
$idTasks['Y'] = $coordinateY;
$idTasks['FIRSTX'] = $coordinateX;
$idTasks['FIRSTY'] = $coordinateY;
$arrayTasks[] = $idTasks;
}
}
if($val['SCH_OPTION'] == 1){
$idSch = $val['SCH_UID'];
$name = $val['SCH_NAME'];
$idTask = $val['TAS_UID'];
foreach($tasks as $id => $value){
if($value['TAS_UID'] == $idTask){
$coordinateX = $value['TAS_POSX'] - 60;
$coordinateY = $value['TAS_POSY'] + 5;
}
}
foreach($arrayTasks as $id => $value){
if($idTask == $value['ID']){
$coordinateX = $value['X'];
$coordinateY = $value['Y'] - 40;
if($coordinateY < 30){
$coordinateX = $value['FIRSTX'] + 50;
$coordinateY = $value['FIRSTY'] - 90;
}
$arrayTasks[$id]['X'] = $coordinateX;
$arrayTasks[$id]['Y'] = $coordinateY;
$findTask = 1;
}
}
$dataTasks .='
<Activity Id="'.$idSch.'" Name="'.$name.'">
<Description />
<Event>
<StartEvent Trigger="Timer">
<TriggerTimer TimeCycle="1 DD">
<ItemElementName>TimeCycle</ItemElementName>
</TriggerTimer>
</StartEvent>
</Event>
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="BizAgi_Process_Modeler" Height="30" Width="30" BorderColor="-10311914" FillColor="-1638505">
<Coordinates XCoordinate="'.$coordinateX.'" YCoordinate="'.$coordinateY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
$transitions.='
<Transition Id="t'.$idSch.'" From="'.$idSch.'" To="'.$idTask.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="4" ToPort="3">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
if($findTask == 0){
$idTasks['ID'] = $idTask;
$idTasks['X'] = $coordinateX;
$idTasks['Y'] = $coordinateY;
$idTasks['FIRSTX'] = $coordinateX;
$idTasks['FIRSTY'] = $coordinateY;
$arrayTasks[] = $idTasks;
}
}
}
$data = array();
$data['ACTIVITIES'] = $dataTasks;
$data['TRANSITION'] = $transitions;
$data['TASK_HIDDEN']= $taskHidden;
return $data;
}
/**
* This function creates transitions
* @param array $routes
* @param array $tasks
* @return array
*/
function createTransitionsXpdl($routes,$tasks,$taskHidden)
{
$cont = 0;
$dataRoutes = '';
$endEvent = 1;
$taskParallel = '';
$routeParallel = '';
$taskSecJoin = '';
$routeSecJoin = '';
$taskEvaluate = '';
$routeEvaluate = '';
$taskParallelEv = '';
$routeParallelEv = '';
$taskSelect = '';
$routeSelect = '';
$routeEnd = '';
$arraySecJoin = array();
$position = 0;
$fillColor = '';
$transitions = '';
$condition = '';
$nextTask = '';
$findFrom = 0;
$findTo = 0;
$routesTasks = $routes;
foreach ($routes as $key => $row) {
if($row['ROU_TYPE'] == 'SEC-JOIN'){
$arraySecJoin[$position] = array();
$arraySecJoin[$position] = $row;
$position = $position + 1;
unset($routes[$key]);
}
}
$aux = $arraySecJoin ;
foreach ($arraySecJoin as $key => $row) {
$aux[$key]= $row['ROU_NEXT_TASK'];
}
if(sizeof($arraySecJoin)> 0){
array_multisort($aux,SORT_ASC,$arraySecJoin);
unset($aux);
}
foreach ($routes as $key => $row) {
$uid[$key] = $row['TAS_UID'];
$case[$key] = $row['ROU_CASE'];
}
if(sizeof($routes)> 0){
array_multisort($uid, SORT_ASC, $case, SORT_ASC, $routes);
}
$routes = array_merge($routes,$arraySecJoin);
$routesTasks = $routes;
foreach ($routes as $key => $val ) {
$end = 0;
$idRoute = $val['ROU_UID'];
$idTask = $val['TAS_UID'];
$nextTask = $val['ROU_NEXT_TASK'];
$condition = htmlentities($val['ROU_CONDITION']);
if($nextTask == "-1"){
$end = 1;
}
$typeRoute = $val['ROU_TYPE'];
$route = '';
if ($typeRoute != "SEQUENTIAL" ){
switch($typeRoute){
case 'PARALLEL':
$coordinateX = 0;
$coordinateY = 0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
foreach ($taskHidden as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'];
$coordinateY = $idVal['TAS_POSY'];
$idRoute = $idTask;
}
}
$positionX = $coordinateX + 60;
$positionY = $coordinateY + 40;
if($idTask != $taskParallel){
$taskParallel = $idTask;
$routeParallel = $idRoute;
$dataRoutes .='
<Activity Id="'.$routeParallel.'">
<Description />
<Route GatewayType="AND" />
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-5855715" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
if($taskParallel != $routeParallel ){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$taskParallel.'" To="'.$routeParallel.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeParallel.'" To="'.$nextTask.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeParallel.'" To="'.$nextTask.'" Name="">
<Condition/>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
break;
case 'SEC-JOIN':
$coordinateX = 0;
$coordinateY = 0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$nextTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
foreach ($taskHidden as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'];
$coordinateY = $idVal['TAS_POSY'];
$idRoute = $idTask;
}
}
$positionX = $coordinateX + 60;
$positionY = $coordinateY - 45;
if($nextTask != $taskSecJoin){
$taskSecJoin = $nextTask;
$routeSecJoin = $idRoute;
$dataRoutes .='
<Activity Id="'.$routeSecJoin.'">
<Description />
<Route GatewayType="AND" />
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-5855715" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
if($routeSecJoin != $taskSecJoin ){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeSecJoin.'" To="'.$taskSecJoin.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$idTask.'" To="'.$routeSecJoin.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$idTask.'" To="'.$routeSecJoin.'" Name="">
<Condition/>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
break;
case 'EVALUATE':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
foreach ($taskHidden as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'];
$coordinateY = $idVal['TAS_POSY'];
$idRoute = $idTask;
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY+40;
if($idTask != $taskEvaluate){
$taskEvaluate = $idTask;
$routeEvaluate = $idRoute;
if($nextTask != "-1"){
$dataRoutes .='
<Activity Id="'.$routeEvaluate.'">
<Description />
<Route MarkerVisible="true"/>
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-5855715" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
if($taskEvaluate != $routeEvaluate ){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$taskEvaluate.'" To="'.$routeEvaluate.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeEvaluate.'" To="'.$nextTask.'" Name="">
<Condition Type="CONDITION">
<Expression>'.$condition.'</Expression>
</Condition>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
}
else{
if($nextTask !="-1"){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeEvaluate.'" To="'.$nextTask.'" Name="">
<Condition Type="CONDITION">
<Expression>'.$condition.'</Expression>
</Condition>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$routeEnd = $routeEvaluate;
}
}
break;
case 'PARALLEL-BY-EVALUATION':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
foreach ($taskHidden as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'];
$coordinateY = $idVal['TAS_POSY'];
$idRoute = $idTask;
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY+40;
if($idTask != $taskParallelEv){
$taskParallelEv = $idTask;
$routeParallelEv = $idRoute;
$dataRoutes .='
<Activity Id="'.$routeParallelEv.'">
<Description />
<Route GatewayType="OR"/>
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-5855715" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
if($taskParallelEv != $routeParallelEv ){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$taskParallelEv.'" To="'.$routeParallelEv.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeParallelEv.'" To="'.$nextTask.'" Name="">
<Condition Type="CONDITION">
<Expression>'.$condition.'</Expression>
</Condition>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeParallelEv.'" To="'.$nextTask.'" Name="">
<Condition Type="CONDITION">
<Expression>'.$condition.'</Expression>
</Condition>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
break;
case 'SELECT':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
foreach ($taskHidden as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'];
$coordinateY = $idVal['TAS_POSY'];
$idRoute = $idTask;
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY+40;
if($idTask != $taskSelect){
$taskSelect = $idTask;
$routeSelect = $idRoute;
$dataRoutes .='
<Activity Id="'.$routeSelect.'">
<Description />
<Route GatewayType="Complex" />
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-5855715" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
if($taskSelect != $routeSelect ){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$taskSelect.'" To="'.$routeSelect.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeSelect.'" To="'.$nextTask.'" Name="">
<Condition Type="CONDITION">
<Expression>'.$condition.'</Expression>
</Condition>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
if($nextTask !="-1"){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeSelect.'" To="'.$nextTask.'" Name="">
<Condition Type="CONDITION">
<Expression>'.$condition.'</Expression>
</Condition>
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$routeEnd = $routeSelect;
}
}
break;
case 'DISCRIMINATOR':
$coordinateX = 0;
$coordinateY = 0;
$optional = $val['ROU_OPTIONAL'];
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$nextTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
foreach ($taskHidden as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'];
$coordinateY = $idVal['TAS_POSY'];
$idRoute = $idTask;
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY-45;
if($nextTask != $taskSecJoin){
$taskDiscriminator = $nextTask;
$routeDiscriminator = $idRoute;
$dataRoutes .='
<Activity Id="'.$routeDiscriminator.'">
<Description />
<Route GatewayType="Complex" />
<Documentation />
<ExtendedAttributes>
<ExtendedAttribute Name="option" Value="'.$optional.'" />
<ExtendedAttribute Name="condition" Value="'.$condition.'" />
</ExtendedAttributes>
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-5855715" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
if($routeDiscriminator != $taskDiscriminator ){
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$routeDiscriminator.'" To="'.$taskDiscriminator.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$idTask.'" To="'.$routeDiscriminator.'" Name="">
<Condition />
<Description />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$idTask.'" To="'.$routeDiscriminator.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
break;
}
}
if($end==1){
if($typeRoute == "SEQUENTIAL"){
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
$positionX=$coordinateX+65;
$positionY=$coordinateY+40;
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$idTask.'" To="'.$idRoute.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
else{
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
}
}
$positionX = $coordinateX + 120;
$positionY = $coordinateY + 40;
$idTask = $routeEnd;
$transitions.='
<Transition Id="'.G::generateUniqueID().'" From="'.$idTask.'" To="'.$idRoute.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="4" ToPort="3">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
$dataRoutes .='
<Activity Id="'.$idRoute.'">
<Description />
<Event>
<EndEvent />
</Event>
<Documentation />
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="Processmaker" Height="30" Width="30" BorderColor="-6750208" FillColor="'.$fillColor.'">
<Coordinates XCoordinate="'.$positionX.'" YCoordinate="'.$positionY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
$end = 0;
$endEvent = 0;
}
else{
if ($typeRoute == "SEQUENTIAL"){
$transitions.='
<Transition Id="'.$idRoute.'" From="'.$idTask.'" To="'.$nextTask.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="2" ToPort="1">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX']+190;
$coordinateY=$idVal['TAS_POSY']+5;
if(isset($idVal['TAS_DEF_MESSAGE'])){
if($idVal['TAS_DEF_MESSAGE'] != '' and $idVal['TAS_DEF_MESSAGE'] != Null){
$idEvent = G::generateUniqueID();
$example = new Derivation();
$fieldUserTo = $example->getAllUsersFromAnyTask($nextTask);
$fieldUserTo = $example->getUsersFullNameFromArray($fieldUserTo);
$fieldUserFrom = $example->getAllUsersFromAnyTask($idTask);
$fieldUserFrom = $example->getUsersFullNameFromArray($fieldUserFrom);
/*$oUser = new Users();
$aUser = $oUser->load($_SESSION['USER_LOGGED']);
$from = $aUser['USR_USERNAME'];*/
$description = '';
$userFrom = '';
$userTo = '';
if(isset($fieldUserFrom[0]['USR_USERNAME'])){
$userFrom = $fieldUserFrom[0]['USR_USERNAME'];
}
if(isset($fieldUserTo[0]['USR_USERNAME'])){
$userTo = $fieldUserTo[0]['USR_USERNAME'];
}
$dataRoutes .='
<Activity Id="'.$idEvent.'" Name="'.$description.'">
<Description>'.$description.'</Description>
<Event>
<IntermediateEvent Trigger="Message" Implementation="Other">
<TriggerResultMessage CatchThrow="THROW">
<Message Id="'.$idEvent.'" From="'.$userFrom.'" To="'.$userTo.'" Name="'.$description.'">
</Message>
</TriggerResultMessage>
</IntermediateEvent>
</Event>
<Documentation>'.$description.'</Documentation>
<ExtendedAttributes />
<NodeGraphicsInfos>
<NodeGraphicsInfo ToolId="BizAgi_Process_Modeler" Height="30" Width="30" BorderColor="-6909623" FillColor="-66833">
<Coordinates XCoordinate="'.$coordinateX.'" YCoordinate="'.$coordinateY.'" />
</NodeGraphicsInfo>
</NodeGraphicsInfos>
<IsForCompensationSpecified>false</IsForCompensationSpecified>
</Activity>';
$transitions.='
<Transition Id="t'.$idEvent.'" From="'.$idTask.'" To="'.$idEvent.'" Name="">
<Condition />
<Description />
<ExtendedAttributes />
<ConnectorGraphicsInfos>
<ConnectorGraphicsInfo ToolId="Processmaker" BorderColor="0" FromPort="4" ToPort="3">
</ConnectorGraphicsInfo>
</ConnectorGraphicsInfos>
</Transition>';
}
}
}
}
}
}
$data = array();
$data['ACTIVITIES'] = $dataRoutes;
$data['TRANSITION'] = $transitions;
return $data;
}
/**
* Get the process Data from a filename .XPDL
* @param array $pmFilename
* @return void
*/
function getProcessDataXpdl ( $pmFilename )
{
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 continue. '));
clearstatcache();
$idProcess = 0;
$nameProcess = '';
$sw = 0;
$file = new DOMDocument();
@$file->load($pmFilename, LIBXML_DTDLOAD);
$root = $file->documentElement;
$node = $root->firstChild;
$numberTasks = 0;
$numberLanes = 0;
$endArray = array();
$posEnd = 0;
$startArray = array();
$posStart = 0;
$isEnd = 0;
$isStart = 0;
$posRoutes = 0;
$sequencial = 0;
$posT = 0;
$output = '';
$arrayRoutes = array();
$arrayLanes = array();
$routeTransitions = array ();
$start = 0;
$end = 0;
$arrayScheduler = array();
$arrayMessages = array();
while ($node) {
if ($node->nodeType == XML_ELEMENT_NODE) {
$name = $node->nodeName;
$content = $node->firstChild;
if($content != array()){
$output = $content->nodeValue;
}
if(strpos($name,'Pools')!== false){
while ($content) {
if ($content->nodeType == XML_ELEMENT_NODE) {
$nameChild = $content->nodeName;
$contentChild = $content->firstChild;
if(strpos($nameChild,'Pool')!== false){
$namePool = $content->getAttribute('Name');
$idPool = str_replace('-','',$content->getAttribute('Process'));
$process['ID'] = $idPool;
$process['NAME']= $namePool;
$process['DESCRIPTION'] = '';
$oData->process = $this->createProcess($process);
}
}
$content = $content->nextSibling;
}
}
if(strpos($name,'Artifacts')!== false){
while ($content) {
if ($content->nodeType == XML_ELEMENT_NODE) {
$nameChild = $content->nodeName;
$contentChild = $content->firstChild;
$idActivity = '';
if(strpos($nameChild,'Artifact')!== false){
$artifactType = $content->getAttribute('ArtifactType');
if($artifactType == 'Annotation'){
$textAnnotation = $content->getAttribute('TextAnnotation');
$idAnnotation = str_replace('-','',$content->getAttribute('Id'));
$idActivity = str_replace('-','',$content->getAttribute('ActivitySetId'));
$lanes = $this->findCoordinates($contentChild);
$lanes['TEXT'] = $textAnnotation;
$lanes['ID_PROCESS'] = $idPool;
$lanes['ID_LANE'] = $idAnnotation;
if($idActivity != ''){
$lanes['ID_PROCESS'] = $idActivity;
}
$arrayLanes[$numberLanes] = $this->createLanes($lanes);
$numberLanes = $numberLanes +1;
}
}
}
$content = $content->nextSibling;
}
}
if(strpos($name,'WorkflowProcesses')!== false){
while ($content) {
if ($content->nodeType == XML_ELEMENT_NODE) {
$nameChild = $content->nodeName;
$contentChild = $content->firstChild;
if(strpos($nameChild,'WorkflowProcess')!== false){
$nameWorkflow = $content->getAttribute('Name');
$idProcess = $content->getAttribute('Id');
$idProcess = trim(str_replace('-','',$idProcess));
$subProcesses = array();
if($nameWorkflow == $namePool and $idProcess == $idPool){
$idWorkflow = $idProcess;
while ($contentChild) {
if ($contentChild->nodeType == XML_ELEMENT_NODE){
$nameNode = $contentChild->nodeName;
$contentNode = $contentChild->firstChild;
if(strpos($nameNode,'ActivitySets')!== false){
$activitySet = $this->createSubProcesses($contentNode,$arrayLanes);
$subProcesses = $activitySet['SUB_PROCESS'];
$arraySubProcesses = $activitySet['SUBPROCESSES'];
}
if(strpos($nameNode,'Activities')!== false){
$activities = $this->createActivities($contentNode,$idProcess,$subProcesses);
$oData->tasks = $activities['TASKS'];
$startArray = $activities['START'];
$endArray = $activities['END'];
$arrayRoutes = $activities['ROUTES'];
$arrayScheduler = $activities['SCHEDULER'];
$arrayMessages = $activities['MESSAGES'];
}
if(strpos($nameNode,'Transitions')!== false){
$transitions = $this->createTransitions($contentNode,$oData->tasks,$arrayRoutes,$endArray,$startArray,$idProcess,$arrayScheduler,$arrayMessages);
$oData->routes = $transitions['ROUTES'];
$oData->tasks = $transitions['TASKS'];
$routeTransitions = $transitions['TRANSITIONS'];
$numberRoutes = $transitions['NUMBER'];
$taskHidden = $transitions['TASKHIDDEN'];
$arrayScheduler = $transitions['SCHEDULER'];
$arrayMessages = $transitions['MESSAGES'];
}
}
$contentChild = $contentChild->nextSibling;
}
}
}
}
$content = $content->nextSibling;
}
}
}
$node = $node->nextSibling;
}
$oData->lanes = array();
$numberLanes = 0;
foreach($arrayLanes as $key => $value) {
if($value['PRO_UID'] == $idProcess){
$oData->lanes[$numberLanes] = $value;
$numberLanes = $numberLanes + 1;
}
}
$oData->inputs = array();
$oData->outputs = array();
$oData->dynaforms = array();
$oData->steps = array();
$oData->taskusers = array();
$oData->groupwfs = $this->getGroupwfRows( $oData->taskusers );
$oData->steptriggers = array();
$oData->dbconnections = array();
$oData->reportTables = array();
$oData->reportTablesVars = array();
$oData->stepSupervisor = array();
$oData->objectPermissions = array();
$oData->subProcess = array();
$numberSubProcess = 0;
$arraySubProcess = $subProcesses;
$numberSubProcess = isset($arraySubProcesses) && is_array($arraySubProcesses) ? sizeof($arraySubProcesses) : 0;
$numberCount = 0;
foreach($subProcesses as $key => $value) {
foreach($oData->tasks as $keyTask => $valueTask) {
if($value['ID_PROCESS'] == $valueTask['TAS_UID']){
$fields['TASK_PARENT'] = $valueTask['TAS_UID'];
$idSubProcess = $valueTask['TAS_UID'];
$findTask = 0;
$newTasks = $this->getTaskRows($idSubProcess);
foreach ($newTasks as $keyLane => $val ) {
if($val['TAS_START']==='TRUE' and $findTask == 0){
$findTask = 1;
$value['TASK_START']=$val['TAS_UID'];
}
}
$fields['PROCESS_PARENT']= $idProcess;
$fields['TAS_UID']= $value['TASK_START'];
$oData->subProcess[$numberSubProcess]= $this->createSubProcess($fields,$arraySubProcess);
$numberSubProcess = $numberSubProcess + 1;
}
}
}
$oData->caseTracker = array();
$oData->caseTrackerObject = array();
$oData->stage = array();
$oData->fieldCondition = array();
$oData->event = $this->createEventMessages($arrayMessages,$idProcess);
$oData->triggers = array();
$oData->caseScheduler = $this->createScheduler($arrayScheduler,$idProcess);
$oData->dynaformFiles = array();
$numberTransitions=sizeof($routeTransitions);
if($numberTransitions > 0){
$routesArray = $this->createGateways($routeTransitions,$endArray,$oData->routes,$numberRoutes,$idProcess,$taskHidden);
$oData->routes = $routesArray;
}
//print_r($oData);die;
//print_r($arrayMessages);die;
return $oData;
}
/**
* This function sort a array
* @param array $fields
* @return array sorted
*/
function sortArray($fields)
{
$aux = $fields ;
foreach ($fields as $key => $row) {
$aux[$key] = $row['FROM'];
}
array_multisort($aux,SORT_ASC,$fields);
return $fields;
}
/**
* This functions verify the routes and removes the routes that are repeated
* @param array $routeTransitions
* @param array $endArray
* @return array
*/
function verifyRoutes ($routeTransitions,$endArray,$taskHidden)
{ $findFirst = 0;
$firstRoute = '';
$taskTo = '';
$taskFrom = '';
$routeArrayT = $routeTransitions;
$findHidden = 0;
foreach ($routeTransitions as $valRoute => $value){
$findHidden = 0;
if($value['ROUTE'] == $firstRoute){
if($value['TOORFROM'] == 'TO'){
$taskFrom = $value['FROM'];
}
if($value['TOORFROM'] == 'FROM'){
$taskTo = $value['TO'];
}
if($taskFrom != ''){
foreach ($routeArrayT as $valRoutes => $values){
$isEventEnd = 0;
foreach ($endArray as $endBase => $valueEnd){
if($valueEnd==$values['TO']){
$isEventEnd = 1;
}
}
if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] != $value['ROUTE'] and $isEventEnd == 0 and $findHidden == 0){
$taskFrom = $values['TO'];
}
else{
if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] == $value['ROUTE'] and $isEventEnd == 0){
foreach ($taskHidden as $idHidden => $valueHidden){
if($valueHidden['ID_TASK'] == $values['TO']){
$taskFrom = $valueHidden['ID_TASK'];
$findHidden= 1;
}
}
}
}
}
$routeTransitions[$valRoute]['TO']=$taskFrom;
$taskFrom = '';
}
if($taskTo != ''){
foreach ($routeArrayT as $valRoutes => $values){
if($values['ROUTE'] == $value['ROUTE'] and $values['FROM'] != $value['ROUTE'] and $findHidden == 0 ){
$taskTo = $values['FROM'];
}
}
$routeTransitions[$valRoute]['FROM']=$taskTo;
$taskTo = '';
}
}
else{
$firstRoute = $value['ROUTE'];
$taskToE = '';
$taskFromE = '';
if($value['TOORFROM'] == 'TO'){
$taskFromE = $value['FROM'];
}
if($value['TOORFROM'] == 'FROM'){
$taskToE = $value['TO'];
}
if($taskFromE != ''){
$findHidden = 0;
foreach ($routeArrayT as $valRoutes => $values){
$isEventEnd = 0;
foreach ($endArray as $endBase => $valueEnd){
if($valueEnd==$values['TO']){
$isEventEnd = 1;
}
}
if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] != $value['ROUTE'] and $isEventEnd == 0 and $findHidden == 0){
$taskFromE = $values['TO'];
}
else{
if($values['ROUTE'] == $value['ROUTE'] and $values['TO'] == $value['ROUTE'] and $isEventEnd == 0){
foreach ($taskHidden as $idHidden => $valueHidden){
if($valueHidden['ID_TASK'] == $values['TO']){
$taskFromE = $valueHidden['ID_TASK'];
$findHidden = 1;
}
}
}
}
}
$routeTransitions[$valRoute]['TO']=$taskFromE;
$taskFromE = '';
}
if($taskToE != ''){
foreach ($routeArrayT as $valRoutes => $values){
if($values['ROUTE'] == $value['ROUTE'] and $values['FROM'] != $value['ROUTE'] and $findHidden == 0){
$taskToE = $values['FROM'];
}
}
$routeTransitions[$valRoute]['FROM']=$taskToE;
$taskToE = '';
}
}
}
$firstRoute = 0;
$cont = 0;
$routeChange = $routeTransitions;
foreach ($routeTransitions as $valRoutes => $value){
$route = $value['ROUTE'];
$type = $value['ROU_TYPE'];
$countFrom = 0;
$countTo = 0;
foreach ($routeChange as $valRoutes2 => $values){
if($value['ROUTE'] == $values['ROUTE'] and $values['TOORFROM'] == 'TO'){
$countTo = $countTo + 1;
}
if($value['ROUTE'] == $values['ROUTE'] and $values['TOORFROM'] == 'FROM'){
$countFrom = $countFrom + 1;
}
}
if($type == 'PARALLEL'){
if($countTo > $countFrom){
$routeTransitions[$valRoutes]['ROU_TYPE'] = 'SEC-JOIN';
}
}
}
$routeArrayT2 = $routeTransitions;
$routeArrayT1 = $routeTransitions;
foreach ($routeArrayT1 as $valRoutes => $value){
if($firstRoute == 0){
$taskFirst = $value['ROUTE'];
}
if($taskFirst == $value['ROUTE']){
if($firstRoute == 0){
foreach ($routeArrayT2 as $valRoutes2 => $values){
if($values['ROUTE'] == $taskFirst and $values['FROM'] == $value['FROM'] and $values['TO'] == $value['TO'] and $values['ID'] != $value['ID']){
unset($routeArrayT2[$valRoutes2]);
$firstRoute = 1;
}
}
}
}
else{
$firstRoute = 0;
}
}
return $routeArrayT2;
}
/**
* this function creates an array for the process that will be created according to the data given in an array
* @param array $fields
* @return array $process
*/
function createProcess($fields)
{ $process = array();
$process['PRO_UID'] = $fields['ID'];
$process['PRO_PARENT'] = $fields['ID'];
$process['PRO_TIME'] = 1;
$process['PRO_TIMEUNIT'] = 'DAYS';
$process['PRO_STATUS'] = 'ACTIVE';
$process['PRO_TYPE_DAY'] = '';
$process['PRO_TYPE'] = 'NORMAL';
$process['PRO_ASSIGNMENT'] = 'FALSE';
$process['PRO_SHOW_MAP'] = 0;
$process['PRO_SHOW_MESSAGE'] = 0;
$process['PRO_SHOW_DELEGATE'] = 0;
$process['PRO_SHOW_DYNAFORM'] = 0;
$process['PRO_CATEGORY'] = '';
$process['PRO_SUB_CATEGORY'] = '';
$process['PRO_INDUSTRY'] = 0;
$process['PRO_UPDATE_DATE'] = date("D M j G:i:s T Y");
$process['PRO_CREATE_DATE'] = date("D M j G:i:s T Y");
$process['PRO_CREATE_USER'] = 00000000000000000000000000000001;
$process['PRO_HEIGHT'] = 5000;
$process['PRO_WIDTH'] = 10000;
$process['PRO_TITLE_X'] = 0;
$process['PRO_TITLE_Y'] = 0;
$process['PRO_DEBUG'] = 0;
$process['PRO_TITLE'] = $fields['NAME'];
$process['PRO_DESCRIPTION'] = $fields['DESCRIPTION'];
return $process;
}
/**
* this function creates an array for the subProcess that will be created,according to the data given in an array
* @param array $contentNode
* @param array $arrayLanes
* @return array
*/
function createSubProcesses($contentNode,$arrayLanes)
{ $activities = array();
$numberActivities = 0;
$numberLanes = 0;
$number = 0;
$contentSubNode = $contentNode;
$numberSub = 0;
while ($contentSubNode){
if ($contentSubNode->nodeType == XML_ELEMENT_NODE){
$nameActivity = $contentSubNode->nodeName;
$contentActivity = $contentSubNode->firstChild;
if(strpos($nameActivity,'ActivitySet')!== false){
$idSetActivity = str_replace('-','',$contentSubNode->getAttribute('Id'));
$arrayActivity[$number]['ID_PROCESS']= $idSetActivity;
$number = $number + 1;
}
}
$contentSubNode = $contentSubNode->nextSibling;
}
$number = 0;
$arraySubProcesses = array();
while ($contentNode){
if ($contentNode->nodeType == XML_ELEMENT_NODE){
$isSubProcess = 0;
$nameActivity = $contentNode->nodeName;
$contentActivity = $contentNode->firstChild;
$idSetActivity = 0;
if(strpos($nameActivity,'ActivitySet')!== false){
$idSetActivity = str_replace('-','',$contentNode->getAttribute('Id'));
if($idSetActivity !== 0){
$isSubProcess = 1;
}
$nameSetActivity = $contentNode->getAttribute('Name');
$contentChild = $contentNode->firstChild;
$process['ID'] = $idSetActivity;
$process['NAME'] = $nameSetActivity;
$process['DESCRIPTION'] = '';
$subProcess->process = $this->createProcess($process);
$activities[$number]['ID_PROCESS']= $idSetActivity ;
while ($contentChild){
if ($contentChild->nodeType == XML_ELEMENT_NODE){
$nameChild = $contentChild->nodeName;
$contentFirst = $contentChild->firstChild;
if(strpos($nameChild,'Activities')!== false){
$arrayActivities = $this->createActivities($contentFirst,$idSetActivity,$arrayActivity);
$subProcess->tasks = $arrayActivities['TASKS'];
$startArray = $arrayActivities['START'];
$endArray = $arrayActivities['END'];
$arrayRoutes = $arrayActivities['ROUTES'];
$arrayScheduler = $arrayActivities['SCHEDULER'];
$arrayMessages = $arrayActivities['MESSAGES'];
}
if(strpos($nameChild,'Transitions')!== false){
$transitions = $this->createTransitions($contentFirst,$subProcess->tasks,$arrayRoutes,$endArray,$startArray,$idSetActivity,$arrayScheduler,$arrayMessages);
$subProcess->routes = $transitions['ROUTES'];
$subProcess->tasks = $transitions['TASKS'];
$routeTransitions = $transitions['TRANSITIONS'];
$numberRoutes = $transitions['NUMBER'];
$arrayMessages = $transitions['MESSAGES'];
}
}
$contentChild = $contentChild->nextSibling;
}
$values = $subProcess;
if($isSubProcess == 1){
$arraySubProcesses[$numberSub]['ID_PROCESS']=$idSetActivity ;
$arraySubProcesses[$numberSub]['TASKS'] =$subProcess->tasks;
$numberSub = $numberSub+1;
}
$activities[$number]['TASK_START']= $startArray[0]['ID_TASK'];
$number = $number + 1;
$subProcess->lanes = array();
$numberLanes = 0;
foreach($arrayLanes as $key => $value) {
if($value['PRO_UID'] ==$idSetActivity){
$subProcess->lanes[$numberLanes] = $value;
$numberLanes = $numberLanes + 1;
}
}
$subProcess->inputs = array();
$subProcess->outputs = array();
$subProcess->dynaforms = array();
$subProcess->steps = array();
$subProcess->triggers = array();
$subProcess->taskusers = array();
$subProcess->groupwfs = $this->getGroupwfRows($subProcess->taskusers );
$subProcess->steptriggers = array();
$subProcess->dbconnections = array();
$subProcess->reportTables = array();
$subProcess->reportTablesVars = array();
$subProcess->stepSupervisor = array();
$subProcess->objectPermissions = array();
$subProcess->subProcess = array();
$subProcess->caseTracker = array();
$subProcess->caseTrackerObject = array();
$subProcess->stage = array();
$subProcess->fieldCondition = array();
$subProcess->event = array();
$subProcess->caseScheduler = array();
$subProcess->dynaformFiles = array();
$numberTransitions = sizeof($routeTransitions);
if($numberTransitions > 0){
$routesArray = $this->createGateways($routeTransitions,$endArray,$subProcess->routes,$numberRoutes,$idProcess,'');
$subProcess->routes = $routesArray;
}
$numberSubProcess = 0;
foreach($subProcess->tasks as $key => $value) {
if($value['TAS_TYPE'] === 'SUBPROCESS'){
$fields['TASK_PARENT'] = $value['TAS_UID'];
$idSubProcess = $value['TAS_UID'];
$newTasks = $this->getTaskRows($idSubProcess);
$findTask = 0;
foreach ($newTasks as $keyLane => $val ) {
if($val['TAS_START']==='TRUE' and $findTask == 0){
$findTask = 1;
$value['TASK_START']=$val['TAS_UID'];
}
}
$fields['PROCESS_PARENT'] = $idSetActivity;
$fields['TAS_UID'] = $value['TAS_UID'];
$subProcess->subProcess[$numberSubProcess]= $this->createSubProcess($fields,$arrayActivity);
$numberSubProcess = $numberSubProcess + 1;
}
}
$this->createSubProcessFromDataXpdl($subProcess,$subProcess->tasks);
}
}
$contentNode = $contentNode->nextSibling;
}
$arrayActivities['SUBPROCESSES'] = $arraySubProcesses;
$arrayActivities['SUB_PROCESS'] = $activities;
return $arrayActivities;
}
/**
* This function creates an array for the task that will be created according to the data given in an array
* @param array $fields
* @return array $task
*/
function createTask($fields)
{
$task = array();
$task['PRO_UID'] = $fields['ID_PROCESS'];
$task['TAS_UID'] = $fields['ID_TASK'];
$task['TAS_TYPE'] = $fields['TASK_TYPE'];
$task['TAS_DURATION'] = 1;
$task['TAS_DELAY_TYPE'] ='';
$task['TAS_TEMPORIZER'] = 0;
$task['TAS_TYPE_DAY'] ='' ;
$task['TAS_TIMEUNIT'] = 'DAYS';
$task['TAS_ALERT'] = 'FALSE';
$task['TAS_PRIORITY_VARIABLE'] = '@@SYS_CASE_PRIORITY';
$task['TAS_ASSIGN_TYPE'] = 'BALANCED';
$task['TAS_ASSIGN_VARIABLE'] = '@@SYS_NEXT_USER_TO_BE_ASSIGNED';
$task['TAS_ASSIGN_LOCATION'] = 'FALSE';
$task['TAS_ASSIGN_LOCATION_ADHOC']= 'FALSE';
$task['TAS_TRANSFER_FLY'] = 'FALSE';
$task['TAS_LAST_ASSIGNED'] = '00000000000000000000000000000001';
$task['TAS_USER'] = '0';
$task['TAS_CAN_UPLOAD'] = 'FALSE';
$task['TAS_VIEW_UPLOAD'] = 'FALSE';
$task['TAS_VIEW_ADDITIONAL_DOCUMENTATION']= 'FALSE';
$task['TAS_CAN_CANCEL'] = 'FALSE';
$task['TAS_OWNER_APP'] = 'FALSE';
$task['STG_UID'] = '';
$task['TAS_CAN_PAUSE'] = 'FALSE';
$task['TAS_CAN_SEND_MESSAGE'] = 'TRUE';
$task['TAS_CAN_DELETE_DOCS'] = 'FALSE';
$task['TAS_SELF_SERVICE'] = 'FALSE';
$task['TAS_START'] = 'FALSE';
$task['TAS_TO_LAST_USER'] = 'FALSE';
$task['TAS_SEND_LAST_EMAIL'] = 'FALSE';
$task['TAS_DERIVATION'] = 'NORMAL';
$task['TAS_POSX'] = $fields['X'];
$task['TAS_POSY'] = $fields['Y'];
$task['TAS_COLOR'] = '';
$task['TAS_DEF_MESSAGE'] = '';
$task['TAS_DEF_PROC_CODE'] = '';
$task['TAS_DEF_DESCRIPTION'] = '';
$task['TAS_TITLE'] = $fields['TAS_TITLE'];
$task['TAS_DESCRIPTION'] = $fields['DESCRIPTION'];
$task['TAS_DEF_TITLE'] = '';
return $task;
}
function createDataTask($fields)
{
$task = array();
$task['PRO_UID'] = $fields['ID_PROCESS'];
$task['TAS_UID'] = $fields['ID_TASK'];
$task['TAS_TYPE'] = $fields['TAS_TYPE'];
$task['TAS_DURATION'] = 1;
$task['TAS_DELAY_TYPE'] ='';
$task['TAS_TEMPORIZER'] = 0;
$task['TAS_TYPE_DAY'] ='' ;
$task['TAS_TIMEUNIT'] = 'DAYS';
$task['TAS_ALERT'] = 'FALSE';
$task['TAS_PRIORITY_VARIABLE'] = '@@SYS_CASE_PRIORITY';
$task['TAS_ASSIGN_TYPE'] = 'BALANCED';
$task['TAS_ASSIGN_VARIABLE'] = '@@SYS_NEXT_USER_TO_BE_ASSIGNED';
$task['TAS_MI_INSTANCE_VARIABLE'] = '@@SYS_VAR_TOTAL_INSTANCE';
$task['TAS_MI_COMPLETE_VARIABLE'] = '@@SYS_VAR_TOTAL_INSTANCES_COMPLETE';
$task['TAS_ASSIGN_LOCATION'] = 'FALSE';
$task['TAS_ASSIGN_LOCATION_ADHOC']= 'FALSE';
$task['TAS_TRANSFER_FLY'] = 'FALSE';
$task['TAS_LAST_ASSIGNED'] = '00000000000000000000000000000001';
$task['TAS_USER'] = '0';
$task['TAS_CAN_UPLOAD'] = 'FALSE';
$task['TAS_VIEW_UPLOAD'] = 'FALSE';
$task['TAS_VIEW_ADDITIONAL_DOCUMENTATION']= 'FALSE';
$task['TAS_CAN_CANCEL'] = 'FALSE';
$task['TAS_OWNER_APP'] = 'FALSE';
$task['STG_UID'] = '';
$task['TAS_CAN_PAUSE'] = 'FALSE';
$task['TAS_CAN_SEND_MESSAGE'] = 'TRUE';
$task['TAS_CAN_DELETE_DOCS'] = 'FALSE';
$task['TAS_SELF_SERVICE'] = 'FALSE';
$task['TAS_START'] = $fields['START'];
$task['TAS_TO_LAST_USER'] = 'FALSE';
$task['TAS_SEND_LAST_EMAIL'] = 'FALSE';
$task['TAS_DERIVATION'] = 'NORMAL';
$task['TAS_POSX'] = $fields['X'];
$task['TAS_POSY'] = $fields['Y'];
$task['TAS_COLOR'] = '';
$task['TAS_DEF_MESSAGE'] = '';
$task['TAS_DEF_PROC_CODE'] = '';
$task['TAS_DEF_DESCRIPTION'] = '';
$task['TAS_TITLE'] = $fields['TAS_TITLE'];
$task['TAS_DESCRIPTION'] = $fields['DESCRIPTION'];
$task['TAS_DEF_TITLE'] = '';
return $task;
}
/**
* This function creates an array for the route that will be created according to the data given in an array
* @param array $fields
* @return array $route
*/
function createRoute($fields)
{
$route = array();
$route['ROU_UID'] = $fields['ROU_UID'];
$route['ROU_PARENT'] = 0;
$route['PRO_UID'] = $fields['ID_PROCESS'];
$route['TAS_UID'] = $fields['FROM'];
$route['ROU_NEXT_TASK'] = $fields['TO'];
$route['ROU_CASE'] = 1;
$route['ROU_TYPE'] = 'SEQUENTIAL';
$route['ROU_CONDITION'] = '' ;
$route['ROU_TO_LAST_USER'] = 'FALSE';
$route['ROU_OPTIONAL'] = 'FALSE';
$route['ROU_SEND_EMAIL'] = 'TRUE';
$route['ROU_SOURCEANCHOR'] = 1;
$route['ROU_TARGETANCHOR'] = 0;
return $route;
}
/**
* This function creates an array for the subProcess that will be created according to the data given in an array
* @param array $fields
* @return array $route
*/
function createSubProcess($fields)
{
$subProcess = array();
$subProcess['SP_UID'] = $fields['TAS_UID'];
$subProcess['PRO_UID'] = $fields['TASK_PARENT'];
$subProcess['TAS_UID'] = $fields['TAS_UID'];
$subProcess['PRO_PARENT'] = $fields['PROCESS_PARENT'];
$subProcess['TAS_PARENT'] = $fields['TASK_PARENT'];
$subProcess['SP_TYPE'] = 'SIMPLE';
$subProcess['SP_SYNCHRONOUS'] = 0;
$subProcess['SP_SYNCHRONOUS_TYPE'] = 'ALL' ;
$subProcess['SP_SYNCHRONOUS_WAIT'] = 0;
$subProcess['SP_VARIABLES_OUT'] = 'a:1:{s:0:"";s:0:"";}';
$subProcess['SP_VARIABLES_IN'] = 'a:1:{s:0:"";s:0:"";}';
$subProcess['SP_GRID_IN'] = '';
return $subProcess;
}
/**
* This function creates an array for the routes that are not sequential that will be created according to the data given in an array
* @param array $routeTransitions
* @param array $endArray
* @param array $dataRoutes
* @param array $numberRoutes
* @param string $idProcess
* @return array $dataRoutes
*/
function createGateways($routeTransitions,$endArray,$dataRoutes,$numberRoutes,$idProcess,$taskHidden)
{
$valueCase = '';
$value = 1;
$valueC = 1;
$aux = $routeTransitions;
foreach ($routeTransitions as $key => $row) {
$aux[$key] = $row['ROUTE'];
}
array_multisort($aux,SORT_ASC,$routeTransitions);
$routeArray = $this->verifyRoutes($routeTransitions,$endArray,$taskHidden);
$routeArray = $this->sortArray($routeArray);
foreach($routeArray as $valRoutes => $value){
$isEventEnd = 0;
foreach ($endArray as $endBase => $valueEnd){
if($valueEnd['ID_TASK']==$value['TO']){
$isEventEnd = 1;
}
}
$dataRoutes[$numberRoutes]= array();
$dataRoutes[$numberRoutes]['ROU_UID'] = $value['ID'];
$dataRoutes[$numberRoutes]['ROU_PARENT'] = 0;
$dataRoutes[$numberRoutes]['PRO_UID'] = $idProcess;
$dataRoutes[$numberRoutes]['TAS_UID'] = $value['FROM'];
if($isEventEnd == 0){
$dataRoutes[$numberRoutes]['ROU_NEXT_TASK'] = $value['TO'];
}
else{
$dataRoutes[$numberRoutes]['ROU_NEXT_TASK'] = '-1';
}
if($valueCase == $value['FROM']){
$valueC = $valueC + 1;
}
else{
$valueC = 1;
$valueCase = $value['FROM'];
}
if($valueCase == ''){
$valueC = 1;
$valueCase = $value['FROM'];
}
$dataRoutes[$numberRoutes]['ROU_CASE'] = $valueC;
$dataRoutes[$numberRoutes]['ROU_TYPE'] = $value['ROU_TYPE'];
if($value['ROU_TYPE'] ==='DISCRIMINATOR'){
$dataRoutes[$numberRoutes]['ROU_CONDITION'] = $value['CONDITION_DIS'];
$dataRoutes[$numberRoutes]['ROU_OPTIONAL'] = $value['TYPE_DIS'];
}
if($value['ROU_TYPE'] !=='DISCRIMINATOR'){
$dataRoutes[$numberRoutes]['ROU_CONDITION'] = $value['CONDITION'];
$dataRoutes[$numberRoutes]['ROU_OPTIONAL'] = 'FALSE';
}
$dataRoutes[$numberRoutes]['ROU_TO_LAST_USER'] = 'FALSE';
$dataRoutes[$numberRoutes]['ROU_SEND_EMAIL'] = 'TRUE';
$dataRoutes[$numberRoutes]['ROU_SOURCEANCHOR'] = 1;
$dataRoutes[$numberRoutes]['ROU_TARGETANCHOR'] = 0;
$numberRoutes = $numberRoutes + 1;
}
return $dataRoutes;
}
/**
* This function creates an array for the lane that will be created according to the data given in an array
* @param array $lanes
* @return array $lane
*/
function createLanesPM($array,$idProcess)
{
$arrayLanes = array();
$field = array();
foreach ($array as $key=> $value){
$field['ID_LANE'] = $value['0'];
$field['ID_PROCESS'] = $idProcess;
$field['X'] = $value['2'];
$field['Y'] = $value['3'];
$field['WIDTH'] = $value['4'];
$field['HEIGHT'] = $value['5'];
$field['TEXT'] = $value['6'];
$arrayLanes[]= $this->createLanes($field);
}
return $arrayLanes;
}
/**
* This function creates an array for the lane that will be created according to the data given in an array
* @param array $lanes
* @return array $lane
*/
function createLanes($lanes)
{
$lane = array();
$lane['SWI_UID'] = $lanes['ID_LANE'];
$lane['PRO_UID'] = $lanes['ID_PROCESS'];
$lane['SWI_TYPE'] = 'TEXT';
$lane['SWI_X'] = $lanes['X'];
$lane['SWI_Y'] = $lanes['Y'];
$lane['SWI_TEXT'] = $lanes['TEXT'];
$lane['SWI_WIDTH'] = $lanes['WIDTH'];
$lane['SWI_HEIGHT']= $lanes['HEIGHT'];
return $lane;
}
/**
* This function creates an array for the lane that will be created according to the data given in an array
* @param array $lanes
* @return array $lane
*/
function createLanesNewPM($array)
{
$arrayLanes = array();
$field = array();
foreach ($array as $key=> $value){
if($value['SWI_TYPE'] == 'TEXT')
{
$field['0'] = $value['SWI_UID'];
$field['1'] = $value['SWI_TEXT'];
$field['2'] = $value['SWI_X'];
$field['3'] = $value['SWI_Y'];
$field['4'] = $value['SWI_WIDTH'];
$field['5'] = $value['SWI_HEIGHT'];
$field['6'] = $value['SWI_NEXT_UID'];
$arrayLanes[]= $field;
}
}
return $arrayLanes;
}
/**
* This function creates activities according the content of the node
* @param object $contentNode
* @param string $idProcess
* @param string $ActivitySet
* @return array $result
*/
function createActivities($contentNode,$idProcess,$activitySet)
{
$result = array();
$numberTasks = 0;
$posRoutes = 0;
$posEnd = 0;
$posStart = 0;
$arrayRoutes = array();
$endArray = array();
$endArray = array();
$startArray = array();
$arrayScheduler = array();
$scheduler = array();
$message = array();
$arrayMessages = array();
while ($contentNode){
if ($contentNode->nodeType == XML_ELEMENT_NODE){
$nameActivity = $contentNode->nodeName;
$contentActivity = $contentNode->firstChild;
if(strpos($nameActivity,'Activity')!== false){
$idActivity = $contentNode->getAttribute('Id');
$idActivity = trim(str_replace('-','',$idActivity));
$name = htmlentities($contentNode->getAttribute('Name'));
$result = $this->createActivity($contentActivity);
$result['ID_PROCESS']= $idProcess;
$result['ID_TASK'] = $idActivity;
$result['TAS_TITLE'] = $name;
$result['TASK_TYPE'] = 'NORMAL';
foreach ($activitySet as $key => $value) {
if($value['ID_PROCESS'] ==$idActivity){
$result['TASK_TYPE']= 'SUBPROCESS';
}
}
if($result['EVENT'] =='' and $result['ROUTE'] ==''){
$arrayTasks[$numberTasks]= $this->createTask($result);
$numberTasks = $numberTasks +1;
}
else{
if($result['EVENT'] !='' and $result['TRIGGER']== 'None'){
if($result['EVENT'] =='END'){
$endArray[$posEnd] = $result;
$posEnd = $posEnd+1;
}
if($result['EVENT'] =='START'){
$startArray[$posStart] = $result;
$posStart= $posStart+1;
}
}
else{
if($result['TRIGGER']== 'Timer'){
$scheduler['ID'] = $idActivity;
$scheduler['NAME'] = $name;
if($result['TIME'] == '' or $result['TIME'] == Null){
$scheduler['TIME'] = date("D M j G:i:s T Y");
}
else{
$scheduler['TIME'] = $result['TIME'];
}
$scheduler['TYPE_TIME']= $result['TYPE_TIME'];
$arrayScheduler[] = $scheduler;
}
if($result['TRIGGER']== 'Message'){
$message['ID'] = $idActivity;
$message['NAME'] = $name;
$message['TYPE_MESSAGE'] = $result['MESSAGE'];
$arrayMessages[] = $message;
}
}
if($result['ROUTE'] !=''){
$position = $this->findCoordinates($contentActivity);
$arrayRoutes[$posRoutes]['ID'] = $idActivity;
$arrayRoutes[$posRoutes]['ROUTE'] = $result['ROUTE'];
$arrayRoutes[$posRoutes]['TYPE_DIS'] = $result['TYPE_DISCRIMINATOR'];
$arrayRoutes[$posRoutes]['CONDITION_DIS'] = $result['CONDITION_DISCRIMINATOR'];
$arrayRoutes[$posRoutes]['X'] = $position['X'];
$arrayRoutes[$posRoutes]['Y'] = $position['Y'];
$posRoutes = $posRoutes + 1;
}
}
}
}
$contentNode = $contentNode->nextSibling;
}
$result['TASKS'] = $arrayTasks;
$result['END'] = $endArray;
$result['START'] = $startArray;
$result['ROUTES'] = $arrayRoutes;
$result['SCHEDULER']= $arrayScheduler;
$result['MESSAGES'] = $arrayMessages;
return $result;
}
/**
* This function creates the scheduler
* @param array $fields
* @return array $result
*/
function createEventMessages($fields,$idProcess)
{
$result = array();
$event = array();
$example = new Derivation();
foreach($fields as $key => $value){
$oEvent = new Event();
$event['EVN_UID'] = $value['ID'];
$event['PRO_UID'] = $idProcess;
$event['EVN_RELATED_TO'] = 'SINGLE';
$event['TAS_UID'] = $value['ID_TASK'];
$event['EVN_TAS_ESTIMATED_DURATION'] = '1';
$event['EVN_WHEN_OCCURS'] = 'AFTER';
$event['EVN_STATUS'] = 'ACTIVE';
$event['EVN_WHEN'] = 1;
$event['EVN_MAX_ATTEMPTS'] = 3;
$event['EVN_ACTION'] = 'SEND_MESSAGE';
$event['EVN_DESCRIPTION'] = $value['NAME'];
$event['EVN_WHEN_OCCURS'] = 'AFTER_TIME';
$event['EVN_ACTION_PARAMETERS'] = array(
'SUBJECT' => 'subject',
'TO' => array('0'=>'usr|-1','1'=>'ext|'),
'CC' => array(),
'BCC' => array(),
'TEMPLATE' => 'alert_message.html'
);
$result[] = $event;
}
return $result;
}
/**
* This function creates the scheduler
* @param array $fields
* @return array $result
*/
function createScheduler($fields,$idProcess)
{
$result = array();
$example = new Derivation();
foreach($fields as $key => $value){
if($value['TYPE_TIME'] == 'TimeDate'){
//there is a scheduler one time only
$value['OPTION']= 4;
$result[]= $this->createArrayScheduler($value,$idProcess);
}
if($value['TYPE_TIME'] == 'TimeCycle'){
//we calculated if is daily or monthly, etc
$time = $this->calculateTimeScheduler($value['TIME']);
/*$value['OPTION']= $time['OPTION'];
$value['TIME'] = $time['TIME'];*/
$value['OPTION']= '1';
}
}
//PRINT_r($result);
return $result;
}
/**
* This function creates the scheduler
* @param array $fields
* @return array $result
*/
function calculateTimeScheduler($time)
{
$result = array();
// The split function has been DEPRECATED as of PHP 5.3.0.
// $result = split(' ',$time);
$result = explode(' ', $time);
//print_r($result);
return $result;
}
/**
* This function creates the array scheduler
* @param string $time
* @param string $type (TimeCycle or TimeDate)
* @return array $result
*/
function createArrayScheduler($fields,$idProcess)
{
$result['SCH_UID'] = $fields['ID'];
$result['SCH_DEL_USER_NAME'] = '';
$result['SCH_DEL_USER_PASS'] = '';
$result['SCH_DEL_USER_UID'] = '';
$result['SCH_NAME'] = $fields['NAME'];
$result['PRO_UID'] = $idProcess;
$result['TAS_UID'] = $fields['ID_TASK'];
$result['SCH_TIME_NEXT_RUN'] = $fields['TIME'];
$result['SCH_LAST_RUN_TIME'] = null;
$result['SCH_STATE'] = 'ACTIVE';
$result['SCH_LAST_STATE'] = 'CREATED';
$result['USR_UID'] = '00000000000000000000000000000001';
$result['SCH_OPTION'] = $fields['OPTION'];
$result['SCH_START_TIME'] = $fields['TIME'];
$result['SCH_START_DATE'] = $fields['TIME'];
$result['SCH_DAYS_PERFORM_TASK'] = '';
$result['SCH_EVERY_DAYS'] = '0';
$result['SCH_WEEK_DAYS'] = '0|0|0|0|0|0|0';
$result['SCH_START_DAY'] = '';
$result['SCH_MONTHS'] = '0|0|0|0|0|0|0|0|0|0|0|0';
$result['SCH_END_DATE'] = $fields['TIME'];
$result['SCH_REPEAT_EVERY'] = '';
$result['SCH_REPEAT_UNTIL'] = '';
$result['SCH_REPEAT_STOP_IF_RUNNING'] = '';
return $result;
}
/**
* This function creates transitions according the content of the node
* @param object $contentNode
* @param array $dataTask
* @param array $arrayRoutes
* @param array $endArray
* @param array $startArray
* @param string $idProcess
* @return array $result
*/
function createTransitions($contentNode,$dataTasks,$arrayRoutes,$endArray,$startArray,$idProcess,$schedulerArray,$messages)
{
$numberRoutes = 0;
$posT = 0;
$output = '';
$routeTransitions = array();
$taskHidden = array();
$countHidden = 1;
$dataRoutes = array();
$newFrom = 0;
$isScheduler = 0;
$isMessage = 0;
while ($contentNode){
$isEnd = 0;
$isStart = 0;
$tasks = $dataTasks;
if ($contentNode->nodeType == XML_ELEMENT_NODE){
$nameTransition = $contentNode->nodeName;
$contentTransition = $contentNode->firstChild;
if(strpos($nameTransition,'Transition')!== false){
$idTransition = $contentNode->getAttribute('Id');
$idTransition = trim(str_replace('-','',$idTransition));
$from = trim(str_replace('-','',$contentNode->getAttribute('From')));
$to = trim(str_replace('-','',$contentNode->getAttribute('To')));
$routes['ROU_UID'] = $idTransition;
$routes['ID_PROCESS']= $idProcess;
$routes['FROM'] = $from;
$routes['TO'] = $to;
$isScheduler = 0;
$isMessage = 0;
foreach ($startArray as $startBase => $value){
if($value['ID_TASK']==$from){
foreach($tasks as $tasksValue=> $taskId){
if($to==$taskId['TAS_UID']){
$taskId['TAS_START']='TRUE';
$dataTasks[$tasksValue]['TAS_START']='TRUE';
$isStart = 1;
}
}
}
}
foreach ($schedulerArray as $startBase => $value){
if($value['ID']==$from){
$isScheduler = 1;
$schedulerArray[$startBase]['ID_TASK'] = $to;
foreach($tasks as $tasksValue=> $taskId){
if($to==$taskId['TAS_UID']){
$taskId['TAS_START']='TRUE';
$dataTasks[$tasksValue]['TAS_START']='TRUE';
$isStart = 1;
}
}
}
}
foreach ($messages as $startBase => $value){
if($value['ID']==$from){
$isMessage = 1;
$messages[$startBase]['ID_TASK'] = $to;
}
if($value['ID']==$to){
$isMessage = 1;
$messages[$startBase]['ID_TASK'] = $from;
}
}
$sequencial = 0;
$findRoute = 0;
foreach ($arrayRoutes as $routeBase => $value){
//change for task hidden
if($value['ID']==$from){
if($findRoute == 0){
$typeT = 'FROM';
$valueRoute = $value['ID'];
$typeRoute = $value['ROUTE'];
$sequencial = 1;
$conditionD = $value['CONDITION_DIS'];
$typeD = $value['TYPE_DIS'];
$findRoute = 1;
}
else{
$contendHidden = $contentTransition;
$fieldsXY = $this->findCoordinatesTransition($to,$arrayRoutes);
$hidden['ID_TASK'] = G::generateUniqueID();
$hidden['ID_PROCESS'] = $idProcess;
$hidden['TAS_TITLE'] = '';
$hidden['TASK_TYPE'] = 'HIDDEN';
$hidden['DESCRIPTION'] = $countHidden;
$hidden['X'] = $fieldsXY['X'];
$hidden['Y'] = $fieldsXY['Y'];
$taskHidden[] = $hidden;
$dataTasks[] = $this->createTask($hidden);
$countHidden = $countHidden + 1;
$routeTransitions[$posT]['ID'] = G::generateUniqueID();
$routeTransitions[$posT]['ROUTE'] = $from;
$routeTransitions[$posT]['FROM'] = $from;
$routeTransitions[$posT]['TO'] = $hidden['ID_TASK'];
$routeTransitions[$posT]['TOORFROM'] = 'FROM';
$routeTransitions[$posT]['ROU_TYPE'] = $value['ROUTE'];
$routeTransitions[$posT]['CONDITION'] = $output;
$routeTransitions[$posT]['CONDITION_DIS'] = $conditionD;
$routeTransitions[$posT]['TYPE_DIS'] = $typeD;
$output = '';
$posT = $posT + 1;
$from = $hidden['ID_TASK'];
}
}
if($value['ID']==$to){
if($findRoute == 0){
$typeT = 'TO';
$valueRoute = $value['ID'];
$typeRoute = $value['ROUTE'];
$sequencial = 1;
$conditionD = $value['CONDITION_DIS'];
$typeD = $value['TYPE_DIS'];
$findRoute = 1;
}
else{
$contendHidden = $contentTransition;
$fieldsXY = $this->findCoordinatesTransition($to,$arrayRoutes);
$hidden['ID_TASK'] = G::generateUniqueID();
$hidden['ID_PROCESS'] = $idProcess;
$hidden['TAS_TITLE'] = '';
$hidden['TASK_TYPE'] = 'HIDDEN';
$hidden['DESCRIPTION'] = $countHidden;
$hidden['X'] = $fieldsXY['X'];
$hidden['Y'] = $fieldsXY['Y'];
$taskHidden[] = $hidden;
$dataTasks[] = $this->createTask($hidden);
$countHidden = $countHidden + 1;
$routeTransitions[$posT]['ID'] = G::generateUniqueID();
$routeTransitions[$posT]['ROUTE'] = $from;
$routeTransitions[$posT]['FROM'] = $from;
$routeTransitions[$posT]['TO'] = $hidden['ID_TASK'];
$routeTransitions[$posT]['TOORFROM'] = 'TO';
$routeTransitions[$posT]['ROU_TYPE'] = $typeRoute;
$routeTransitions[$posT]['CONDITION'] = $output;
$routeTransitions[$posT]['CONDITION_DIS'] = $conditionD;
$routeTransitions[$posT]['TYPE_DIS'] = $typeD;
$output = '';
$posT = $posT + 1;
$from = $hidden['ID_TASK'];
$conditionD = $value['CONDITION_DIS'];
$typeRoute = $value['ROUTE'];
$typeT = 'TO';
$valueRoute = $value['ID'];
$sequencial = 1;
$conditionD = $value['CONDITION_DIS'];
$typeD = $value['TYPE_DIS'];
}
}
}
if($sequencial == 0){
foreach ($endArray as $endBase => $value){
if($value['ID_TASK']==$to){
foreach($tasks as $tasksValue=> $taskId){
if($from==$taskId['TAS_UID']){
$routes['TO'] = '-1';
$dataRoutes[$numberRoutes]= $this->createRoute($routes);
$numberRoutes = $numberRoutes +1;
$isEnd = 1;
}
}
}
}
}
if($sequencial == 1){
while ($contentTransition) {
$nameCondition = $contentTransition->nodeName;
$contentCondition = $contentTransition->firstChild;
if(strpos($nameCondition,'Condition')!== false){
while ($contentCondition) {
$nameExpression = $contentCondition->nodeName;
$contentCondition1 = '';
if(strpos($nameExpression,'Expression')!== false){
$contentCondition1 = $contentCondition->firstChild;
if($contentCondition1 != array()){
$output = $contentCondition1->nodeValue;
}
}
$contentCondition = $contentCondition->nextSibling;
}
}
$contentTransition = $contentTransition->nextSibling;
}
$routeTransitions[$posT]['ID'] = $idTransition;
$routeTransitions[$posT]['ROUTE'] = $valueRoute;
$routeTransitions[$posT]['FROM'] = $from;
$routeTransitions[$posT]['TO'] = $to;
$routeTransitions[$posT]['TOORFROM'] = $typeT;
$routeTransitions[$posT]['ROU_TYPE'] = $typeRoute;
$routeTransitions[$posT]['CONDITION'] = $output;
$routeTransitions[$posT]['CONDITION_DIS'] = $conditionD;
$routeTransitions[$posT]['TYPE_DIS'] = $typeD;
$output = '';
$posT = $posT + 1;
$sequencial = 1;
}
if($isEnd==0 and $isStart == 0 and $sequencial == 0 and $isScheduler == 0 and $isMessage == 0){
$dataRoutes[$numberRoutes]= $this->createRoute($routes);
$numberRoutes = $numberRoutes +1;
}
}
}
$contentNode = $contentNode->nextSibling;
}
$routes = $routeTransitions;
foreach($routeTransitions as $key => $id){
$findTo = 0;
$findFrom = 0;
foreach ($dataTasks as $keyHidden => $value){
if($id['FROM']== $value['TAS_UID']){
$findFrom= 1;
}
if($id['TO']== $value['TAS_UID']){
$findTo = 1;
}
}
if($findTo == 0){
foreach($routes as $keyR => $idR){
if($id['TO'] == $idR['ROUTE']){
$routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE'];
$routeTransitions[$key]['ROUTE'] = $id['TO'];
$routeTransitions[$key]['TOORFROM'] = 'TO';
}
}
}
if($findFrom == 0){
foreach($routes as $keyR => $idR){
if($id['FROM'] == $idR['ROUTE']){
$routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE'];
$routeTransitions[$key]['ROUTE'] = $id['FROM'];
$routeTransitions[$key]['TOORFROM'] = 'FROM';
}
}
}
}
$result['ROUTES'] = $dataRoutes;
$result['TRANSITIONS']= $routeTransitions;
$result['TASKS'] = $dataTasks;
$result['NUMBER'] = $numberRoutes;
$result['TASKHIDDEN'] = $taskHidden;
$result['SCHEDULER'] = $schedulerArray;
$result['MESSAGES'] = $messages;
return $result;
}
/**
* this function creates a array according to the data given in a node
* @param object $contentNode
* @return array
*/
function createActivity($contentNode)
{
$coordinates = array();
$event = '';
$typeRoute = '';
$markerVisible = '';
$typePM = '';
$isRoute = 0;
$description = '';
$isSubProcess = 0 ;
$trigger = '';
$time = '';
$typeTime = '';
$isMessage = 0;
while ($contentNode) {
if ($contentNode->nodeType == XML_ELEMENT_NODE) {
$nameChild = $contentNode->nodeName;
$contentChild = $contentNode->firstChild;
if(strpos($nameChild,'Description')!== false){
$description = $contentNode->nodeValue;
}
if(strpos($nameChild,'ExtendedAttributes')!== false){
$result = $this->createExtended($contentChild);
}
if(strpos($nameChild,'BlockActivity')!== false){
$isSubProcess = 1;
$idSubProcess = trim(str_replace('-','',$contentNode->getAttribute('ActivitySetId')));
}
if(strpos($nameChild,'Event')!== false){
while ($contentChild) {
if ($contentChild->nodeType == XML_ELEMENT_NODE) {
$nameInfo = $contentChild->nodeName;
$contentInfo = $contentChild->firstChild;
if(strpos($nameInfo,'StartEvent')!== false){
$event = 'START';
$trigger = $contentChild->getAttribute('Trigger');
}
if(strpos($nameInfo,'EndEvent')!== false){
$event = 'END';
$trigger = $contentChild->getAttribute('Trigger');
if($trigger == ''){
$trigger = 'None';
}
}
if(strpos($nameInfo,'IntermediateEvent')!== false){
$event = 'INTERMEDIATE';
$trigger = $contentChild->getAttribute('Trigger');
}
}
$contentChild = $contentChild->nextSibling;
}
if($trigger != 'None'){
if($trigger == 'Timer'){
while ($contentInfo) {
$nameTrigger = $contentInfo->nodeName;
$contentTrigger = $contentInfo->firstChild;
if(strpos($nameTrigger,'TriggerTimer')!== false){
$time = $contentInfo->getAttribute('TimeCycle');
$typeTime = 'TimeCycle';
if($time == ''){
$time = $contentInfo->getAttribute('TimeDate');
$typeTime = 'TimeDate';
}
}
$contentInfo = $contentInfo->nextSibling;
}
}
if($trigger == 'Message'){
$typeMessage = '';
$isMessage = 1;
while ($contentInfo) {
$nameTrigger = $contentInfo->nodeName;
$contentTrigger = $contentInfo->firstChild;
if(strpos($nameTrigger,'TriggerResultMessage')!== false){
$typeMessage = $contentInfo->getAttribute('CatchThrow');
}
$contentInfo = $contentInfo->nextSibling;
}
}
}
}
if(strpos($nameChild,'Route')!== false){
$typePM = '';
$typeRoute = $contentNode->getAttribute('GatewayType');
$markerVisible = $contentNode->getAttribute('MarkerVisible');
if($markerVisible !=''){
$coordinates['ROUTE'] = $markerVisible;
}
if($typeRoute !=''){
$coordinates['ROUTE'] = $typeRoute;
}
if($typeRoute =='' and $markerVisible ==''){
$coordinates['ROUTE'] = 'EVALUATE';
}
switch($coordinates['ROUTE']){
case 'AND':
$typePM = 'PARALLEL';
break;
case 'true':
$typePM = 'EVALUATE';
break;
case 'EVALUATE':
$typePM = 'EVALUATE';
break;
case 'OR':
$typePM = 'PARALLEL-BY-EVALUATION';
break;
case 'Complex':
$typePM = 'DISCRIMINATOR';
break;
}
$isRoute = 1;
}
if(strpos($nameChild,'NodeGraphicsInfos')!== false){
$coordinates = $this->findCoordinates($contentNode);
$coordinates['EVENT'] = $event;
$coordinates['TRIGGER'] = $trigger;
$coordinates['TIME'] = $time;
$coordinates['TYPE_TIME'] = $typeTime;
$coordinates['DESCRIPTION'] = $description;
$coordinates['TYPE_DISCRIMINATOR'] = $result['TYPE'];
$coordinates['CONDITION_DISCRIMINATOR'] = $result['CONDITION'];
if($isRoute == 1){
$coordinates['ROUTE']= $typePM;
}
else{
$coordinates['ROUTE']='';
}
if($isMessage == 1){
$coordinates['MESSAGE']= $typeMessage;
}
else{
$coordinates['MESSAGE']='';
}
}
}
$contentNode = $contentNode->nextSibling;
}
return $coordinates;
}
/**
* This function return the type and the condition of a discriminator
* @param object $contentNode
* @return array
*/
function createExtended($contentNode)
{
$result = array();
$result['TYPE']= '';
$result['CONDITION'] = '';
$contentExtended = $contentNode;
while ($contentExtended) {
if ($contentExtended->nodeType == XML_ELEMENT_NODE) {
$nameChildExtended = $contentExtended->nodeName;
$contentChildExtended = $contentExtended->firstChild;
if(strpos($nameChildExtended,'ExtendedAttribute')!== false){
$name = $contentExtended->getAttribute('Name');
if($name == 'option'){
$result['TYPE'] = $contentExtended->getAttribute('Value');
}
if($name == 'condition'){
$result['CONDITION'] = $contentExtended->getAttribute('Value');
}
}
}
$contentExtended = $contentExtended->nextSibling;
}
return $result;
}
/**
* This function find the coordinates of a object
* @param object $contentNode
* @return array
*/
function findCoordinates($contentNode)
{
$coordinates = array();
while ($contentNode) {
if ($contentNode->nodeType == XML_ELEMENT_NODE) {
$nameChild = $contentNode->nodeName;
$contentChild = $contentNode->firstChild;
if(strpos($nameChild,'NodeGraphicsInfos')!== false){
while ($contentChild) {
if ($contentChild->nodeType == XML_ELEMENT_NODE) {
$nameInfo = $contentChild->nodeName;
$contentInfo = $contentChild->firstChild;
if(strpos($nameInfo,'NodeGraphicsInfo')!== false){
$coordinates['Height'] = $contentChild->getAttribute('Height');
$coordinates['Width'] = $contentChild->getAttribute('Width');
$coordinates['BorderColor'] = $contentChild->getAttribute('BorderColor');
$coordinates['FillColor'] = $contentChild->getAttribute('FillColor');
while ($contentInfo) {
$nameCoordinate = $contentInfo->nodeName;
$contentCoordinate = $contentInfo->firstChild;
if(strpos($nameCoordinate,'Coordinates')!== false){
$coordinates['X'] = $contentInfo->getAttribute('XCoordinate');
$coordinates['Y'] = $contentInfo->getAttribute('YCoordinate');
}
$contentInfo = $contentInfo->nextSibling;
}
}
}
$contentChild = $contentChild->nextSibling;
}
}
}
$contentNode = $contentNode->nextSibling;
}
return $coordinates;
}
/**
* This function find the coordinates of a object
* @param string $idRoute
* @param array $aRoutes
* @return array
*/
function findCoordinatesTransition($idRoute,$aRoutes)
{
$coordinates = array();
$size = sizeof($aRoutes);
$count = 0;
$find = 0;
while($count < $size and $find == 0){
if($aRoutes[$count]['ID'] == $idRoute){
$coordinates['X'] = $aRoutes[$count]['X'];
$coordinates['Y'] = $aRoutes[$count]['Y'];
$find = 1;
}
$count = $count + 1;
}
return $coordinates;
}
/**
* This function create the array Routes
* @param array $dataTasks
* @param array $arrayRoutes
* @param array $aEvents
* @param array $aGateways
* @param string $idProcess
* @return array
*/
function createArrayRoutes($dataTasks,$arrayRoutes,$aEvents,$aGateways,$aEnd,$idProcess)
{
$numberRoutes = 0;
$posT = 0;
$routeTransitions = array();
$dataRoutes = array();
$findRoute = 0;
$hidden = array();
$taskHidden = array();
$countHidden = 0;
foreach($arrayRoutes as $idRoute => $valueRoute){
$idTransition = $valueRoute['0'];
$from = $valueRoute['1'];
$to = $valueRoute['2'];
$toPort = $valueRoute['3'];
$fromPort = $valueRoute['4'];
$routes['ROU_UID'] = $idTransition;
$routes['ID_PROCESS']= $idProcess;
$routes['FROM'] = $from;
$routes['TO'] = $to;
$sequencial = 0;
$isEnd = 0;
$typeRoute = '';
$typePM = '';
$findRoute = 0;
$isEventIntermediate = 0;
foreach ($aGateways as $routeBase => $value){
if($value['0']==$from){
if($findRoute == 0){
$typeT = 'FROM';
$valueRoute = $value['0'];
$typeRoute = $value['1'];
$positionX = $value['2'];
$positionY = $value['3'];
$sequencial = 1;
$findRoute = 1;
}
else{
$hidden['ID_TASK'] = G::generateUniqueID();
$hidden['ID_PROCESS'] = $idProcess;
$hidden['TAS_TITLE'] = '';
$hidden['TASK_TYPE'] = 'HIDDEN';
$hidden['DESCRIPTION'] = $countHidden;
$hidden['X'] = $positionX;
$hidden['Y'] = $positionY;
$taskHidden[] = $hidden;
$dataTasks[] = $this->createTask($hidden);
$countHidden = $countHidden + 1;
$routeTransitions[$posT]['ID'] = G::generateUniqueID();
$routeTransitions[$posT]['ROUTE'] = $from;
$routeTransitions[$posT]['FROM'] = $from;
$routeTransitions[$posT]['TO'] = $hidden['ID_TASK'];
$routeTransitions[$posT]['TOORFROM'] = 'FROM';
$routeTransitions[$posT]['ROU_TYPE'] = $value['1'];
$routeTransitions[$posT]['CONDITION'] = '';
$routeTransitions[$posT]['CONDITION_DIS'] = '';
$routeTransitions[$posT]['TYPE_DIS'] = '';
$posT = $posT + 1;
$from = $hidden['ID_TASK'];
}
}
if($value['0']==$to){
if($findRoute == 0){
$typeT = 'TO';
$valueRoute = $value['0'];
$typeRoute = $value['1'];
$positionX = $value['2'];
$positionY = $value['3'];
$sequencial = 1;
$findRoute = 1;
}
else{
$hidden['ID_TASK'] = G::generateUniqueID();
$hidden['ID_PROCESS'] = $idProcess;
$hidden['TAS_TITLE'] = '';
$hidden['TASK_TYPE'] = 'HIDDEN';
$hidden['DESCRIPTION'] = $countHidden;
$hidden['X'] = $positionX;
$hidden['Y'] = $positionY;
$taskHidden[] = $hidden;
$dataTasks[] = $this->createTask($hidden);
$countHidden = $countHidden + 1;
$routeTransitions[$posT]['ID'] = G::generateUniqueID();
$routeTransitions[$posT]['ROUTE'] = $from;
$routeTransitions[$posT]['FROM'] = $from;
$routeTransitions[$posT]['TO'] = $hidden['ID_TASK'];
$routeTransitions[$posT]['TOORFROM'] = 'TO';
$routeTransitions[$posT]['ROU_TYPE'] = $typeRoute;
$routeTransitions[$posT]['CONDITION'] = '';
$routeTransitions[$posT]['CONDITION_DIS'] = '';
$routeTransitions[$posT]['TYPE_DIS'] = '';
$posT = $posT + 1;
$from = $hidden['ID_TASK'];
$typeT = 'TO';
$valueRoute = $value['0'];
$typeRoute = $value['1'];
$sequencial = 1;
}
}
}
if($sequencial == 0){
foreach($aEvents as $id => $value){
if($routes['TO'] == $value['0']){
if($value['1']==='bpmnEventEndSignal' or $value['1']==='bpmnEventMessageEnd' ){
$routes['TO'] = '-1';
$dataRoutes[$numberRoutes]= $this->createRoute($routes);
$numberRoutes = $numberRoutes +1;
$isEnd = 1;
}
else{
$isEventIntermediate = 1;
}
}
}
}
if($sequencial == 1){
$routeTransitions[$posT]['ID'] = $idTransition;
$routeTransitions[$posT]['ROUTE'] = $valueRoute;
$routeTransitions[$posT]['FROM'] = $from;
$routeTransitions[$posT]['TO'] = $to;
$routeTransitions[$posT]['TOORFROM'] = $typeT;
$routeTransitions[$posT]['ROU_TYPE'] = $typeRoute;
$routeTransitions[$posT]['CONDITION'] = '';
$routeTransitions[$posT]['CONDITION_DIS'] = '';
$routeTransitions[$posT]['TYPE_DIS'] = '';
$posT = $posT + 1;
$sequencial = 1;
}
if($isEnd == 0 and $sequencial == 0 and $isEventIntermediate == 0){
$dataRoutes[$numberRoutes]= $this->createRoute($routes);
$numberRoutes = $numberRoutes +1;
}
}
foreach($routeTransitions as $id => $key){
$typeRoute = $key['ROU_TYPE'];
switch($typeRoute){
case 'bpmnGatewayExclusiveData':
$typePM = 'EVALUATE';
break;
case 'bpmnGatewayInclusive':
$typePM = 'PARALLEL-BY-EVALUATION';
break;
case 'bpmnGatewayExclusiveEvent':
$typePM = 'EVALUATE';
break;
case 'bpmnGatewayComplex':
$typePM = 'DISCRIMINATOR';
break;
case 'bpmnGatewayParallel':
$typePM = 'PARALLEL';
break;
}
$routeTransitions[$id]['ROU_TYPE'] = $typePM;
}
$routes = $routeTransitions;
foreach($routeTransitions as $key => $id){
$findTo = 0;
$findFrom = 0;
foreach ($dataTasks as $keyHidden => $value){
if($id['FROM']== $value['TAS_UID']){
$findFrom= 1;
}
if($id['TO']== $value['TAS_UID']){
$findTo = 1;
}
}
if($findTo == 0){
foreach($routes as $keyR => $idR){
if($id['TO'] == $idR['ROUTE']){
$routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE'];
$routeTransitions[$key]['ROUTE'] = $id['TO'];
$routeTransitions[$key]['TOORFROM'] = 'TO';
}
}
}
if($findFrom == 0){
foreach($routes as $keyR => $idR){
if($id['FROM'] == $idR['ROUTE']){
$routeTransitions[$key]['ROU_TYPE'] = $idR['ROU_TYPE'];
$routeTransitions[$key]['ROUTE'] = $id['FROM'];
$routeTransitions[$key]['TOORFROM'] = 'FROM';
}
}
}
}
$result['ROUTES'] = $dataRoutes;
$result['TRANSITIONS']= $routeTransitions;
$result['NUMBER'] = $numberRoutes;
$result['TASKS'] = $dataTasks;
$result['HIDDEN'] = $taskHidden;
return $result;
}
/**
* This function convert the array events in a array with the events end
* @param object $aEvents
* @param string $idProcess
* @return array
*/
function convertArrayEnd($aEvents,$idProcess)
{
$result = array();
$posEnd = 1;
$endArray = array();
foreach($aEvents as $id => $value){
if($value['1']==='bpmnEventEndSignal' or $value['1']==='bpmnEventMessageEnd'){
$result['ID_PROCESS'] = $idProcess;
$result['ID_TASK'] = $value['0'];
$endArray[$posEnd] = $result;
$posEnd = $posEnd+1;
}
}
return $endArray;
}
/**
* This function create transitions from the array transitions for the new processmap
* @param array $task
* @param array $routes
* @param array $events
* @param array $countEvents
* @param array $arrayRoutes
* @param array $countRoutes
* @return array
*/
function createTransitionsPM($tasks,$routes,$events,$countEvents,$arrayRoutes,$countRoutes)
{
$cont = 0 ;
$dataRoutes = '';
$endEvent = 1 ;
$taskParallel = '';
$routeParallel = '';
$taskSecJoin = '';
$routeSecJoin = '';
$taskDiscriminator = '';
$taskEvaluate = '';
$routeEvaluate = '';
$taskParallelEv = '';
$routeParallelEv = '';
$taskSelect = '';
$routeSelect = '';
$routeEnd = '';
$arraySecJoin = array();
$position = 0;
$fillColor = '';
$transitions = '';
$arrayGateways = array();
$countG = 0;
$gatPosX = 0;
$gatPosY = 0;
foreach ($routes as $key => $row) {
if($row['ROU_TYPE'] == 'SEC-JOIN'){
$arraySecJoin[$position] = array();
$arraySecJoin[$position] = $row;
$position = $position + 1;
unset($routes[$key]);
}
}
$aux = $arraySecJoin ;
foreach ($arraySecJoin as $key => $row) {
$aux[$key]= $row['ROU_NEXT_TASK'];
}
if(sizeof($arraySecJoin) > 0){
array_multisort($aux,SORT_ASC,$arraySecJoin);
unset($aux);
}
foreach ($routes as $key => $row) {
$uid[$key] = $row['TAS_UID'];
$case[$key] = $row['ROU_CASE'];
}
if(sizeof($routes) > 0){
array_multisort($uid, SORT_ASC, $case, SORT_ASC, $routes);
}
$routes = array_merge($routes,$arraySecJoin);
foreach ($routes as $key => $val ) {
$end = 0;
$idRoute = $val['ROU_UID'];
$idTask = $val['TAS_UID'];
$nextTask = $val['ROU_NEXT_TASK'];
$condition = htmlentities($val['ROU_CONDITION']);
$toPort = $val['ROU_TO_PORT'];
$fromPort = $val['ROU_FROM_PORT'];
//If End Event
if($nextTask == "-1"){
$end=1;
}
$typeRoute = $val['ROU_TYPE'];
$route = '';
//Get GAT_UID from ROUTE table based on ROU_UID
$oRoute = new Route ( );
$aRouteDetails = $oRoute->load($idRoute);
$sGateUID = $aRouteDetails['GAT_UID'];
//Get Gateway details from above GAT_UID
$oGateway = new Gateway ( );
if($sGateUID != '')
{
$aGatewayDetails = $oGateway->load($sGateUID);
$gatPosX = $aGatewayDetails['GAT_X'];
$gatPosY = $aGatewayDetails['GAT_Y'];
}
//if route is of SEQUENTIAL type,assign route id to GAT_UID
if($sGateUID == '')
$sGateUID = $idRoute;
if ($typeRoute != "SEQUENTIAL" ){
switch($typeRoute){
case 'PARALLEL':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'] + 60;
$coordinateY=$idVal['TAS_POSY'] + 60;
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'] ;
}
}
$positionX=$coordinateX+62;
$positionY=$coordinateY+55;
if($idTask != $taskParallel){
$taskParallel = $idTask;
$routeParallel = $sGateUID;
$arrayGateways[$countG]['0'] = $sGateUID;
$arrayGateways[$countG]['1'] = 'bpmnGatewayParallel';
$arrayGateways[$countG]['2'] = $gatPosX;
$arrayGateways[$countG]['3'] = $gatPosY;
$countG = $countG + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $taskParallel;
$arrayRoutes[$countRoutes]['2']= $routeParallel;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeParallel;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeParallel;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
break;
case 'SEC-JOIN':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$nextTask){
$coordinateX=$idVal['TAS_POSX'] + 60;
$coordinateY=$idVal['TAS_POSY'] + 60;
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY-45;
if($nextTask != $taskSecJoin){
$taskSecJoin = $nextTask;
$routeSecJoin = $sGateUID;
$arrayGateways[$countG]['0'] = $sGateUID;
$arrayGateways[$countG]['1'] = 'bpmnGatewayParallel';
$arrayGateways[$countG]['2'] = $gatPosX;
$arrayGateways[$countG]['3'] = $gatPosY;
$countG = $countG + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeSecJoin;
$arrayRoutes[$countRoutes]['2']= $taskSecJoin;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $routeSecJoin;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $routeSecJoin;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
break;
case 'EVALUATE':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'] + 60;
$coordinateY=$idVal['TAS_POSY'] + 60;
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
}
}
$positionX=$coordinateX+62;
$positionY=$coordinateY+55;
if($idTask != $taskEvaluate){
$taskEvaluate = $idTask;
$routeEvaluate = $sGateUID;
if($nextTask != "-1"){
$arrayGateways[$countG]['0'] = $sGateUID;
$arrayGateways[$countG]['1'] = 'bpmnGatewayExclusiveData';
$arrayGateways[$countG]['2'] = $gatPosX;
$arrayGateways[$countG]['3'] = $gatPosY;
$countG = $countG + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $taskEvaluate;
$arrayRoutes[$countRoutes]['2']= $routeEvaluate;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeEvaluate;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
}
else{
if($nextTask !="-1"){
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeEvaluate;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
$routeEnd = $routeEvaluate;
}
}
break;
case 'PARALLEL-BY-EVALUATION':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX = $idVal['TAS_POSX'] + 60;
$coordinateY = $idVal['TAS_POSY'] + 60;
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
}
}
$positionX=$coordinateX+62;
$positionY=$coordinateY+55;
if($idTask != $taskParallelEv){
$taskParallelEv = $idTask;
$routeParallelEv = $sGateUID;
$arrayGateways[$countG]['0'] = $sGateUID;
$arrayGateways[$countG]['1'] = 'bpmnGatewayInclusive';
$arrayGateways[$countG]['2'] = $gatPosX;
$arrayGateways[$countG]['3'] = $gatPosY;
$countG = $countG + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $taskParallelEv;
$arrayRoutes[$countRoutes]['2']= $routeParallelEv;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeParallelEv;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeParallelEv;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
break;
case 'SELECT':
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'] + 60;
$coordinateY=$idVal['TAS_POSY'] + 60;
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY+40;
if($idTask != $taskSelect){
$taskSelect = $idTask;
$routeSelect = $sGateUID;
$arrayGateways[$countG]['0'] = $sGateUID;
$arrayGateways[$countG]['1'] = 'bpmnGatewayExclusiveData';
$arrayGateways[$countG]['2'] = $gatPosX;
$arrayGateways[$countG]['3'] = $gatPosY;
$countG = $countG + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $taskSelect;
$arrayRoutes[$countRoutes]['2']= $routeSelect;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeSelect;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
if($nextTask !="-1"){
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeSelect;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
$routeEnd = $routeSelect;
}
}
break;
case 'DISCRIMINATOR':
$coordinateX = 0;
$coordinateY = 0;
$optional = $val['ROU_OPTIONAL'];
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$nextTask){
$coordinateX=$idVal['TAS_POSX'] + 60;
$coordinateY=$idVal['TAS_POSY'] + 60;
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
}
}
$positionX=$coordinateX+60;
$positionY=$coordinateY-45;
if($nextTask != $taskDiscriminator){
$taskDiscriminator = $nextTask;
$routeDiscriminator = $sGateUID;
$arrayGateways[$countG]['0'] = $sGateUID;
$arrayGateways[$countG]['1'] = 'bpmnGatewayComplex';
$arrayGateways[$countG]['2'] = $gatPosX;
$arrayGateways[$countG]['3'] = $gatPosY;
$countG = $countG + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $routeDiscriminator;
$arrayRoutes[$countRoutes]['2']= $taskDiscriminator;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $routeDiscriminator;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else{
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $routeDiscriminator;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
break;
}
}
if($end==1){
if($typeRoute == "SEQUENTIAL"){
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
$tas_uid =$idVal['TAS_UID'];
}
}
$positionX = $coordinateX + 92;
$positionY = $coordinateY + 40;
$evn_uid = $val['ROU_EVN_UID'];
if($evn_uid != ''){
$oEvent = new Event();
$aEvent = $oEvent->load($evn_uid);
$events[$countEvents]['0'] = $evn_uid;
$events[$countEvents]['1'] = $aEvent['EVN_TYPE'];
$events[$countEvents]['2'] = $positionX-25;
$events[$countEvents]['3'] = $positionY+35;
$events[$countEvents]['4'] = $tas_uid;
$countEvents = $countEvents + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $evn_uid;
$arrayRoutes[$countRoutes]['3']= $toPort;
$arrayRoutes[$countRoutes]['4']= $fromPort;
$arrayRoutes[$countRoutes]['5']= $typeRoute;
$countRoutes = $countRoutes + 1;
$end = 0;
$endEvent = 0;
}
}
//For $typeRoute Evaluate Function
else{
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
$tas_uid =$idVal['TAS_UID'];
}
}
$positionX = $coordinateX + $tas_width/1.5 + 19;
$positionY = $coordinateY + $tas_height/2;
$idTask = $routeEnd;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $idRoute;
$arrayRoutes[$countRoutes]['3']= $toPort;
$arrayRoutes[$countRoutes]['4']= $fromPort;
$arrayRoutes[$countRoutes]['5']= $typeRoute;
$countRoutes = $countRoutes + 1;
$events[$countEvents]['0'] = $idRoute;
$events[$countEvents]['1'] = 'bpmnEventEmptyEnd';
$events[$countEvents]['2'] = $positionX-25;
$events[$countEvents]['3'] = $positionY+35;
$events[$countEvents]['4'] = $tas_uid;
$countEvents = $countEvents + 1;
$end = 0;
$endEvent = 0;
}
}
else{
if ($typeRoute == "SEQUENTIAL"){
//Will Check for Intermediate Timer
$evn_uid = $val['ROU_EVN_UID'];
if($evn_uid != '')
{
$coordinateX=0;
$coordinateY=0;
foreach ($tasks as $taskVal => $idVal ){
if($idVal['TAS_UID']==$idTask){
$coordinateX=$idVal['TAS_POSX'];
$coordinateY=$idVal['TAS_POSY'];
$tas_width =$idVal['TAS_WIDTH'];
$tas_height =$idVal['TAS_HEIGHT'];
}
}
$positionX = $coordinateX + $tas_width/1.5 + 19;
$positionY = $coordinateY + $tas_height/2;
$oEvent = new Event();
$aEvent = $oEvent->load($evn_uid);
$events[$countEvents]['0'] = $evn_uid;
$events[$countEvents]['1'] = $aEvent['EVN_TYPE'];
$events[$countEvents]['2'] = $aEvent['EVN_POSX'];
$events[$countEvents]['3'] = $aEvent['EVN_POSY'];
$countEvents = $countEvents + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $evn_uid;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
$arrayRoutes[$countRoutes]['0']= G::generateUniqueID();
$arrayRoutes[$countRoutes]['1']= $evn_uid;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= '1';
$arrayRoutes[$countRoutes]['4']= '2';
$countRoutes = $countRoutes + 1;
}
else
{
$arrayRoutes[$countRoutes]['0']= $idRoute;
$arrayRoutes[$countRoutes]['1']= $idTask;
$arrayRoutes[$countRoutes]['2']= $nextTask;
$arrayRoutes[$countRoutes]['3']= $toPort;
$arrayRoutes[$countRoutes]['4']= $fromPort;
$countRoutes = $countRoutes + 1;
}
}
}
}
$data = array();
$data['GATEWAYS'] = $arrayGateways;
$data['TRANSITION'] = $arrayRoutes;
$data['EVENTS'] = $events;
return $data;
}
/**
* This function Removes duplicate values from an array bi-dimensional
* @param array $array
* @return array
*/
function super_unique($array)
{
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));
foreach ($result as $key => $value){
if ( is_array($value) ){
$result[$key] = $this->super_unique($value);
}
}
return $result;
}
/**
* This function create a array for open the process in the new processmap
* @param array $array
* @return array
*/
function createProcessPM($array)
{
$result = array();
$result['0'] = $array['PRO_UID'];
$result['1'] = $array['PRO_TITLE'];
$result['2'] = $array['PRO_DESCRIPTION'];
return $result;
}
/**
* This function creates an array for the lane that will be created according to the data given in an array
* @param array $lanes
* @return array $lane
*/
function createSubProcessesPM($array)
{
$arrayLanes = array();
$field = array();
foreach ($array as $key=> $value){
$field['0'] = $value['SWI_UID'];
$field['1'] = $value['SWI_TEXT'];
$field['2'] = $value['SWI_X'];
$field['3'] = $value['SWI_Y'];
$field['4'] = '';//$value['SWI_WIDTH'];
$field['5'] = '';//$value['SWI_HEIGHT'];
}
return $arrayLanes;
}
/**
* This function creates an array for the lane that will be created according to the data given in an array
* @param array $lanes
* @return array $lane
*/
function saveWebEntry($array)
{
$file = new DOMDocument();
foreach($array as $key => $value){
$link = $value->W_LINK;
// This split function has been DEPRECATED as of PHP 5.3.0.
// $link = split('>',$link);
// $link = split('<',$link[2]);
$link = explode('>',$link);
$link = explode('<',$link[2]);
$link = $link['0'];
$uid = $value->W_PRO_UID;
$name = $value->W_FILENAME;
}
}
}