Adding SubProcess support for Bpmn->Workflow adapter
This commit is contained in:
@@ -4555,6 +4555,7 @@ class processMap
|
||||
{
|
||||
try {
|
||||
$oTask = new Task();
|
||||
$oNewTask = new StdClass();
|
||||
$oNewTask->label = G::LoadTranslation('ID_SUBPROCESS');
|
||||
$oNewTask->uid = $oTask->create(array('PRO_UID' => $sProcessUID, 'TAS_TITLE' => $oNewTask->label, 'TAS_POSX' => $iX, 'TAS_POSY' => $iY, 'TAS_TYPE' => 'SUBPROCESS' ));
|
||||
//$oJSON = new Services_JSON();
|
||||
|
||||
@@ -112,7 +112,7 @@ class BpmnActivity extends BaseBpmnActivity
|
||||
$this->setBoundDefaults();
|
||||
|
||||
if ($this->bound->getBouUid() == "") {
|
||||
$this->bound->setBouUid(\ProcessMaker\Util\Hash::generateUID());
|
||||
$this->bound->setBouUid(\ProcessMaker\Util\Common::generateUID());
|
||||
}
|
||||
|
||||
$this->bound->save($con);
|
||||
@@ -142,7 +142,7 @@ class BpmnActivity extends BaseBpmnActivity
|
||||
$this->bound = $bound;
|
||||
} else {
|
||||
$this->bound = new BpmnBound();
|
||||
$this->bound->setBouUid(ProcessMaker\Util\Hash::generateUID());
|
||||
$this->bound->setBouUid(ProcessMaker\Util\Common::generateUID());
|
||||
}
|
||||
|
||||
$this->bound->fromArray($data, BasePeer::TYPE_FIELDNAME);
|
||||
|
||||
@@ -112,7 +112,7 @@ class BpmnEvent extends BaseBpmnEvent
|
||||
$this->setBoundDefaults();
|
||||
|
||||
if ($this->bound->getBouUid() == "") {
|
||||
$this->bound->setBouUid(\ProcessMaker\Util\Hash::generateUID());
|
||||
$this->bound->setBouUid(\ProcessMaker\Util\Common::generateUID());
|
||||
}
|
||||
|
||||
$this->bound->save($con);
|
||||
@@ -142,7 +142,7 @@ class BpmnEvent extends BaseBpmnEvent
|
||||
$this->bound = $bound;
|
||||
} else {
|
||||
$this->bound = new BpmnBound();
|
||||
$this->bound->setBouUid(ProcessMaker\Util\Hash::generateUID());
|
||||
$this->bound->setBouUid(ProcessMaker\Util\Common::generateUID());
|
||||
}
|
||||
|
||||
$this->bound->fromArray($data, BasePeer::TYPE_FIELDNAME);
|
||||
|
||||
@@ -117,7 +117,7 @@ class BpmnGateway extends BaseBpmnGateway
|
||||
$this->setBoundDefaults();
|
||||
|
||||
if ($this->bound->getBouUid() == "") {
|
||||
$this->bound->setBouUid(\ProcessMaker\Util\Hash::generateUID());
|
||||
$this->bound->setBouUid(\ProcessMaker\Util\Common::generateUID());
|
||||
}
|
||||
|
||||
$this->bound->save($con);
|
||||
@@ -147,7 +147,7 @@ class BpmnGateway extends BaseBpmnGateway
|
||||
$this->bound = $bound;
|
||||
} else {
|
||||
$this->bound = new BpmnBound();
|
||||
$this->bound->setBouUid(ProcessMaker\Util\Hash::generateUID());
|
||||
$this->bound->setBouUid(ProcessMaker\Util\Common::generateUID());
|
||||
}
|
||||
|
||||
$this->bound->fromArray($data, BasePeer::TYPE_FIELDNAME);
|
||||
|
||||
@@ -148,5 +148,14 @@ class SubProcess extends BaseSubProcess
|
||||
throw ($oError);
|
||||
}
|
||||
}
|
||||
|
||||
public static function findByParents($proParent, $tasParent)
|
||||
{
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->add(SubProcessPeer::PRO_PARENT, $proParent);
|
||||
$criteria->add(SubProcessPeer::TAS_PARENT, $tasParent);
|
||||
|
||||
return SubProcessPeer::doSelectOne($criteria);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@ class Task extends BaseTask
|
||||
* create a new Task
|
||||
*
|
||||
* @param array $aData with new values
|
||||
* @return void
|
||||
* @return string
|
||||
*/
|
||||
public function create($aData, $generateUid = true)
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
namespace ProcessMaker\Project\Adapter;
|
||||
|
||||
use ProcessMaker\Project;
|
||||
use ProcessMaker\Util\Hash;
|
||||
use ProcessMaker\Util\Common;
|
||||
|
||||
/**
|
||||
* Class BpmnWorkflow
|
||||
@@ -134,6 +134,13 @@ class BpmnWorkflow extends Project\Bpmn
|
||||
if (array_key_exists("ACT_NAME", $data)) {
|
||||
$taskData["TAS_POSY"] = $data["BOU_Y"];
|
||||
}
|
||||
if (array_key_exists("ACT_TYPE", $data)) {
|
||||
if ($data["ACT_TYPE"] == "SUB_PROCESS") {
|
||||
$taskData["TAS_TYPE"] = "SUBPROCESS";
|
||||
} else {
|
||||
$taskData["TAS_TYPE"] = "NORMAL";
|
||||
}
|
||||
}
|
||||
|
||||
$this->wp->addTask($taskData);
|
||||
|
||||
@@ -163,6 +170,7 @@ class BpmnWorkflow extends Project\Bpmn
|
||||
{
|
||||
parent::removeActivity($actUid);
|
||||
$this->wp->removeTask($actUid);
|
||||
|
||||
}
|
||||
|
||||
public function removeGateway($gatUid)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
namespace ProcessMaker\Project\Adapter;
|
||||
|
||||
use ProcessMaker\Project;
|
||||
use ProcessMaker\Util\Hash;
|
||||
use ProcessMaker\Util\Common;
|
||||
|
||||
/**
|
||||
* Class WorkflowBpmn
|
||||
|
||||
@@ -27,7 +27,7 @@ use \BpmnArtifactPeer as ArtifactPeer;
|
||||
|
||||
use \BasePeer;
|
||||
|
||||
use ProcessMaker\Util\Hash;
|
||||
use ProcessMaker\Util\Common;
|
||||
use ProcessMaker\Exception;
|
||||
|
||||
/**
|
||||
@@ -99,7 +99,7 @@ class Bpmn extends Handler
|
||||
public function create($data)
|
||||
{
|
||||
// setting defaults
|
||||
$data['PRJ_UID'] = array_key_exists('PRJ_UID', $data) ? $data['PRJ_UID'] : Hash::generateUID();
|
||||
$data['PRJ_UID'] = array_key_exists('PRJ_UID', $data) ? $data['PRJ_UID'] : Common::generateUID();
|
||||
|
||||
self::log("Create Project with data: ", $data);
|
||||
$this->project = new Project();
|
||||
@@ -195,7 +195,7 @@ class Bpmn extends Handler
|
||||
}
|
||||
|
||||
// setting defaults
|
||||
$data['DIA_UID'] = array_key_exists('DIA_UID', $data) ? $data['DIA_UID'] : Hash::generateUID();
|
||||
$data['DIA_UID'] = array_key_exists('DIA_UID', $data) ? $data['DIA_UID'] : Common::generateUID();
|
||||
$data['DIA_NAME'] = array_key_exists('DIA_NAME', $data) ? $data['DIA_NAME'] : $this->project->getPrjName();
|
||||
|
||||
$this->diagram = new Diagram();
|
||||
@@ -225,7 +225,7 @@ class Bpmn extends Handler
|
||||
}
|
||||
|
||||
// setting defaults
|
||||
$data['PRO_UID'] = array_key_exists('PRO_UID', $data) ? $data['PRO_UID'] : Hash::generateUID();;
|
||||
$data['PRO_UID'] = array_key_exists('PRO_UID', $data) ? $data['PRO_UID'] : Common::generateUID();;
|
||||
$data['PRO_NAME'] = array_key_exists('PRO_NAME', $data) ? $data['PRO_NAME'] : $this->diagram->getDiaName();
|
||||
|
||||
$this->process = new Process();
|
||||
@@ -256,7 +256,7 @@ class Bpmn extends Handler
|
||||
}
|
||||
|
||||
// setting defaults
|
||||
$data['ACT_UID'] = array_key_exists('ACT_UID', $data) ? $data['ACT_UID'] : Hash::generateUID();;
|
||||
$data['ACT_UID'] = array_key_exists('ACT_UID', $data) ? $data['ACT_UID'] : Common::generateUID();;
|
||||
|
||||
try {
|
||||
self::log("Add Activity with data: ", $data);
|
||||
@@ -342,7 +342,7 @@ class Bpmn extends Handler
|
||||
public function addEvent($data)
|
||||
{
|
||||
// setting defaults
|
||||
$data['EVN_UID'] = array_key_exists('EVN_UID', $data) ? $data['EVN_UID'] : Hash::generateUID();
|
||||
$data['EVN_UID'] = array_key_exists('EVN_UID', $data) ? $data['EVN_UID'] : Common::generateUID();
|
||||
|
||||
try {
|
||||
self::log("Add Event with data: ", $data);
|
||||
@@ -432,7 +432,7 @@ class Bpmn extends Handler
|
||||
public function addGateway($data)
|
||||
{
|
||||
// setting defaults
|
||||
$data['GAT_UID'] = array_key_exists('GAT_UID', $data) ? $data['GAT_UID'] : Hash::generateUID();
|
||||
$data['GAT_UID'] = array_key_exists('GAT_UID', $data) ? $data['GAT_UID'] : Common::generateUID();
|
||||
|
||||
try {
|
||||
self::log("Add Gateway with data: ", $data);
|
||||
@@ -517,7 +517,7 @@ class Bpmn extends Handler
|
||||
self::log("Add Flow with data: ", $data);
|
||||
|
||||
// setting defaults
|
||||
$data['FLO_UID'] = array_key_exists('FLO_UID', $data) ? $data['FLO_UID'] : Hash::generateUID();
|
||||
$data['FLO_UID'] = array_key_exists('FLO_UID', $data) ? $data['FLO_UID'] : Common::generateUID();
|
||||
if (array_key_exists('FLO_STATE', $data)) {
|
||||
$data['FLO_STATE'] = is_array($data['FLO_STATE']) ? json_encode($data['FLO_STATE']) : $data['FLO_STATE'];
|
||||
}
|
||||
|
||||
@@ -10,8 +10,9 @@ use \Task;
|
||||
use \Route;
|
||||
use \RoutePeer;
|
||||
|
||||
use ProcessMaker\Util\Hash;
|
||||
use ProcessMaker\Util\Common;
|
||||
use ProcessMaker\Exception;
|
||||
use ProcessMaker\Util;
|
||||
|
||||
/**
|
||||
* Class Workflow
|
||||
@@ -55,7 +56,7 @@ class Workflow extends Handler
|
||||
public function create($data)
|
||||
{
|
||||
// setting defaults
|
||||
$data['PRO_UID'] = array_key_exists('PRO_UID', $data) ? $data['PRO_UID'] : Hash::generateUID();
|
||||
$data['PRO_UID'] = array_key_exists('PRO_UID', $data) ? $data['PRO_UID'] : Common::generateUID();
|
||||
$data['USR_UID'] = array_key_exists('PRO_CREATE_USER', $data) ? $data['PRO_CREATE_USER'] : null;
|
||||
$data['PRO_TITLE'] = array_key_exists('PRO_TITLE', $data) ? trim($data['PRO_TITLE']) : "";
|
||||
$data['PRO_CATEGORY'] = array_key_exists('PRO_CATEGORY', $data) ? $data['PRO_CATEGORY'] : "";
|
||||
@@ -165,7 +166,7 @@ class Workflow extends Handler
|
||||
public function addTask($taskData)
|
||||
{
|
||||
// Setting defaults
|
||||
$taskData['TAS_UID'] = array_key_exists('TAS_UID', $taskData) ? $taskData['TAS_UID'] : Hash::generateUID();
|
||||
$taskData['TAS_UID'] = array_key_exists('TAS_UID', $taskData) ? $taskData['TAS_UID'] : Common::generateUID();
|
||||
$taskData['PRO_UID'] = $this->proUid;
|
||||
|
||||
try {
|
||||
@@ -173,6 +174,12 @@ class Workflow extends Handler
|
||||
$task = new Task();
|
||||
$tasUid = $task->create($taskData, false);
|
||||
self::log("Add Task Success!");
|
||||
|
||||
// SubProcess Handling
|
||||
if ($task->getTasType() == "SUBPROCESS") {
|
||||
$this->addSubProcess($this->proUid, $tasUid);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
|
||||
throw $e;
|
||||
@@ -201,9 +208,17 @@ class Workflow extends Handler
|
||||
{
|
||||
try {
|
||||
self::log("Remove Task: $tasUid");
|
||||
$task = \TaskPeer::retrieveByPK($tasUid);
|
||||
$tasType = $task->getTasType();
|
||||
|
||||
$task = new Tasks();
|
||||
$task->deleteTask($tasUid);
|
||||
self::log("Remove Task Success!");
|
||||
|
||||
if ($tasType == "SUBPROCESS") {
|
||||
$this->removeSupProcess($this->proUid, $tasUid);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
|
||||
throw $e;
|
||||
@@ -237,6 +252,53 @@ class Workflow extends Handler
|
||||
return $tasks->getAllTasks($this->proUid);
|
||||
}
|
||||
|
||||
public function addSubProcess($proUid = '', $tasUid)//$iX = 0, $iY = 0)
|
||||
{
|
||||
try {
|
||||
$subProcess = new \SubProcess();
|
||||
$data = array(
|
||||
'SP_UID' => Util\Common::generateUID(),
|
||||
'PRO_UID' => 0,
|
||||
'TAS_UID' => 0,
|
||||
'PRO_PARENT' => $proUid,
|
||||
'TAS_PARENT' => $tasUid,
|
||||
'SP_TYPE' => 'SIMPLE',
|
||||
'SP_SYNCHRONOUS' => 0,
|
||||
'SP_SYNCHRONOUS_TYPE' => 'ALL',
|
||||
'SP_SYNCHRONOUS_WAIT' => 0,
|
||||
'SP_VARIABLES_OUT' => '',
|
||||
'SP_VARIABLES_IN' => '',
|
||||
'SP_GRID_IN' => ''
|
||||
);
|
||||
|
||||
self::log("Adding SubProcess with data: ", $data);
|
||||
$spUid = $subProcess->create($data);
|
||||
self::log("Adding SubProcess success!, created sp_uid: ", $spUid);
|
||||
|
||||
return $spUid;
|
||||
} catch (\Exception $oError) {
|
||||
throw ($oError);
|
||||
}
|
||||
}
|
||||
|
||||
public function removeSupProcess($proUid, $tasUid)
|
||||
{
|
||||
try {
|
||||
$subProcess = \SubProcess::findByParents($proUid, $tasUid);
|
||||
self::log("Remove SupProcess: ".$subProcess->getSpUid());
|
||||
$subProcess->delete();
|
||||
self::log("Remove SupProcess Success!");
|
||||
} catch (\Exception $e) {
|
||||
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
public function updateSubProcess()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $tasUid
|
||||
* @param bool $value
|
||||
|
||||
@@ -3,4 +3,65 @@ namespace ProcessMaker\Util;
|
||||
|
||||
class Common extends \Maveriks\Util\Common
|
||||
{
|
||||
/**
|
||||
* Generate random number
|
||||
*
|
||||
* @author Fernando Ontiveros Lira <fernando@colosa.com>
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function generateUID()
|
||||
{
|
||||
do {
|
||||
$sUID = str_replace('.', '0', uniqid(rand(0, 999999999), true));
|
||||
} while (strlen( $sUID ) != 32);
|
||||
|
||||
return $sUID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a numeric or alphanumeric code
|
||||
*
|
||||
* @author Julio Cesar Laura Avendaño <juliocesar@colosa.com>
|
||||
* @access public
|
||||
* @param int $iDigits
|
||||
* @param string $sType
|
||||
* @return string
|
||||
*/
|
||||
public function generateCode($iDigits = 4, $sType = 'NUMERIC')
|
||||
{
|
||||
if (($iDigits < 4) || ($iDigits > 50)) {
|
||||
$iDigits = 4;
|
||||
}
|
||||
if (($sType != 'NUMERIC') && ($sType != 'ALPHA') && ($sType != 'ALPHANUMERIC')) {
|
||||
$sType = 'NUMERIC';
|
||||
}
|
||||
|
||||
$aValidCharacters = array(
|
||||
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H',
|
||||
'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
|
||||
);
|
||||
|
||||
switch ($sType) {
|
||||
case 'NUMERIC':
|
||||
$iMin = 0;
|
||||
$iMax = 9;
|
||||
break;
|
||||
case 'ALPHA':
|
||||
$iMin = 10;
|
||||
$iMax = 35;
|
||||
break;
|
||||
case 'ALPHANUMERIC':
|
||||
$iMin = 0;
|
||||
$iMax = 35;
|
||||
break;
|
||||
}
|
||||
|
||||
$sCode = '';
|
||||
for ($i = 0; $i < $iDigits; $i ++) {
|
||||
$sCode .= $aValidCharacters[rand($iMin, $iMax)];
|
||||
}
|
||||
|
||||
return $sCode;
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Util;
|
||||
|
||||
class Hash
|
||||
{
|
||||
/**
|
||||
* Generate random number
|
||||
*
|
||||
* @author Fernando Ontiveros Lira <fernando@colosa.com>
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function generateUID()
|
||||
{
|
||||
do {
|
||||
$sUID = str_replace('.', '0', uniqid(rand(0, 999999999), true));
|
||||
} while (strlen( $sUID ) != 32);
|
||||
|
||||
return $sUID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a numeric or alphanumeric code
|
||||
*
|
||||
* @author Julio Cesar Laura Avendaño <juliocesar@colosa.com>
|
||||
* @access public
|
||||
* @param int $iDigits
|
||||
* @param string $sType
|
||||
* @return string
|
||||
*/
|
||||
public function generateCode($iDigits = 4, $sType = 'NUMERIC')
|
||||
{
|
||||
if (($iDigits < 4) || ($iDigits > 50)) {
|
||||
$iDigits = 4;
|
||||
}
|
||||
if (($sType != 'NUMERIC') && ($sType != 'ALPHA') && ($sType != 'ALPHANUMERIC')) {
|
||||
$sType = 'NUMERIC';
|
||||
}
|
||||
|
||||
$aValidCharacters = array(
|
||||
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H',
|
||||
'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
|
||||
);
|
||||
|
||||
switch ($sType) {
|
||||
case 'NUMERIC':
|
||||
$iMin = 0;
|
||||
$iMax = 9;
|
||||
break;
|
||||
case 'ALPHA':
|
||||
$iMin = 10;
|
||||
$iMax = 35;
|
||||
break;
|
||||
case 'ALPHANUMERIC':
|
||||
$iMin = 0;
|
||||
$iMax = 35;
|
||||
break;
|
||||
}
|
||||
|
||||
$sCode = '';
|
||||
for ($i = 0; $i < $iDigits; $i ++) {
|
||||
$sCode .= $aValidCharacters[rand($iMin, $iMax)];
|
||||
}
|
||||
|
||||
return $sCode;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ class Project extends Api
|
||||
$activity = $bwp->getActivity($activityData["ACT_UID"]);
|
||||
if (is_null($activity)) {
|
||||
$oldActUid = $activityData["ACT_UID"];
|
||||
$activityData["ACT_UID"] = Util\Hash::generateUID();
|
||||
$activityData["ACT_UID"] = Util\Common::generateUID();
|
||||
$bwp->addActivity($activityData);
|
||||
$result[] = array("object" => "activity", "new_uid" => $activityData["ACT_UID"], "old_uid" => $oldActUid);
|
||||
} elseif (! $bwp->isEquals($activity, $activityData)) {
|
||||
@@ -153,7 +153,7 @@ class Project extends Api
|
||||
$gateway = $bwp->getGateway($gatewayData["GAT_UID"]);
|
||||
if (is_null($gateway)) {
|
||||
$oldActUid = $gatewayData["GAT_UID"];
|
||||
$gatewayData["GAT_UID"] = Util\Hash::generateUID();
|
||||
$gatewayData["GAT_UID"] = Util\Common::generateUID();
|
||||
$bwp->addGateway($gatewayData);
|
||||
$result[] = array("object" => "gateway", "new_uid" => $gatewayData["GAT_UID"], "old_uid" => $oldActUid);
|
||||
} elseif (! $bwp->isEquals($gateway, $gatewayData)) {
|
||||
@@ -192,7 +192,7 @@ class Project extends Api
|
||||
$event = $bwp->getEvent($eventData["EVN_UID"]);
|
||||
if (is_null($event)) {
|
||||
$oldActUid = $eventData["EVN_UID"];
|
||||
$eventData["EVN_UID"] = Util\Hash::generateUID();
|
||||
$eventData["EVN_UID"] = Util\Common::generateUID();
|
||||
$bwp->addEvent($eventData);
|
||||
$result[] = array("object" => "event", "new_uid" => $eventData["EVN_UID"], "old_uid" => $oldActUid);
|
||||
} elseif (! $bwp->isEquals($event, $eventData)) {
|
||||
@@ -227,7 +227,7 @@ class Project extends Api
|
||||
// if it is a new flow record
|
||||
if (! \BpmnFlow::exists($flowData["FLO_UID"])) {
|
||||
$oldFloUid = $flowData["FLO_UID"];
|
||||
$flowData["FLO_UID"] = Util\Hash::generateUID();
|
||||
$flowData["FLO_UID"] = Util\Common::generateUID();
|
||||
|
||||
$mappedUid = self::mapUid($flowData["FLO_ELEMENT_ORIGIN"], $result);
|
||||
if ($mappedUid !== false) {
|
||||
|
||||
Reference in New Issue
Block a user