Adding adapters for Workflow->Bpmn and Bpmn->Workflow projects, and more updates & fixes
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Exception;
|
||||
|
||||
use ProcessMaker\Project;
|
||||
|
||||
class ProjectAlreadyExists extends \RuntimeException
|
||||
{
|
||||
const EXCEPTION_CODE = 21;
|
||||
|
||||
public function __construct(Project\Handler $obj, $name, $message = "", \Exception $previous = null) {
|
||||
$message = empty($message) ? sprintf("Project \"%s\" with name: %s, already exists.", get_class($obj), $name) : $message;
|
||||
|
||||
parent::__construct($message, self::EXCEPTION_CODE, $previous);
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Project\Adapter;
|
||||
|
||||
use ProcessMaker\Project;
|
||||
use ProcessMaker\Util\Hash;
|
||||
|
||||
|
||||
class WorkflowBpmn extends Project\Workflow
|
||||
{
|
||||
/**
|
||||
* OVERRIDES
|
||||
*/
|
||||
|
||||
public function create($data)
|
||||
{
|
||||
try {
|
||||
parent::create($data);
|
||||
} catch (\Exception $e) {
|
||||
throw new \RuntimeException(sprintf("Can't create Workflow Project." . PHP_EOL . $e->getMessage()));
|
||||
}
|
||||
|
||||
try {
|
||||
$bpData = array();
|
||||
$bpData["PRJ_UID"] = $this->getUid();
|
||||
|
||||
if (array_key_exists("PRO_TITLE", $data)) {
|
||||
$bpData["PRJ_NAME"] = $data["PRO_TITLE"];
|
||||
}
|
||||
if (array_key_exists("PRO_DESCRIPTION", $data)) {
|
||||
$bpData["PRJ_DESCRIPTION"] = $data["PRO_DESCRIPTION"];
|
||||
}
|
||||
if (array_key_exists("PRO_CREATE_USER", $data)) {
|
||||
$bpData["PRJ_AUTHOR"] = $data["PRO_CREATE_USER"];
|
||||
} elseif (array_key_exists("USR_UID", $data)) {
|
||||
$bpData["PRJ_AUTHOR"] = $data["USR_UID"];
|
||||
}
|
||||
|
||||
$wp = new Project\Bpmn();
|
||||
$wp->create($bpData);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$prjUid = $this->getUid();
|
||||
$this->remove();
|
||||
|
||||
throw new \RuntimeException(sprintf(
|
||||
"Can't create Project with prj_uid: %s, workflow creation fails." . PHP_EOL . $e->getMessage()
|
||||
, $prjUid
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,15 +49,37 @@ class Workflow extends Handler
|
||||
public function create($data)
|
||||
{
|
||||
try {
|
||||
|
||||
// setting defaults
|
||||
$data['PRO_UID'] = array_key_exists('PRO_UID', $data) ? $data['PRO_UID'] : Hash::generateUID();
|
||||
$data['USR_UID'] = array_key_exists('PRO_CREATE_USER', $data) ? $data['PRO_CREATE_USER'] : null;
|
||||
$data['PRO_CATEGORY'] = array_key_exists('PRO_CATEGORY', $data) ? $data['PRO_CATEGORY'] : '';
|
||||
$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'] : "";
|
||||
|
||||
//validate if process with specified name already exists
|
||||
if (Process::existsByProTitle($data["PRO_TITLE"])) {
|
||||
throw new Exception\ProjectAlreadyExists($this, $data["PRO_TITLE"]);
|
||||
}
|
||||
|
||||
// Create project
|
||||
$process = new Process();
|
||||
$this->proUid = $process->create($data, false);
|
||||
|
||||
// Call Plugins
|
||||
$pluginData['PRO_UID'] = $this->proUid;
|
||||
$pluginData['PRO_TEMPLATE'] = empty($data["PRO_TEMPLATE"]) ? "" : $data["PRO_TEMPLATE"];
|
||||
$pluginData['PROCESSMAP'] = null;
|
||||
|
||||
$pluginRegistry = \PMPluginRegistry::getSingleton();
|
||||
$pluginRegistry->executeTriggers(PM_NEW_PROCESS_SAVE, $pluginData);
|
||||
|
||||
// Save Calendar ID for this process
|
||||
if (! empty($data["PRO_CALENDAR"])) {
|
||||
//G::LoadClass( "calendar" );
|
||||
$calendar = new \Calendar();
|
||||
$calendar->assignCalendarTo($this->proUid, $data["PRO_CALENDAR"], 'PROCESS');
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
throw new \RuntimeException($e);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
function testNew()
|
||||
{
|
||||
$data = array(
|
||||
"PRJ_NAME" => "Test BPMN Project #1",
|
||||
"PRJ_NAME" => "Test Bpmn/Workflow Project #1",
|
||||
"PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1",
|
||||
"PRJ_AUTHOR" => "00000000000000000000000000000001"
|
||||
);
|
||||
@@ -43,7 +43,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
function testCreate()
|
||||
{
|
||||
$data = array(
|
||||
"PRJ_NAME" => "Test BPMN Project #2",
|
||||
"PRJ_NAME" => "Test Bpmn/Workflow Project #2",
|
||||
"PRJ_DESCRIPTION" => "Description for - Test BPMN Project #2",
|
||||
"PRJ_AUTHOR" => "00000000000000000000000000000001"
|
||||
);
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
namespace Tests\ProcessMaker\Project\Adapter;
|
||||
|
||||
use \ProcessMaker\Project;
|
||||
|
||||
if (! class_exists("Propel")) {
|
||||
include_once __DIR__ . "/../../../bootstrap.php";
|
||||
}
|
||||
|
||||
|
||||
class WorkflowBpmnTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
function testNew()
|
||||
{
|
||||
$data = array(
|
||||
"PRO_TITLE" => "Test Workflow/Bpmn Project #1",
|
||||
"PRO_DESCRIPTION" => "Description for - Test Project #1",
|
||||
"PRO_CREATE_USER" => "00000000000000000000000000000001"
|
||||
);
|
||||
|
||||
$wbap = new Project\Adapter\WorkflowBpmn($data);
|
||||
|
||||
try {
|
||||
$bp = Project\Bpmn::load($wbap->getUid());
|
||||
} catch (\Exception $e){die($e->getMessage());}
|
||||
|
||||
try {
|
||||
$wp = Project\Workflow::load($wbap->getUid());
|
||||
} catch (\Exception $e){}
|
||||
|
||||
$this->assertNotNull($bp);
|
||||
$this->assertNotNull($wp);
|
||||
$this->assertEquals($bp->getUid(), $wp->getUid());
|
||||
|
||||
$project = $bp->getProject();
|
||||
$process = $wp->getProcess();
|
||||
|
||||
$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"]);
|
||||
}
|
||||
|
||||
function testCreate()
|
||||
{
|
||||
$data = array(
|
||||
"PRO_TITLE" => "Test Workflow/Bpmn Project #2",
|
||||
"PRO_DESCRIPTION" => "Description for - Test Project #2",
|
||||
"PRO_CREATE_USER" => "00000000000000000000000000000001"
|
||||
);
|
||||
$wbap = new Project\Adapter\WorkflowBpmn();
|
||||
$wbap->create($data);
|
||||
|
||||
try {
|
||||
$bp = Project\Bpmn::load($wbap->getUid());
|
||||
} catch (\Exception $e){}
|
||||
|
||||
try {
|
||||
$wp = Project\Workflow::load($wbap->getUid());
|
||||
} catch (\Exception $e){}
|
||||
|
||||
$this->assertNotEmpty($bp);
|
||||
$this->assertNotEmpty($wp);
|
||||
$this->assertEquals($bp->getUid(), $wp->getUid());
|
||||
|
||||
$project = $bp->getProject();
|
||||
$process = $wp->getProcess();
|
||||
|
||||
$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"]);
|
||||
}
|
||||
}
|
||||
@@ -267,7 +267,7 @@ class WorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
/**
|
||||
* @depends testCompleteWorkflowProject
|
||||
* @param $wp \ProcessMaker\Project\WorkflowProject
|
||||
* @param $wp \ProcessMaker\Project\Workflow
|
||||
* @expectedException \ProcessMaker\Exception\ProjectNotFound
|
||||
* @expectedExceptionCode 20
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user