litle changes for /project endpoint
This commit is contained in:
@@ -42,6 +42,7 @@ class Model
|
||||
$uids = array();
|
||||
$oldPrjUid = $data['PRJ_UID'];
|
||||
$diagrams = $data['DIAGRAMS'];
|
||||
$mapId = array();
|
||||
|
||||
unset($data['PRJ_UID']);
|
||||
|
||||
@@ -59,6 +60,7 @@ class Model
|
||||
$prjUid = $project->getPrjUid();
|
||||
$prjName = $project->getPrjName();
|
||||
$uids[] = array('old_uid' => $oldPrjUid, 'new_uid' => $prjUid, 'object' => 'project');
|
||||
$mapId['project'][$oldPrjUid] = $prjUid;
|
||||
|
||||
// By now, is thought create only one diagram for each project (1:1)
|
||||
$diagramData = (array) $diagrams[0];
|
||||
@@ -71,6 +73,7 @@ class Model
|
||||
$diagram->save();
|
||||
$diaUid = $diagram->getDiaUid();
|
||||
$uids[] = array('old_uid' => $oldDiaUid, 'new_uid' => $diaUid, 'object' => 'diagram');
|
||||
$mapId['diagram'][$oldDiaUid] = $diaUid;
|
||||
|
||||
$process = new Process();
|
||||
$process->setProUid(Hash::generateUID());
|
||||
@@ -88,6 +91,7 @@ class Model
|
||||
private function createDiagram($prjUid, $proUid, $diaUid, $diagramData)
|
||||
{
|
||||
$uids = array();
|
||||
$mapId = array();
|
||||
|
||||
/*
|
||||
* 1. ensure that all related data of objects are defined, if not we define them as empty
|
||||
@@ -115,20 +119,23 @@ class Model
|
||||
$oldLnsUid = $lanesetData['LNS_UID'];
|
||||
|
||||
$uids[] = array('old_uid' => $oldLnsUid, 'new_uid' => $lnsUid, 'object' => 'laneset');
|
||||
$mapId['laneset'][$oldLnsUid] = $lnsUid;
|
||||
}
|
||||
|
||||
foreach($lanes as $laneData) {
|
||||
$laneData = array_change_key_case((array) $laneData, CASE_UPPER);
|
||||
$oldLanUid = $laneData['LNS_UID'];
|
||||
|
||||
$lane = new Lane();
|
||||
$lane->fromArray($laneData, BasePeer::TYPE_FIELDNAME);
|
||||
$lane->setLanUid(Hash::generateUID());
|
||||
$lane->setPrjUid($prjUid);
|
||||
$lane->setLnsUid($mapId['laneset'][$oldLanUid]);
|
||||
$lane->save();
|
||||
$lanUid = $lane->getLanUid();
|
||||
$oldLanUid = $laneData['LNS_UID'];
|
||||
|
||||
$uids[] = array('old_uid' => $oldLanUid, 'new_uid' => $lanUid, 'object' => 'lane');
|
||||
$mapId['lane'][$oldLanUid] = $lanUid;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -139,7 +146,6 @@ class Model
|
||||
foreach($activities as $activityData) {
|
||||
$activityData = array_change_key_case((array) $activityData, CASE_UPPER);
|
||||
|
||||
|
||||
$activity = new Activity();
|
||||
$activity->fromArray($activityData, BasePeer::TYPE_FIELDNAME);
|
||||
$activity->setActUid(Hash::generateUID());
|
||||
@@ -150,7 +156,7 @@ class Model
|
||||
$actUid = $activity->getActUid();
|
||||
$oldActUid = $activityData['ACT_UID'];
|
||||
$uids[] = array('old_uid' => $oldActUid, 'new_uid' => $actUid, 'object' => 'activity');
|
||||
|
||||
$mapId['activity'][$oldActUid] = $actUid;
|
||||
|
||||
$bound = new Bound();
|
||||
$bound->fromArray($activityData, BasePeer::TYPE_FIELDNAME);
|
||||
@@ -158,7 +164,7 @@ class Model
|
||||
$bound->setPrjUid($prjUid);
|
||||
$bound->setDiaUid($diaUid);
|
||||
$bound->setElementUid($activity->getActUid());
|
||||
$bound->setBouElementType(get_class($activity));
|
||||
$bound->setBouElementType(str_replace('Bpmn', 'bpmn', get_class($activity)));
|
||||
$bound->setBouElement('pm_canvas');
|
||||
$bound->setBouContainer('bpmnDiagram');
|
||||
$bound->save();
|
||||
@@ -177,6 +183,7 @@ class Model
|
||||
$evnUid = $event->getEvnUid();
|
||||
$oldEvnUid = $eventData['EVN_UID'];
|
||||
$uids[] = array('old_uid' => $oldEvnUid, 'new_uid' => $evnUid, 'object' => 'event');
|
||||
$mapId['event'][$oldEvnUid] = $evnUid;
|
||||
|
||||
$bound = new Bound();
|
||||
$bound->fromArray($eventData, BasePeer::TYPE_FIELDNAME);
|
||||
@@ -184,7 +191,7 @@ class Model
|
||||
$bound->setPrjUid($prjUid);
|
||||
$bound->setDiaUid($diaUid);
|
||||
$bound->setElementUid($event->getEvnUid());
|
||||
$bound->setBouElementType(get_class($event));
|
||||
$bound->setBouElementType(str_replace('Bpmn', 'bpmn', get_class($activity)));
|
||||
$bound->setBouElement('pm_canvas');
|
||||
$bound->setBouContainer('bpmnDiagram');
|
||||
$bound->save();
|
||||
@@ -203,6 +210,7 @@ class Model
|
||||
$gatUid = $gateway->getGatUid();
|
||||
$oldGatUid = $gatewayData['GAT_UID'];
|
||||
$uids[] = array('old_uid' => $oldGatUid, 'new_uid' => $gatUid, 'object' => 'gateway');
|
||||
$mapId['gateway'][$oldGatUid] = $gatUid;
|
||||
|
||||
$bound = new Bound();
|
||||
$bound->fromArray($gatewayData, BasePeer::TYPE_FIELDNAME);
|
||||
@@ -210,7 +218,7 @@ class Model
|
||||
$bound->setPrjUid($prjUid);
|
||||
$bound->setDiaUid($diaUid);
|
||||
$bound->setElementUid($gateway->getGatUid());
|
||||
$bound->setBouElementType(get_class($gateway));
|
||||
$bound->setBouElementType(str_replace('Bpmn', 'bpmn', get_class($activity)));
|
||||
$bound->setBouElement('pm_canvas');
|
||||
$bound->setBouContainer('bpmnDiagram');
|
||||
$bound->save();
|
||||
@@ -228,6 +236,31 @@ class Model
|
||||
$flow->setPrjUid($prjUid);
|
||||
$flow->setDiaUid($diaUid);
|
||||
$flow->setFloState($floState);
|
||||
|
||||
switch ($flow->getFloElementOriginType()) {
|
||||
case 'bpmnEvent':
|
||||
$flow->setFloElementOrigin($mapId['event'][$flowData['FLO_ELEMENT_ORIGIN']]);
|
||||
break;
|
||||
case 'bpmnGateway':
|
||||
$flow->setFloElementOrigin($mapId['gateway'][$flowData['FLO_ELEMENT_ORIGIN']]);
|
||||
break;
|
||||
case 'bpmnActivity':
|
||||
$flow->setFloElementOrigin($mapId['activity'][$flowData['FLO_ELEMENT_ORIGIN']]);
|
||||
break;
|
||||
}
|
||||
|
||||
switch ($flow->getFloElementDestType()) {
|
||||
case 'bpmnEvent':
|
||||
$flow->setFloElementDest($mapId['event'][$flowData['FLO_ELEMENT_DEST']]);
|
||||
break;
|
||||
case 'bpmnGateway':
|
||||
$flow->setFloElementDest($mapId['gateway'][$flowData['FLO_ELEMENT_DEST']]);
|
||||
break;
|
||||
case 'bpmnActivity':
|
||||
$flow->setFloElementDest($mapId['activity'][$flowData['FLO_ELEMENT_DEST']]);
|
||||
break;
|
||||
}
|
||||
|
||||
$flow->save();
|
||||
|
||||
$floUid = $flow->getFloUid();
|
||||
@@ -329,9 +362,20 @@ class Model
|
||||
return $projects;
|
||||
}
|
||||
|
||||
public static function getRelatedFlows($actUid)
|
||||
{
|
||||
$flows = array(
|
||||
'origin' => self::getBpmnCollectionBy('Flow', FlowPeer::FLO_ELEMENT_ORIGIN, $actUid, true),
|
||||
'dest' => self::getBpmnCollectionBy('Flow', FlowPeer::FLO_ELEMENT_DEST, $actUid, true)
|
||||
);
|
||||
|
||||
return $flows;
|
||||
}
|
||||
|
||||
|
||||
/*** Private Functions ***/
|
||||
|
||||
private static function getAllBpmnCollectionFrom($class, $changeCase = false)
|
||||
public static function getAllBpmnCollectionFrom($class, $changeCase = false)
|
||||
{
|
||||
$data = array();
|
||||
|
||||
@@ -350,7 +394,40 @@ class Model
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function getBpmnCollectionBy($class, $field, $value, $changeCase = false)
|
||||
public static function select($select, $from, $where = '', $changeCase = false)
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$c = new \Criteria('workflow');
|
||||
if ($select != '*') {
|
||||
if (is_array($select)) {
|
||||
foreach ($select as $column) {
|
||||
$c->addSelectColumn($column);
|
||||
}
|
||||
} else {
|
||||
$c->addSelectColumn($field);
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($where)) {
|
||||
foreach ($where as $column => $value) {
|
||||
$c->add($column, $value);
|
||||
}
|
||||
}
|
||||
|
||||
$classPeer = 'Bpmn' . $from . 'Peer';
|
||||
$rs = $classPeer::doSelectRS($c);
|
||||
|
||||
$rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
while ($rs->next()) {
|
||||
$data[] = $changeCase ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow();
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public static function getBpmnCollectionBy($class, $field, $value, $changeCase = false)
|
||||
{
|
||||
$data = array();
|
||||
|
||||
@@ -369,7 +446,7 @@ class Model
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function getBpmnObjectBy($class, $field, $value, $changeCase = false)
|
||||
public static function getBpmnObjectBy($class, $field, $value, $changeCase = false)
|
||||
{
|
||||
$record = self::getBpmnCollectionBy($class, $field, $value, $changeCase);
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Adapter\Bpmn;
|
||||
namespace ProcessMaker\Adapter;
|
||||
|
||||
use \Process;
|
||||
use \ProcessMaker\Adapter\Bpmn\Model as BpmnModel;
|
||||
|
||||
/**
|
||||
* Class Workflow
|
||||
@@ -11,9 +12,27 @@ use \Process;
|
||||
*/
|
||||
class Workflow
|
||||
{
|
||||
public static $bpmnTypesEquiv = array(
|
||||
'event' => array(
|
||||
'START' => 'START' // to define task start
|
||||
),
|
||||
'flow' => array(
|
||||
'SEQUENCE' => 'SEQUENTIAL' // to define task start
|
||||
)
|
||||
);
|
||||
|
||||
public function loadFromBpmnProject($bpmnProject)
|
||||
{
|
||||
$proUid = $bpmnProject['prj_uid'];
|
||||
$bpmnTypesEquiv = array(
|
||||
'event' => array(
|
||||
'start' => 'start' // to define task start
|
||||
),
|
||||
'flow' => array(
|
||||
'SEQUENCE' => 'SEQUENTIAL' // to define task start
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
$process = array();
|
||||
$process['PRO_UID'] = $proUid;
|
||||
@@ -24,7 +43,7 @@ class Workflow
|
||||
$process['PRO_UID'] = $proUid;
|
||||
$process['tasks'] = array();
|
||||
|
||||
$diagram = $bpmnProject['prj_name']['diagrams'][0];
|
||||
$diagram = $bpmnProject['diagrams'][0];
|
||||
|
||||
foreach ($diagram['activities'] as $activity) {
|
||||
$process['tasks'][] = array(
|
||||
@@ -33,21 +52,58 @@ class Workflow
|
||||
'TAS_DESCRIPTION' => $activity['act_name'],
|
||||
'TAS_POSX' => $activity['bou_x'],
|
||||
'TAS_POSY' => $activity['bou_y'],
|
||||
'TAS_START' => self::activityIsStartTask($activity['act_uid'])
|
||||
'TAS_START' => (self::activityIsStartTask($activity['act_uid']) ? 'TRUE' : 'FALSE')
|
||||
);
|
||||
}
|
||||
|
||||
$process['routes'][] = array(
|
||||
'ROU_UID' => '',
|
||||
'TAS_UID' => '',
|
||||
'ROU_NEXT_TASK' => '',
|
||||
'ROU_TYPE' => ''
|
||||
);
|
||||
foreach ($diagram['flows'] as $flow) {
|
||||
$process['routes'][] = array(
|
||||
'ROU_UID' => '',
|
||||
'TAS_UID' => self::getTask($activity['act_uid']),
|
||||
'ROU_NEXT_TASK' => self::getNextTask($activity['act_uid']),
|
||||
'ROU_TYPE' => ''
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $process;
|
||||
}
|
||||
|
||||
private static getTask($activity['act_uid'])
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private static getNextTask($activity['act_uid'])
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static function activityIsStartTask($actUid)
|
||||
{
|
||||
/*
|
||||
* 1. find bpmn flows related to target activity
|
||||
* 2. verify is the flow_element_origin_type is a BpmnEvent and it have a evn_type = start
|
||||
*/
|
||||
$selection = BpmnModel::select('*', 'Flow', array(
|
||||
\BpmnFlowPeer::FLO_ELEMENT_DEST => $actUid,
|
||||
\BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE => 'bpmnActivity'
|
||||
));
|
||||
|
||||
foreach ($selection as $elementOrigin) {
|
||||
if ($elementOrigin['FLO_ELEMENT_ORIGIN_TYPE'] == 'bpmnEvent') {
|
||||
$event = BpmnModel::getBpmnObjectBy('Event', \BpmnEventPeer::EVN_UID, $elementOrigin['FLO_ELEMENT_ORIGIN']);
|
||||
|
||||
if ($event['EVN_TYPE'] == self::$bpmnTypesEquiv['event']['START']) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,8 @@ class Project extends Api
|
||||
try {
|
||||
$project = BpmnModel::loadProject($prjUid);
|
||||
|
||||
//$WorkflowProces = \ProcessMaker\Adapter\Workflow::loadFromBpmnProject($project);
|
||||
|
||||
return $project;
|
||||
} catch (\Exception $e) {
|
||||
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||
|
||||
Reference in New Issue
Block a user