Merged in victorsl/processmaker (pull request #77)

ProcessMaker-MA "Case Tracker (endpoints)"
This commit is contained in:
erik ao
2014-01-14 17:36:11 -04:00
5 changed files with 1035 additions and 0 deletions

View File

@@ -0,0 +1,466 @@
<?php
namespace BusinessModel;
class CaseTracker
{
/**
* Get data from a request data
*
* @param object $requestData Request data
*
* return array Return an array with data of request data
*/
public function getArrayDataFromRequestData($requestData)
{
try {
$arrayData = array();
$requestData = (array)($requestData);
foreach ($requestData as $key => $value) {
$arrayData[$key] = $value;
}
return $arrayData;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Update Case Tracker data of a Process
*
* @param string $processUid Unique id of Process
* @param array $arrayData Data
*
* return array Return data of the Case Tracker updated
*/
public function update($processUid, $arrayData)
{
try {
$arrayDataIni = $arrayData;
//Verify data
$process = new \Process();
if (!$process->exists($processUid)) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}")));
}
//Update
$caseTracker = new \CaseTracker();
$arrayData = array("PRO_UID" => $processUid);
if (isset($arrayDataIni["map_type"])) {
$arrayData["CT_MAP_TYPE"] = $arrayDataIni["map_type"];
}
if (isset($arrayDataIni["routing_history"])) {
$arrayData["CT_DERIVATION_HISTORY"] = ($arrayDataIni["routing_history"])? 1 : 0;
}
if (isset($arrayDataIni["message_history"])) {
$arrayData["CT_MESSAGE_HISTORY"] = ($arrayDataIni["message_history"])? 1 : 0;
}
$result = $caseTracker->update($arrayData);
$arrayData = $arrayDataIni;
//Return
return $arrayData;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get Case Tracker data of a Process
*
* @param string $processUid Unique id of Process
*
* return array Return an array with data of Case Tracker of a Process
*/
public function getCaseTracker($processUid)
{
try {
$arrayCaseTracker = array();
//Verify data
$process = new \Process();
if (!$process->exists($processUid)) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}")));
}
//Get data
$criteria = new \Criteria();
$criteria->add(\CaseTrackerPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$rsCriteria = \CaseTrackerPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayCaseTracker = $row;
} else {
$caseTracker = new \CaseTracker();
$arrayCaseTracker = array(
"PRO_UID" => $processUid,
"CT_MAP_TYPE" => "PROCESSMAP",
"CT_DERIVATION_HISTORY" => 1,
"CT_MESSAGE_HISTORY" => 1
);
$caseTracker->create($arrayCaseTracker);
}
return array(
"map_type" => $arrayCaseTracker["CT_MAP_TYPE"],
"routing_history" => ($arrayCaseTracker["CT_DERIVATION_HISTORY"] == 1)? true : false,
"message_history" => ($arrayCaseTracker["CT_MESSAGE_HISTORY"] == 1)? true : false
);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get available Case Tracker Objects of a Process
*
* @param string $processUid Unique id of Process
*
* return array Return an array with the Case Tracker Objects available of a Process
*/
public function getAvailableCaseTrackerObjects($processUid)
{
try {
$arrayAvailableCaseTrackerObject = array();
//Verify data
$process = new \Process();
if (!$process->exists($processUid)) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}")));
}
//Get Uids
$arrayDynaFormUid = array();
$arrayInputDocumentUid = array();
$arrayOutputDocumentUid = array();
$criteria = new \Criteria("workflow");
$criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
switch ($row["CTO_TYPE_OBJ"]) {
case "DYNAFORM":
$arrayDynaFormUid[] = $row["CTO_UID_OBJ"];
break;
case "INPUT_DOCUMENT":
$arrayInputDocumentUid[] = $row["CTO_UID_OBJ"];
break;
case "OUTPUT_DOCUMENT":
$arrayOutputDocumentUid[] = $row["CTO_UID_OBJ"];
break;
}
}
//Array DB
$arrayCaseTrackerObject = array();
$arrayCaseTrackerObject[] = array(
"obj_uid" => "char",
"obj_title" => "char",
"obj_description" => "char",
"obj_type" => "char"
);
$delimiter = \DBAdapter::getStringDelimiter();
//DynaForms
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\DynaformPeer::DYN_UID);
$criteria->addAsColumn("DYN_TITLE", "CT.CON_VALUE");
$criteria->addAsColumn("DYN_DESCRIPTION", "CD.CON_VALUE");
$criteria->addAlias("CT", \ContentPeer::TABLE_NAME);
$criteria->addAlias("CD", \ContentPeer::TABLE_NAME);
$arrayCondition = array();
$arrayCondition[] = array(\DynaformPeer::DYN_UID, "CT.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "DYN_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(\DynaformPeer::DYN_UID, "CD.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "DYN_DESCRIPTION" . $delimiter, \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
$criteria->add(\DynaformPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$criteria->add(\DynaformPeer::DYN_UID, $arrayDynaFormUid, \Criteria::NOT_IN);
$criteria->add(\DynaformPeer::DYN_TYPE, "xmlform", \Criteria::EQUAL);
$rsCriteria = \DynaformPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
if ($row["DYN_TITLE"] . "" == "") {
//There is no transaltion for this Document name, try to get/regenerate the label
$row["DYN_TITLE"] = \Content::Load("DYN_TITLE", "", $row["DYN_UID"], SYS_LANG);
}
$arrayCaseTrackerObject[] = array(
"obj_uid" => $row["DYN_UID"],
"obj_title" => $row["DYN_TITLE"],
"obj_description" => $row["DYN_DESCRIPTION"],
"obj_type" => "DYNAFORM"
);
}
//InputDocuments
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\InputDocumentPeer::INP_DOC_UID);
$criteria->addAsColumn("INP_DOC_TITLE", "CT.CON_VALUE");
$criteria->addAsColumn("INP_DOC_DESCRIPTION", "CD.CON_VALUE");
$criteria->addAlias("CT", \ContentPeer::TABLE_NAME);
$criteria->addAlias("CD", \ContentPeer::TABLE_NAME);
$arrayCondition = array();
$arrayCondition[] = array(\InputDocumentPeer::INP_DOC_UID, "CT.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "INP_DOC_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(\InputDocumentPeer::INP_DOC_UID, "CD.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "INP_DOC_DESCRIPTION" . $delimiter, \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
$criteria->add(\InputDocumentPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$criteria->add(\InputDocumentPeer::INP_DOC_UID, $arrayInputDocumentUid, \Criteria::NOT_IN);
$rsCriteria = \InputDocumentPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
if ($row["INP_DOC_TITLE"] . "" == "") {
//There is no transaltion for this Document name, try to get/regenerate the label
$row["INP_DOC_TITLE"] = \Content::Load("INP_DOC_TITLE", "", $row["INP_DOC_UID"], SYS_LANG);
}
$arrayCaseTrackerObject[] = array(
"obj_uid" => $row["INP_DOC_UID"],
"obj_title" => $row["INP_DOC_TITLE"],
"obj_description" => $row["INP_DOC_DESCRIPTION"],
"obj_type" => "INPUT_DOCUMENT"
);
}
//OutputDocuments
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_UID);
$criteria->addAsColumn("OUT_DOC_TITLE", "CT.CON_VALUE");
$criteria->addAsColumn("OUT_DOC_DESCRIPTION", "CD.CON_VALUE");
$criteria->addAlias("CT", \ContentPeer::TABLE_NAME);
$criteria->addAlias("CD", \ContentPeer::TABLE_NAME);
$arrayCondition = array();
$arrayCondition[] = array(\OutputDocumentPeer::OUT_DOC_UID, "CT.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "OUT_DOC_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(\OutputDocumentPeer::OUT_DOC_UID, "CD.CON_ID", \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "OUT_DOC_DESCRIPTION" . $delimiter, \Criteria::EQUAL);
$arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
$criteria->add(\OutputDocumentPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$criteria->add(\OutputDocumentPeer::OUT_DOC_UID, $arrayOutputDocumentUid, \Criteria::NOT_IN);
$rsCriteria = \OutputDocumentPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
if ($row["OUT_DOC_TITLE"] . "" == "") {
//There is no transaltion for this Document name, try to get/regenerate the label
$row["OUT_DOC_TITLE"] = \Content::Load("OUT_DOC_TITLE", "", $row["OUT_DOC_UID"], SYS_LANG);
}
$arrayCaseTrackerObject[] = array(
"obj_uid" => $row["OUT_DOC_UID"],
"obj_title" => $row["OUT_DOC_TITLE"],
"obj_description" => $row["OUT_DOC_DESCRIPTION"],
"obj_type" => "OUTPUT_DOCUMENT"
);
}
//Set data
\G::LoadClass("ArrayPeer");
global $_DBArray;
$_DBArray = (isset($_SESSION["_DBArray"]))? $_SESSION["_DBArray"] : "";
$_DBArray["CASE_TRACKER_OBJECT"] = $arrayCaseTrackerObject;
$_SESSION["_DBArray"] = $_DBArray;
$criteria = new \Criteria("dbarray");
$criteria->setDBArrayTable("CASE_TRACKER_OBJECT");
$criteria->addAscendingOrderByColumn("obj_type");
$criteria->addAscendingOrderByColumn("obj_title");
$rsCriteria = \ArrayBasePeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayAvailableCaseTrackerObject[] = $row;
}
return $arrayAvailableCaseTrackerObject;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get all Case Tracker Objects of a Process
*
* @param string $processUid Unique id of Process
*
* return array Return an array with all Case Tracker Objects of a Process
*/
public function getCaseTrackerObjects($processUid)
{
try {
$arrayCaseTrackerObject = array();
//Verify data
$process = new \Process();
if (!$process->exists($processUid)) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}")));
}
$dynaform = new \Dynaform();
$inputDocument = new \InputDocument();
$outputDocument = new \OutputDocument();
//Array DB
$arraydbCaseTrackerObject = array();
$arraydbCaseTrackerObject[] = array(
"cto_uid" => "char",
"cto_type_obj" => "char",
"cto_uid_obj" => "char",
"cto_condition" => "char",
"cto_position" => "integer",
"obj_title" => "char",
"obj_description" => "char"
);
$criteria = new \Criteria("workflow");
$criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$titleObj = "";
$descriptionObj = "";
switch ($row["CTO_TYPE_OBJ"]) {
case "DYNAFORM":
$arrayData = $dynaform->load($row["CTO_UID_OBJ"]);
$titleObj = $arrayData["DYN_TITLE"];
$descriptionObj = $arrayData["DYN_DESCRIPTION"];
break;
case "INPUT_DOCUMENT":
$arrayData = $inputDocument->getByUid($row["CTO_UID_OBJ"]);
$titleObj = $arrayData["INP_DOC_TITLE"];
$descriptionObj = $arrayData["INP_DOC_DESCRIPTION"];
break;
case "OUTPUT_DOCUMENT":
$arrayData = $outputDocument->getByUid($row["CTO_UID_OBJ"]);
$titleObj = $arrayData["OUT_DOC_TITLE"];
$descriptionObj = $arrayData["OUT_DOC_DESCRIPTION"];
break;
}
$arraydbCaseTrackerObject[] = array(
"cto_uid" => $row["CTO_UID"],
"cto_type_obj" => $row["CTO_TYPE_OBJ"],
"cto_uid_obj" => $row["CTO_UID_OBJ"],
"cto_condition" => $row["CTO_CONDITION"],
"cto_position" => (int)($row["CTO_POSITION"]),
"obj_title" => $titleObj,
"obj_description" => $descriptionObj
);
}
//Set data
\G::LoadClass("ArrayPeer");
global $_DBArray;
$_DBArray = (isset($_SESSION["_DBArray"]))? $_SESSION["_DBArray"] : "";
$_DBArray["CASE_TRACKER_OBJECT"] = $arraydbCaseTrackerObject;
$_SESSION["_DBArray"] = $_DBArray;
$criteria = new \Criteria("dbarray");
$criteria->setDBArrayTable("CASE_TRACKER_OBJECT");
$criteria->addAscendingOrderByColumn("cto_position");
$rsCriteria = \ArrayBasePeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayCaseTrackerObject[] = $row;
}
return $arrayCaseTrackerObject;
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -0,0 +1,333 @@
<?php
namespace BusinessModel;
class CaseTrackerObject
{
///**
// * Get data of unique ids of a DynaForm (Unique id of Process)
// *
// * @param string $caseTrackerObjectUid Unique id of Case Tracker Object
// *
// * return array
// */
//public function getDataUids($caseTrackerObjectUid)
//{
// try {
// $criteria = new \Criteria("workflow");
//
// $criteria->addSelectColumn(\DynaformPeer::PRO_UID);
// $criteria->add(\DynaformPeer::DYN_UID, $caseTrackerObjectUid, \Criteria::EQUAL);
//
// $rsCriteria = \DynaformPeer::doSelectRS($criteria);
// $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
//
// if ($rsCriteria->next()) {
// return $rsCriteria->getRow();
// } else {
// throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "DYNAFORM"), "The UID \"{0}\" doesn't exist in table {1}")));
// }
// } catch (\Exception $e) {
// throw $e;
// }
//}
/**
* Get data from a request data
*
* @param object $requestData Request data
*
* return array Return an array with data of request data
*/
public function getArrayDataFromRequestData($requestData)
{
try {
$arrayData = array();
$requestData = (array)($requestData);
foreach ($requestData as $key => $value) {
$arrayData[$key] = $value;
}
return $arrayData;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if exists the record in table CASE_TRACKER_OBJECT
*
* @param string $processUid Unique id of Process
* @param string $type Type of Step (DYNAFORM, INPUT_DOCUMENT, OUTPUT_DOCUMENT)
* @param string $objectUid Unique id of Object
* @param int $position Position
* @param string $caseTrackerObjectUidExclude Unique id of Case Tracker Object to exclude
*
* return bool Return true if exists the record in table CASE_TRACKER_OBJECT, false otherwise
*/
public function existsRecord($processUid, $type, $objectUid, $position = 0, $caseTrackerObjectUidExclude = "")
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\CaseTrackerObjectPeer::CTO_UID);
$criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid, \Criteria::EQUAL);
if ($caseTrackerObjectUidExclude != "") {
$criteria->add(\CaseTrackerObjectPeer::CTO_UID, $caseTrackerObjectUidExclude, \Criteria::NOT_EQUAL);
}
if ($type != "") {
$criteria->add(\CaseTrackerObjectPeer::CTO_TYPE_OBJ, $type, \Criteria::EQUAL);
}
if ($objectUid != "") {
$criteria->add(\CaseTrackerObjectPeer::CTO_UID_OBJ, $objectUid, \Criteria::EQUAL);
}
if ($position > 0) {
$criteria->add(\CaseTrackerObjectPeer::CTO_POSITION, $position, \Criteria::EQUAL);
}
$rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
return true;
} else {
return false;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Create Case Tracker Object for a Process
*
* @param string $processUid Unique id of Process
* @param array $arrayData Data
*
* return array Return data of the new Case Tracker Object created
*/
public function create($processUid, $arrayData)
{
try {
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
unset($arrayData["CTO_UID"]);
//Verify data
$process = new \Process();
if (!$process->exists($processUid)) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}")));
}
if (!isset($arrayData["CTO_TYPE_OBJ"])) {
throw (new \Exception(str_replace(array("{0}"), array("CTO_TYPE_OBJ"), "The \"{0}\" attribute is not defined")));
}
if (!isset($arrayData["CTO_UID_OBJ"])) {
throw (new \Exception(str_replace(array("{0}"), array("CTO_UID_OBJ"), "The \"{0}\" attribute is not defined")));
}
$step = new \BusinessModel\Step();
$msg = $step->existsObjectUid($arrayData["CTO_TYPE_OBJ"], $arrayData["CTO_UID_OBJ"]);
if ($msg != "") {
throw (new \Exception($msg));
}
if ($this->existsRecord($processUid, $arrayData["CTO_TYPE_OBJ"], $arrayData["CTO_UID_OBJ"])) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid . ", " . $arrayData["CTO_TYPE_OBJ"] . ", " . $arrayData["CTO_UID_OBJ"], "CASE_TRACKER_OBJECT"), "The record \"{0}\", exists in table {1}")));
}
if (isset($arrayData["CTO_POSITION"]) && $this->existsRecord($processUid, "", "", $arrayData["CTO_POSITION"])) {
throw (new \Exception(str_replace(array("{0}", "{1}", "{2}"), array($arrayData["CTO_POSITION"], $processUid . ", " . $arrayData["CTO_POSITION"], "CASE_TRACKER_OBJECT"), "The \"{0}\" position for the record \"{1}\", exists in table {2}")));
}
//Create
$caseTrackerObject = new \CaseTrackerObject();
$arrayData["PRO_UID"] = $processUid;
if (!isset($arrayData["CTO_POSITION"])) {
$criteria = new \Criteria("workflow");
$criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid);
$arrayData["CTO_POSITION"] = \CaseTrackerObjectPeer::doCount($criteria) + 1;
}
$caseTrackerObjectUid = $caseTrackerObject->create($arrayData);
//Return
unset($arrayData["PRO_UID"]);
$arrayData = array_change_key_case($arrayData, CASE_LOWER);
unset($arrayData["cto_uid"]);
return array_merge(array("cto_uid" => $caseTrackerObjectUid), $arrayData);
} catch (\Exception $e) {
throw $e;
}
}
///**
// * Update DynaForm
// *
// * @param string $caseTrackerObjectUid Unique id of Case Tracker Object
// * @param array $arrayData Data
// *
// * return array Return data of the DynaForm updated
// */
//public function update($caseTrackerObjectUid, $arrayData)
//{
// try {
// $arrayData = array_change_key_case($arrayData, CASE_UPPER);
//
// //Verify data
// $dynaForm = new \Dynaform();
//
// if (!$dynaForm->dynaformExists($caseTrackerObjectUid)) {
// throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "DYNAFORM"), "The UID \"{0}\" doesn't exist in table {1}")));
// }
//
// //Uids
// $arrayDataUid = $this->getDataUids($caseTrackerObjectUid);
//
// $processUid = $arrayDataUid["PRO_UID"];
//
// //Verify data
// if (isset($arrayData["DYN_TITLE"]) && $this->titleExists($processUid, $arrayData["DYN_TITLE"], $caseTrackerObjectUid)) {
// throw (new \Exception(\G::LoadTranslation("ID_EXIST_DYNAFORM")));
// }
//
// //Update
// $arrayData["DYN_UID"] = $caseTrackerObjectUid;
//
// $result = $dynaForm->update($arrayData);
//
// //Return
// unset($arrayData["DYN_UID"]);
//
// return array_change_key_case($arrayData, CASE_LOWER);
// } catch (\Exception $e) {
// throw $e;
// }
//}
//
///**
// * Delete DynaForm
// *
// * @param string $caseTrackerObjectUid Unique id of Case Tracker Object
// *
// * return void
// */
//public function delete($caseTrackerObjectUid)
//{
// try {
// //Verify data
// $dynaForm = new \Dynaform();
//
// if (!$dynaForm->dynaformExists($caseTrackerObjectUid)) {
// throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "DYNAFORM"), "The UID \"{0}\" doesn't exist in table {1}")));
// }
//
// //Uids
// $arrayDataUid = $this->getDataUids($caseTrackerObjectUid);
//
// $processUid = $arrayDataUid["PRO_UID"];
//
// //Verify data
// if ($this->dynaFormAssignedStep($caseTrackerObjectUid, $processUid)) {
// throw (new \Exception("You cannot delete this Dynaform while it is assigned to a step"));
// }
//
// //Delete
//
// //In table CASE_TRACKER_OBJECT
// $caseTrackerObject = new \CaseTrackerObject();
// $caseTrackerObject->removeByObject("DYNAFORM", $caseTrackerObjectUid);
// } catch (\Exception $e) {
// throw $e;
// }
//}
/**
* Get data of a Case Tracker Object
*
* @param string $caseTrackerObjectUid Unique id of Case Tracker Object
*
* return array Return an array with data of a Case Tracker Object
*/
public function getCaseTrackerObject($caseTrackerObjectUid)
{
try {
//Verify data
$caseTrackerObject = new \CaseTrackerObject();
if (!$caseTrackerObject->caseTrackerObjectExists($caseTrackerObjectUid)) {
throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "CASE_TRACKER_OBJECT"), "The UID \"{0}\" doesn't exist in table {1}")));
}
//Get data
$dynaform = new \Dynaform();
$inputDocument = new \InputDocument();
$outputDocument = new \OutputDocument();
$criteria = new \Criteria("workflow");
$criteria->add(\CaseTrackerObjectPeer::CTO_UID, $caseTrackerObjectUid, \Criteria::EQUAL);
$rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
$row = $rsCriteria->getRow();
$titleObj = "";
$descriptionObj = "";
switch ($row["CTO_TYPE_OBJ"]) {
case "DYNAFORM":
$arrayData = $dynaform->load($row["CTO_UID_OBJ"]);
$titleObj = $arrayData["DYN_TITLE"];
$descriptionObj = $arrayData["DYN_DESCRIPTION"];
break;
case "INPUT_DOCUMENT":
$arrayData = $inputDocument->getByUid($row["CTO_UID_OBJ"]);
$titleObj = $arrayData["INP_DOC_TITLE"];
$descriptionObj = $arrayData["INP_DOC_DESCRIPTION"];
break;
case "OUTPUT_DOCUMENT":
$arrayData = $outputDocument->getByUid($row["CTO_UID_OBJ"]);
$titleObj = $arrayData["OUT_DOC_TITLE"];
$descriptionObj = $arrayData["OUT_DOC_DESCRIPTION"];
break;
}
return array(
"cto_uid" => $row["CTO_UID"],
"cto_type_obj" => $row["CTO_TYPE_OBJ"],
"cto_uid_obj" => $row["CTO_UID_OBJ"],
"cto_condition" => $row["CTO_CONDITION"],
"cto_position" => (int)($row["CTO_POSITION"]),
"obj_title" => $titleObj,
"obj_description" => $descriptionObj
);
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -0,0 +1,99 @@
<?php
namespace Services\Api\ProcessMaker\Project;
use \ProcessMaker\Services\Api;
use \Luracast\Restler\RestException;
/**
* Project\CaseTracker Api Controller
*
* @protected
*/
class CaseTracker extends Api
{
/**
* @url GET /:projectUid/case-tracker/property
*/
public function doGetCaseTrackerProperty($projectUid)
{
try {
$caseTracker = new \BusinessModel\CaseTracker();
$response = $caseTracker->getCaseTracker($projectUid);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url PUT /:projectUid/case-tracker/property
*
* @param string $projectUid
* @param CaseTrackerPutStructure $request_data
*/
public function doPutCaseTracker($projectUid, CaseTrackerPutStructure $request_data = null)
{
try {
$caseTracker = new \BusinessModel\CaseTracker();
$arrayData = $caseTracker->getArrayDataFromRequestData($request_data);
$arrayData = $caseTracker->update($projectUid, $arrayData);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url GET /:projectUid/case-tracker/objects
*/
public function doGetCaseTrackerObjects($projectUid)
{
try {
$caseTracker = new \BusinessModel\CaseTracker();
$response = $caseTracker->getCaseTrackerObjects($projectUid);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url GET /:projectUid/case-tracker/available-objects
*/
public function doGetCaseTrackerAvailableObjects($projectUid)
{
try {
$caseTracker = new \BusinessModel\CaseTracker();
$response = $caseTracker->getAvailableCaseTrackerObjects($projectUid);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
}
class CaseTrackerPutStructure
{
/**
* @var string {@from body}{@choice NONE,PROCESSMAP,STAGES}
*/
public $map_type;
/**
* @var bool {@from body}
*/
public $routing_history;
/**
* @var bool {@from body}
*/
public $message_history;
}

View File

@@ -0,0 +1,135 @@
<?php
namespace Services\Api\ProcessMaker\Project;
use \ProcessMaker\Services\Api;
use \Luracast\Restler\RestException;
/**
* Project\CaseTrackerObject Api Controller
*
* @protected
*/
class CaseTrackerObject extends Api
{
/**
* @url GET /:projectUid/case-tracker/object/:caseTrackerObjectUid
*/
public function doGetCaseTrackerObject($caseTrackerObjectUid, $projectUid)
{
try {
$caseTrackerObject = new \BusinessModel\CaseTrackerObject();
$response = $caseTrackerObject->getCaseTrackerObject($caseTrackerObjectUid);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url POST /:projectUid/case-tracker/object
*
* @param string $projectUid
* @param CaseTrackerObjectPostStructure $request_data
*
* @status 201
*/
public function doPostCaseTrackerObject($projectUid, CaseTrackerObjectPostStructure $request_data = null)
{
try {
$caseTrackerObject = new \BusinessModel\CaseTrackerObject();
$arrayData = $caseTrackerObject->getArrayDataFromRequestData($request_data);
$arrayData = $caseTrackerObject->create($projectUid, $arrayData);
$response = $arrayData;
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url PUT /:projectUid/case-tracker/object/:caseTrackerObjectUid
*
* @param string $caseTrackerObjectUid
* @param string $projectUid
* @param CaseTrackerObjectPutStructure $request_data
*/
public function doPutCaseTrackerObject($caseTrackerObjectUid, $projectUid, CaseTrackerObjectPutStructure $request_data = null)
{
try {
$caseTrackerObject = new \BusinessModel\CaseTrackerObject();
$arrayData = $caseTrackerObject->getArrayDataFromRequestData($request_data);
$arrayData = $caseTrackerObject->update($caseTrackerObjectUid, $arrayData);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* @url DELETE /:projectUid/case-tracker/object/:caseTrackerObjectUid
*/
public function doDeleteCaseTrackerObject($caseTrackerObjectUid, $projectUid)
{
try {
$caseTrackerObject = new \BusinessModel\CaseTrackerObject();
$caseTrackerObject->delete($caseTrackerObjectUid);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
}
class CaseTrackerObjectPostStructure
{
/**
* @var string {@from body}{@choice DYNAFORM,INPUT_DOCUMENT,OUTPUT_DOCUMENT}{@required true}
*/
public $cto_type_obj;
/**
* @var string {@from body}{@min 32}{@max 32}{@required true}
*/
public $cto_uid_obj;
/**
* @var string
*/
public $cto_condition;
/**
* @var int {@from body}{@min 1}
*/
public $cto_position;
}
class CaseTrackerObjectPutStructure
{
/**
* @var string {@from body}{@choice DYNAFORM,INPUT_DOCUMENT,OUTPUT_DOCUMENT}
*/
public $cto_type_obj;
/**
* @var string {@from body}{@min 32}{@max 32}
*/
public $cto_uid_obj;
/**
* @var string
*/
public $cto_condition;
/**
* @var int {@from body}{@min 1}
*/
public $cto_position;
}

View File

@@ -26,6 +26,8 @@ debug = 1
supervisors = "Services\Api\ProcessMaker\Project\ProcessSupervisors"
process-permissions = "Services\Api\ProcessMaker\Project\ProcessPermissions"
case-scheduler = "Services\Api\ProcessMaker\Project\CaseScheduler"
case-tracker = "Services\Api\ProcessMaker\Project\CaseTracker"
case-tracker-object = "Services\Api\ProcessMaker\Project\CaseTrackerObject"
[alias: projects]
project = "Services\Api\ProcessMaker\Project"