Updating /project endpint, now is working GET /projects/{prj_uid} and /projects methods (only is loading diagram's activities)

This commit is contained in:
Erik Amaru Ortiz
2014-02-06 11:00:15 -04:00
parent e714847d79
commit 6b8ca3c9ee
6 changed files with 204 additions and 33 deletions

View File

@@ -4,7 +4,10 @@ namespace ProcessMaker\Project\Adapter;
use ProcessMaker\Project;
use ProcessMaker\Util\Hash;
/**
* Class BpmnWorkflow
* @package ProcessMaker\Project\Adapter
*/
class BpmnWorkflow extends Project\Bpmn
{
/**

View File

@@ -35,8 +35,12 @@ class WorkflowBpmn extends Project\Workflow
$bpData["PRJ_AUTHOR"] = $data["USR_UID"];
}
$wp = new Project\Bpmn();
$wp->create($bpData);
$bp = new Project\Bpmn();
$bp->create($bpData);
// At this time we will add a default diagram and process
$bp->addDiagram();
$bp->addProcess();
} catch (\Exception $e) {
$prjUid = $this->getUid();

View File

@@ -170,7 +170,7 @@ class Bpmn extends Handler
}
}
return $retType == "array" ? $this->diagram->toArray() : $this->diagram;
return ($retType == "array" && is_object($this->diagram)) ? $this->diagram->toArray() : $this->diagram;
}
public function addProcess($data = array())
@@ -233,9 +233,13 @@ class Bpmn extends Handler
return $activity;
}
public function getActivities()
public function getActivities($start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER)
{
return Activity::getAll($this->getUid());
if (is_array($start)) {
extract($start);
}
return Activity::getAll($this->getUid(), $start, $limit, $filter, $changeCaseTo);
}
public function updateActivity($actUid, $data)
@@ -285,9 +289,10 @@ class Bpmn extends Handler
return $this->events[$evnUid];
}
public function getEvents($retType)
public function getEvents($retType = "array")
{
return Event::getAll($this->project->getPrjUid(), null, null, '', 'object');
//return Event::getAll($this->project->getPrjUid(), null, null, '', 'object');
return array();
}
public function addGateway($data)
@@ -321,7 +326,8 @@ class Bpmn extends Handler
public function getGateways($retType = 'array')
{
return Activity::getAll($this->project->getPrjUid(), null, null, '', $retType);
//return Activity::getAll($this->project->getPrjUid(), null, null, '', $retType);
return array();
}
public function addFlow($data)
@@ -354,7 +360,8 @@ class Bpmn extends Handler
public function getFlows($retType = 'array')
{
return Activity::getAll($this->project->getPrjUid(), null, null, '', $retType);
//return Activity::getAll($this->project->getPrjUid(), null, null, '', $retType);
return array();
}
public function addArtifact($data)
@@ -370,6 +377,7 @@ class Bpmn extends Handler
public function getArtifacts()
{
// TODO: Implement update() method.
return array();
}
public function addLane($data)
@@ -385,6 +393,7 @@ class Bpmn extends Handler
public function getLanes()
{
// TODO: Implement update() method.
return array();
}
public function addLaneset($data)
@@ -400,5 +409,107 @@ class Bpmn extends Handler
public function getLanesets()
{
// TODO: Implement update() method.
return array();
}
/*
* Others functions/methods
*/
public static function getDiffFromProjects($updatedProject)
{
// preparing target project
$diagramElements = array(
'act_uid' => 'activities',
'evn_uid' => 'events',
'flo_uid' => 'flows',
'art_uid' => 'artifacts',
'lns_uid' => 'laneset',
'lan_uid' => 'lanes'
);
// Getting Differences
$newRecords = array();
$newRecordsUids = array();
$deletedRecords = array();
$updatedRecords = array();
// Get new records
foreach ($diagramElements as $key => $element) {
if (! array_key_exists($element, $updatedProject['diagrams'][0])) {
continue;
}
/*print_r($savedProject['diagrams'][0][$element]);
print_r($updatedProject['diagrams'][0][$element]);
var_dump($key);*/
$arrayDiff = self::arrayDiff(
$savedProject['diagrams'][0][$element],
$updatedProject['diagrams'][0][$element],
$key
);
if (! empty($arrayDiff)) {
$newRecordsUids[$element] = $arrayDiff;
foreach ($updatedProject['diagrams'][0][$element] as $item) {
if (in_array($item[$key], $newRecordsUids[$element])) {
$newRecords[$element][] = $item;
}
}
}
}
// Get deleted records
foreach ($diagramElements as $key => $element) {
if (! array_key_exists($element, $updatedProject['diagrams'][0])) {
continue;
}
$arrayDiff = self::arrayDiff(
$updatedProject['diagrams'][0][$element],
$savedProject['diagrams'][0][$element],
$key
);
if (! empty($arrayDiff)) {
$deletedRecords[$element] = $arrayDiff;
}
}
// Get updated records
$checksum = array();
foreach ($diagramElements as $key => $element) {
$checksum[$element] = self::getArrayChecksum($savedProject['diagrams'][0][$element], $key);
}
foreach ($diagramElements as $key => $element) {
if (! array_key_exists($element, $updatedProject['diagrams'][0])) {
continue;
}
foreach ($updatedProject['diagrams'][0][$element] as $item) {
if ((array_key_exists($element, $newRecordsUids) && in_array($item[$key], $newRecordsUids[$element])) ||
(array_key_exists($element, $deletedRecords) && in_array($item[$key], $deletedRecords[$element]))
) {
// skip new or deleted records
continue;
}
if (self::getChecksum($item) !== $checksum[$element][$item[$key]]) {
$updatedRecords[$element][] = $item;
}
}
}
$diff = array(
'new' => $newRecords,
'deleted' => $deletedRecords,
'updated' => $updatedRecords
);
return $diff;
}
}

View File

@@ -15,6 +15,26 @@ abstract class Handler
//public abstract function update();
public abstract function remove();
protected static function diffArrayByKey($key, $list, $targetList)
{
$uid = array();
$diff = array();
foreach ($list as $item) {
if (array_key_exists($key, $item)) {
$uid[] = $item[$key];
}
}
foreach ($targetList as $item) {
if (! in_array($item[$key], $uid)) {
$diff[] = $item[$key];
}
}
return $diff;
}
/**
* Log in ProcessMaker Standard Output if debug mode is enabled.
*

View File

@@ -34,9 +34,24 @@ class Project extends Api
public function get($prjUid)
{
try {
$projects = new \StdClass(); //TODO
$bwp = \ProcessMaker\Project\Adapter\BpmnWorkflow::load($prjUid);
return $projects;
$project = array_change_key_case($bwp->getProject(), CASE_LOWER);
$diagram = $bwp->getDiagram();
if (! is_null($diagram)) {
$diagram = array_change_key_case($diagram, CASE_LOWER);
$diagram["activities"] = $bwp->getActivities(array("changeCaseTo" => CASE_LOWER));
$diagram["events"] = $bwp->getEvents();
$diagram["flows"] = $bwp->getFlows();
$diagram["artifacts"] = $bwp->getArtifacts();
$diagram["laneset"] = $bwp->getLanesets();
$diagram["lanes"] = $bwp->getLanes();
$project["diagrams"][] = $diagram;
}
return $project;
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
@@ -48,27 +63,28 @@ class Project extends Api
public function post($request_data)
{
try {
$config = array();
$config['project'] = array('replace_uids' => true);
// NEED REFACTOR
// $config = array();
// $config['project'] = array('replace_uids' => true);
//
// $bpmnModel = new BpmnModel();
// $result = $bpmnModel->createProject($request_data, $config['project']['replace_uids']);
//
// if (array_key_exists('prj_uid', $result)) {
// $prjUid = $result['prj_uid'];
// } else {
// $prjUid = $result[0]['new_uid'];
// }
//
// $wfProcess = Workflow::loadFromBpmnProject($prjUid);
//
// $process = new \BusinessModel\Process();
// $userUid = $this->getUserId();
// $data = array('process' => $wfProcess);
//
// $process->createProcess($userUid, $data);
$bpmnModel = new BpmnModel();
$result = $bpmnModel->createProject($request_data, $config['project']['replace_uids']);
if (array_key_exists('prj_uid', $result)) {
$prjUid = $result['prj_uid'];
} else {
$prjUid = $result[0]['new_uid'];
}
$wfProcess = Workflow::loadFromBpmnProject($prjUid);
$process = new \BusinessModel\Process();
$userUid = $this->getUserId();
$data = array('process' => $wfProcess);
$process->createProcess($userUid, $data);
return $result;
// return $result;
} catch (\Exception $e) {
// TODO in case that $process->createProcess($userUid, $data); fails maybe the BPMN project was created successfully
// so, we need remove it or change the creation order.
@@ -81,7 +97,8 @@ class Project extends Api
{
try {
$result = BpmnModel::updateProject($prjUid, $request_data);
//$result = BpmnModel::updateProject($prjUid, $request_data);
return $result;
} catch (\Exception $e) {

View File

@@ -69,5 +69,21 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($project["PRJ_NAME"], $process["PRO_TITLE"]);
$this->assertEquals($project["PRJ_DESCRIPTION"], $process["PRO_DESCRIPTION"]);
$this->assertEquals($project["PRJ_AUTHOR"], $process["PRO_CREATE_USER"]);
$bwap->addDiagram();
$bwap->addProcess();
// Save to DB
$bwap->addActivity(array(
"ACT_NAME" => "Activity #1",
"BOU_X" => "50",
"BOU_Y" => "50"
));
$bwap->addActivity(array(
"ACT_NAME" => "Activity #2",
"BOU_X" => "250",
"BOU_Y" => "250"
));
}
}