Merge assignees y triggers

This commit is contained in:
Freddy Daniel Rojas Valda
2013-12-06 11:12:48 -04:00
8 changed files with 573 additions and 8 deletions

View File

@@ -186,7 +186,7 @@ class Step
"step_type_obj" => $row["STEP_TYPE_OBJ"],
"step_uid_obj" => $row["STEP_UID_OBJ"],
"step_condition" => $row["STEP_CONDITION"],
"step_position" => $row["STEP_POSITION"],
"step_position" => (int)($row["STEP_POSITION"]),
"step_mode" => $row["STEP_MODE"],
"obj_title" => $titleObj,
"obj_description" => $descriptionObj
@@ -197,5 +197,184 @@ class Step
throw $e;
}
}
/**
* Get data of unique ids of an Step (Unique id of Task and Process)
*
* @param string $stepUid Unique id of the Step
*
* return array
*/
public function getDataUids($stepUid)
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\StepPeer::PRO_UID);
$criteria->addSelectColumn(\StepPeer::TAS_UID);
$criteria->add(\StepPeer::STEP_UID, $stepUid, \Criteria::EQUAL);
$rsCriteria = \StepPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
return $rsCriteria->getRow();
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get available triggers for an Step
*
* @param string $stepUid Unique id of the Step
* @param string $type Type (BEFORE, AFTER)
*
* return array
*/
public function getAvailableTriggers($stepUid, $type)
{
try {
$arrayAvailableTrigger = array();
$trigger = new \BusinessModel\Trigger();
$arrayDataUid = $this->getDataUids($stepUid);
$processUid = $arrayDataUid["PRO_UID"];
//Get Uids
$arrayUid = array();
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\StepTriggerPeer::TRI_UID);
$criteria->add(\StepTriggerPeer::STEP_UID, $stepUid, \Criteria::EQUAL);
$criteria->add(\StepTriggerPeer::ST_TYPE, $type, \Criteria::EQUAL);
$rsCriteria = \StepTriggerPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayUid[] = $row["TRI_UID"];
}
//Criteria
$criteria = $trigger->getTriggerCriteria();
$criteria->add(\TriggersPeer::TRI_UID, $arrayUid, \Criteria::NOT_IN);
$criteria->add(\TriggersPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$criteria->addAscendingOrderByColumn("TRI_TITLE");
$rsCriteria = \TriggersPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayAvailableTrigger[] = array(
"tri_uid" => $row["TRI_UID"],
"tri_title" => $row["TRI_TITLE"],
"tri_description" => $row["TRI_DESCRIPTION"],
"tri_type" => $row["TRI_TYPE"],
"tri_webbot" => $row["TRI_WEBBOT"],
"tri_param" => $row["TRI_PARAM"]
);
}
return $arrayAvailableTrigger;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get all triggers of an Step
*
* @param string $stepUid Unique id of the Step
*
* return array
*/
public function getTriggers($stepUid)
{
try {
$arrayTrigger = array();
$trigger = new \BusinessModel\Trigger();
$arrayDataUid = $this->getDataUids($stepUid);
$taskUid = $arrayDataUid["TAS_UID"];
$processMap = new \ProcessMap();
$stepTrigger = new \StepTrigger();
$arrayTriggerType1 = array(
"BEFORE" => "BEFORE",
"AFTER" => "AFTER"
);
$arrayTriggerType2 = array(
"BEFORE_ASSIGNMENT" => "BEFORE",
"BEFORE_ROUTING" => "BEFORE",
"AFTER_ROUTING" => "AFTER"
);
$arrayTriggerType = ($stepUid != "")? $arrayTriggerType1 : $arrayTriggerType2;
foreach ($arrayTriggerType as $index => $value) {
$triggerType = $index;
$type = $value;
switch ($triggerType) {
case "BEFORE_ASSIGNMENT":
$stepUid = "-1";
break;
case "BEFORE_ROUTING":
$stepUid = "-2";
break;
case "AFTER_ROUTING":
$stepUid = "-2";
break;
}
$stepTrigger->orderPosition($stepUid, $taskUid, $type);
//Criteria
$criteria = $trigger->getTriggerCriteria();
$criteria->addSelectColumn(\StepTriggerPeer::ST_CONDITION);
$criteria->addSelectColumn(\StepTriggerPeer::ST_POSITION);
$criteria->addJoin(\StepTriggerPeer::TRI_UID, \TriggersPeer::TRI_UID, \Criteria::LEFT_JOIN);
$criteria->add(\StepTriggerPeer::STEP_UID, $stepUid, \Criteria::EQUAL);
$criteria->add(\StepTriggerPeer::TAS_UID, $taskUid, \Criteria::EQUAL);
$criteria->add(\StepTriggerPeer::ST_TYPE, $type, \Criteria::EQUAL);
$criteria->addAscendingOrderByColumn(\StepTriggerPeer::ST_POSITION);
$rsCriteria = \StepTriggerPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayTrigger[] = array(
"tri_uid" => $row["TRI_UID"],
"tri_title" => $row["TRI_TITLE"],
"tri_description" => $row["TRI_DESCRIPTION"],
"st_type" => $triggerType,
"st_condition" => $row["ST_CONDITION"],
"st_position" => (int)($row["ST_POSITION"])
);
}
}
return $arrayTrigger;
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -0,0 +1,118 @@
<?php
namespace BusinessModel\Step;
class Trigger
{
/**
* Assign Trigger to an Step
*
* @param string $stepUid Unique id of the Step
* @param string $triggerUid Unique id of the Trigger
* @param string $type Type (BEFORE, AFTER)
* @param array $arrayData Data
*
* return void
*/
public function create($stepUid, $triggerUid, $type, $arrayData)
{
try {
$step = new \BusinessModel\Step();
$arrayDataUid = $step->getDataUids($stepUid);
$taskUid = $arrayDataUid["TAS_UID"];
//Create
$stepTrigger = new \StepTrigger();
$stepTrigger->create(array("STEP_UID" => $stepUid, "TAS_UID" => $taskUid, "TRI_UID" => $triggerUid, "ST_TYPE" => $type));
if (!isset($arrayData["st_position"]) || $arrayData["st_position"] == "") {
$arrayData["st_position"] = $stepTrigger->getNextPosition($stepUid, $type, $taskUid) - 1;
}
$this->update($stepUid, $triggerUid, $type, $arrayData);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Update Trigger of an Step
*
* @param string $stepUid Unique id of the Step
* @param string $triggerUid Unique id of the Trigger
* @param string $type Type (BEFORE, AFTER)
* @param array $arrayData Data
*
* return void
*/
public function update($stepUid, $triggerUid, $type, $arrayData)
{
try {
$step = new \BusinessModel\Step();
$arrayDataUid = $step->getDataUids($stepUid);
$taskUid = $arrayDataUid["TAS_UID"];
//Update
$stepTrigger = new \StepTrigger();
$arrayUpdateData = array();
$arrayUpdateData["STEP_UID"] = $stepUid;
$arrayUpdateData["TAS_UID"] = $taskUid;
$arrayUpdateData["TRI_UID"] = $triggerUid;
$arrayUpdateData["ST_TYPE"] = $type;
if (isset($arrayData["st_condition"])) {
$arrayUpdateData["ST_CONDITION"] = $arrayData["st_condition"];
}
if (isset($arrayData["st_position"]) && $arrayData["st_position"] != "") {
$arrayUpdateData["ST_POSITION"] = (int)($arrayData["st_position"]);
}
$stepTrigger->update($arrayUpdateData);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Delete Trigger of an Step
*
* @param string $stepUid Unique id of the Step
* @param string $triggerUid Unique id of the Trigger
* @param string $type Type (BEFORE, AFTER)
*
* return void
*/
public function delete($stepUid, $triggerUid, $type)
{
try {
$step = new \BusinessModel\Step();
$arrayDataUid = $step->getDataUids($stepUid);
$taskUid = $arrayDataUid["TAS_UID"];
//Get position
$stepTrigger = new \StepTrigger();
$arrayData = $stepTrigger->load($stepUid, $taskUid, $triggerUid, $type);
$position = (int)($arrayData["ST_POSITION"]);
//Delete
$stepTrigger = new \StepTrigger();
$stepTrigger->reOrder($stepUid, $taskUid, $type, $position);
$stepTrigger->remove($stepUid, $taskUid, $triggerUid, $type);
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -248,18 +248,47 @@ class Task
}
/**
* Get available steps of an Task
* Get data of unique ids of an Task (Unique id of Process)
*
* @param string $taskUid
* @param string $processUid
* @param string $taskUid Unique id of the Task
*
* return array
*/
public function getAvailableSteps($taskUid, $processUid)
public function getDataUids($taskUid)
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\TaskPeer::PRO_UID);
$criteria->add(\TaskPeer::TAS_UID, $taskUid, \Criteria::EQUAL);
$rsCriteria = \TaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
return $rsCriteria->getRow();
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get available steps of an Task
*
* @param string $taskUid
*
* return array
*/
public function getAvailableSteps($taskUid)
{
try {
$arrayAvailableStep = array();
$arrayDataUid = $this->getDataUids($taskUid);
$processUid = $arrayDataUid["PRO_UID"];
//Get Uids
$arrayUid = array();

View File

@@ -0,0 +1,83 @@
<?php
namespace BusinessModel;
class Trigger
{
/**
* Get criteria for Trigger
*
* return object
*/
public function getTriggerCriteria()
{
try {
$delimiter = \DBAdapter::getStringDelimiter();
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\TriggersPeer::TRI_UID);
$criteria->addAsColumn("TRI_TITLE", "CT.CON_VALUE");
$criteria->addAsColumn("TRI_DESCRIPTION", "CD.CON_VALUE");
$criteria->addSelectColumn(\TriggersPeer::TRI_TYPE);
$criteria->addSelectColumn(\TriggersPeer::TRI_WEBBOT);
$criteria->addSelectColumn(\TriggersPeer::TRI_PARAM);
$criteria->addAlias("CT", "CONTENT");
$criteria->addAlias("CD", "CONTENT");
$arrayCondition = array();
$arrayCondition[] = array(\TriggersPeer::TRI_UID, "CT.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "TRI_TITLE" . $delimiter, \Criteria::EQUAL);
$arrayCondition[] = array("CT.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
$arrayCondition = array();
$arrayCondition[] = array(\TriggersPeer::TRI_UID, "CD.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "TRI_DESCRIPTION" . $delimiter, \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
return $criteria;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get data of an Trigger
*
* @param string $triggerUid Unique id of the Trigger
*
* return array
*/
public function getTrigger($triggerUid)
{
try {
//Criteria
$criteria = $this->getTriggerCriteria();
$criteria->add(\TriggersPeer::TRI_UID, $triggerUid, \Criteria::EQUAL);
$rsCriteria = \TriggersPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
$row = $rsCriteria->getRow();
$arrayTrigger = array(
"tri_uid" => $row["TRI_UID"],
"tri_title" => $row["TRI_TITLE"],
"tri_description" => $row["TRI_DESCRIPTION"],
"tri_type" => $row["TRI_TYPE"],
"tri_webbot" => $row["TRI_WEBBOT"],
"tri_param" => $row["TRI_PARAM"]
);
return $arrayTrigger;
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -109,7 +109,7 @@ class Activity extends Api
try {
$task = new \BusinessModel\Task();
$response = $task->getAvailableSteps($activityUid, $projectUid);
$response = $task->getAvailableSteps($activityUid);
return $response;
} catch (\Exception $e) {

View File

@@ -87,6 +87,43 @@ class Step extends Api
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url GET /:projectUid/activity/:activityUid/step/:stepUid/triggers
*/
public function doGetActivityStepTriggers($stepUid, $activityUid, $projectUid)
{
try {
$step = new \BusinessModel\Step();
$response = $step->getTriggers($stepUid);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url GET /:projectUid/activity/:activityUid/step/:stepUid/available-triggers/:type
*
* @param string $stepUid
* @param string $activityUid
* @param string $projectUid
* @param string $type {@from body}{@choice before,after}
*/
public function doGetActivityStepAvailableTriggers($stepUid, $activityUid, $projectUid, $type)
{
try {
$step = new \BusinessModel\Step();
$response = $step->getAvailableTriggers($stepUid, strtoupper($type));
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
}
class StepStructure
@@ -120,4 +157,5 @@ class StepStructure
* @var string {@from body}{@choice EDIT,VIEW}
*/
public $step_mode;
}
}

View File

@@ -0,0 +1,118 @@
<?php
namespace Services\Api\ProcessMaker\Project\Activity\Step;
use \ProcessMaker\Services\Api;
use \Luracast\Restler\RestException;
/**
* Project\Activity\Step\Trigger Api Controller
*
* @protected
*/
class Trigger extends Api
{
/**
* @url GET /:projectUid/activity/:activityUid/step/:stepUid/trigger/:triggerUid
*/
public function doGetActivityStepTrigger($triggerUid, $stepUid, $activityUid, $projectUid)
{
try {
$trigger = new \BusinessModel\Trigger();
$response = $trigger->getTrigger($triggerUid);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url POST /:projectUid/activity/:activityUid/step/:stepUid/trigger
*
* @param string $stepUid
* @param string $activityUid
* @param string $projectUid
* @param StepTriggerStructure $request_data
*
* @status 201
*/
public function doPostActivityStepTrigger($stepUid, $activityUid, $projectUid, StepTriggerStructure $request_data = null)
{
try {
$request_data = (array)($request_data);
$stepTrigger = new \BusinessModel\Step\Trigger();
$stepTrigger->create($stepUid, $request_data["tri_uid"], $request_data["st_type"], $request_data);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url PUT /:projectUid/activity/:activityUid/step/:stepUid/trigger/:triggerUid
*
* @param string $triggerUid
* @param string $stepUid
* @param string $activityUid
* @param string $projectUid
* @param StepTriggerStructure $request_data
*/
public function doPutActivityStepTrigger($triggerUid, $stepUid, $activityUid, $projectUid, StepTriggerStructure $request_data = null)
{
try {
$request_data = (array)($request_data);
$stepTrigger = new \BusinessModel\Step\Trigger();
$stepTrigger->update($stepUid, $triggerUid, $request_data["st_type"], $request_data);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url DELETE /:projectUid/activity/:activityUid/step/:stepUid/trigger/:triggerUid/:type
*
* @param string $triggerUid
* @param string $stepUid
* @param string $activityUid
* @param string $projectUid
* @param string $type {@from body}{@choice before,after}
*/
public function doDeleteActivityStepTrigger($triggerUid, $stepUid, $activityUid, $projectUid, $type)
{
try {
$stepTrigger = new \BusinessModel\Step\Trigger();
$stepTrigger->delete($stepUid, $triggerUid, strtoupper($type));
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
}
class StepTriggerStructure
{
/**
* @var string {@from body}{@min 32}{@max 32}
*/
public $tri_uid;
/**
* @var string {@from body}{@choice BEFORE,AFTER}{@required true}
*/
public $st_type;
/**
* @var string
*/
public $st_condition;
/**
* @var int {@from body}{@min 1}
*/
public $st_position;
}

View File

@@ -15,5 +15,5 @@ debug = 1
[alias: project]
activity = "Services\Api\ProcessMaker\Project\Activity"
step = "Services\Api\ProcessMaker\Project\Activity\Step"
trigger = "Services\Api\ProcessMaker\Project\Activity\Step\Trigger"
assignee = "Services\Api\ProcessMaker\Project\Activity\Assignee"