Merge remote branch 'pm/master'

This commit is contained in:
Ronald Quenta
2015-06-26 13:52:15 -04:00
56 changed files with 17143 additions and 5171 deletions

View File

@@ -0,0 +1,498 @@
<?php
namespace ProcessMaker\BusinessModel;
class EmailEvent
{
/*private $arrayFieldDefinition = array(
"EMAIL_EVENT_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "emailEventUid"),
"PRJ_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "projectUid"),
"EVN_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "eventUid"),
"EMAIL_EVENT_FROM" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "messageTypeUid"),
"EMAIL_EVENT_TO" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "EmailEventUserUid"),
"EMAIL_EVENT_SUBJECT" => array("type" => "array", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "EmailEventVariables"),
"PRF_UID" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "EmailEventCorrelation")
);
*/
/**
* Get the email accounts of the current workspace
*
* return array
*/
public function getEmailEventAccounts()
{
try {
$criteria = new \Criteria("workflow");
$criteria->clearSelectColumns();
$criteria->addSelectColumn(\UsersPeer::USR_UID);
$criteria->addSelectColumn(\UsersPeer::USR_EMAIL);
$criteria->add(\UsersPeer::USR_STATUS, "ACTIVE");
$result = \UsersPeer::doSelectRS($criteria);
$result->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$result->next();
$accountsArray = array();
while ($aRow = $result->getRow()) {
if (($aRow['USR_EMAIL'] != null) || ($aRow['USR_EMAIL'] != "")) {
$accountsArray[] = array_change_key_case($aRow, CASE_LOWER);
}
$result->next();
}
return $accountsArray;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get the Email-Event data
* @var string $evn_uid. uid for activity
* @var string $pro_uid. uid for process
* return array
*/
public function getEmailEventData($pro_uid, $evn_uid)
{
try {
//Get data
$criteria = $this->getEmailEventCriteria();
$criteria->add(\EmailEventPeer::EVN_UID, $evn_uid, \Criteria::EQUAL);
$criteria->add(\EmailEventPeer::PRJ_UID, $pro_uid, \Criteria::EQUAL);
$rsCriteria = \EmailEventPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
$row = $rsCriteria->getRow();
if(is_array($row)) {
$row = array_change_key_case($row, CASE_LOWER);
}
return $row;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get the Email-Event data
* @var string $emailEventUid. uid for email event
* @var string $pro_uid. uid for process
* return array
*/
public function getEmailEventDataByUid($pro_uid, $emailEventUid)
{
try {
//Get data
$criteria = $this->getEmailEventCriteria();
$criteria->add(\EmailEventPeer::EMAIL_EVENT_UID, $emailEventUid, \Criteria::EQUAL);
$criteria->add(\EmailEventPeer::PRJ_UID, $pro_uid, \Criteria::EQUAL);
$rsCriteria = \EmailEventPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
$row = $rsCriteria->getRow();
if(is_array($row)) {
$row = array_change_key_case($row, CASE_LOWER);
}
return $row;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Save Data for Email-Event
* @var string $prj_uid. Uid for Process
* @var string $arrayData. Data for Trigger
*
* return array
*/
public function save($prj_uid = '', $arrayData = array())
{
try {
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$validator = new \ProcessMaker\BusinessModel\Validator();
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
//Set data
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
//Verify data
$process->throwExceptionIfNotExistsProcess($prj_uid, "projectUid");
//Create
$db = \Propel::getConnection("workflow");
try {
$emailEvent = new \EmailEvent();
$emailEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
$emailEventUid = \ProcessMaker\Util\Common::generateUID();
$emailEvent->setEmailEventUid($emailEventUid);
$emailEvent->setPrjUid($prj_uid);
$db->begin();
$result = $emailEvent->save();
$db->commit();
return $this->getEmailEvent($emailEventUid);
} catch (\Exception $e) {
$db->rollback();
throw $e;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Update Email-Event
*
* @param string $emailEventUid Unique id of Email-Event
* @param array $arrayData Data
*
* return array Return data of the Email-Event updated
*/
public function update($emailEventUid, array $arrayData)
{
try {
//Verify data
$validator = new \ProcessMaker\BusinessModel\Validator();
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
//Set data
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
$arrayDataBackup = $arrayData;
//Set variables
$arrayEmailEventData = $this->getEmailEvent($emailEventUid);
//Verify data
$this->verifyIfEmailEventExists($emailEventUid);
//Update
$db = \Propel::getConnection("workflow");
try {
$emailEvent = \EmailEventPeer::retrieveByPK($emailEventUid);
$emailEvent->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
$db->begin();
$result = $emailEvent->save();
$db->commit();
$arrayData = $arrayDataBackup;
$arrayData = array_change_key_case($arrayData, CASE_LOWER);
return $arrayData;
} catch (\Exception $e) {
$cnn->rollback();
throw $e;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Delete Email-Event
*
* @param string $emailEventUid Unique id of Email-Event
*
* return void
*/
public function delete($pro_uid, $emailEventUid, $passValidation = true)
{
try {
//Verify data
if($passValidation) {
$this->verifyIfEmailEventExists($emailEventUid);
//Delete file
$filesManager = new \ProcessMaker\BusinessModel\FilesManager();
$arrayData = $this->getEmailEventDataByUid($pro_uid, $emailEventUid);
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
if(sizeof($arrayData)) {
$prfUid = $arrayData['PRF_UID'];
$filesManager->deleteProcessFilesManager('',$prfUid);
}
}
//Delete Email event
$criteria = new \Criteria("workflow");
$criteria->add(\EmailEventPeer::EMAIL_EVENT_UID, $emailEventUid, \Criteria::EQUAL);
$result = \EmailEventPeer::doDelete($criteria);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Delete Email-Event by event uid
*
* @param string $emailEventUid Unique id of Email-Event
*
* return void
*/
public function deleteByEvent($prj_uid, $evn_uid)
{
try {
//Verify data
if (!$this->existsEvent($prj_uid, $evn_uid)) {
throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST"));
}
$arrayData = $this->existsEvent($prj_uid, $evn_uid);
$this->delete($prj_uid, $arrayData[0]);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get data of a Email-Event
*
* @param string $emailEventUid Unique id of Email-Event
* @param bool $flagGetRecord Value that set the getting
*
* return array Return an array with data of a Email-Event
*/
public function getEmailEvent($emailEventUid)
{
try {
//Verify data
$this->verifyIfEmailEventExists($emailEventUid);
//Get data
$criteria = $this->getEmailEventCriteria();
$criteria->add(\EmailEventPeer::EMAIL_EVENT_UID, $emailEventUid, \Criteria::EQUAL);
$rsCriteria = \EmailEventPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
$row = $rsCriteria->getRow();
//Return
return $row;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if exists the Email-Event
*
* @param string $emailEventUid Unique id of Email-Event
*
* return bool Return true if exists the Email-Event, false otherwise
*/
public function exists($emailEventUid)
{
try {
$obj = \EmailEventPeer::retrieveByPK($emailEventUid);
return (!is_null($obj))? true : false;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get criteria for Email-Event
*
* return object
*/
public function getEmailEventCriteria()
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_UID);
$criteria->addSelectColumn(\EmailEventPeer::PRJ_UID);
$criteria->addSelectColumn(\EmailEventPeer::EVN_UID);
$criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_FROM);
$criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_TO);
$criteria->addSelectColumn(\EmailEventPeer::EMAIL_EVENT_SUBJECT);
$criteria->addSelectColumn(\EmailEventPeer::PRF_UID);
return $criteria;
} catch (\Exception $e) {
throw $e;
}
}
public function verifyIfEmailEventExists($emailEventUid)
{
if (!$this->exists($emailEventUid)) {
throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST", array("Email Event Uid", $emailEventUid)));
}
}
/**
* Verify if exists the Event of a Message-Event-Definition
*
* @param string $projectUid Unique id of Project
* @param string $eventUid Unique id of Event
*
* return bool Return true if exists the Event of a Message-Event-Definition, false otherwise
*/
public function existsEvent($projectUid, $eventUid)
{
try {
$criteria = $this->getEmailEventCriteria();
$criteria->add(\EmailEventPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
$criteria->add(\EmailEventPeer::EVN_UID, $eventUid, \Criteria::EQUAL);
$rsCriteria = \EmailEventPeer::doSelectRS($criteria);
$rsCriteria->next();
$row = $rsCriteria->getRow();
if(is_array($row)) {
$row = array_change_key_case($row, CASE_LOWER);
}
return (sizeof($row))? $row : false;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Email-event for the Case
*
* @param string $elementOriginUid Unique id of Element Origin (unique id of Task)
* @param string $elementDestUid Unique id of Element Dest (unique id of Task)
* @param array $arrayApplicationData Case data
*
* return void
*/
public function emailEventBetweenElementOriginAndElementDest($elementOriginUid, $elementDestUid, array $arrayApplicationData)
{
try {
//Verify if the Project is BPMN
$bpmn = new \ProcessMaker\Project\Bpmn();
if (!$bpmn->exists($arrayApplicationData["PRO_UID"])) {
return;
}
//Element origin and dest
$elementTaskRelation = new \ProcessMaker\BusinessModel\ElementTaskRelation();
$arrayElement = array(
"elementOrigin" => array("uid" => $elementOriginUid, "type" => "bpmnActivity"),
"elementDest" => array("uid" => $elementDestUid, "type" => "bpmnActivity")
);
foreach ($arrayElement as $key => $value) {
$arrayElementTaskRelationData = $elementTaskRelation->getElementTaskRelationWhere(
array(
\ElementTaskRelationPeer::PRJ_UID => $arrayApplicationData["PRO_UID"],
\ElementTaskRelationPeer::ELEMENT_TYPE => "bpmnEvent",
\ElementTaskRelationPeer::TAS_UID => $arrayElement[$key]["uid"]
),
true
);
if (!is_null($arrayElementTaskRelationData)) {
$arrayElement[$key]["uid"] = $arrayElementTaskRelationData["ELEMENT_UID"];
$arrayElement[$key]["type"] = "bpmnEvent";
}
}
$elementOriginUid = $arrayElement["elementOrigin"]["uid"];
$elementOriginType = $arrayElement["elementOrigin"]["type"];
$elementDestUid = $arrayElement["elementDest"]["uid"];
$elementDestType = $arrayElement["elementDest"]["type"];
//Get Message-Events of throw type
$arrayEvent = $bpmn->getEmailEventTypeBetweenElementOriginAndElementDest(
$elementOriginUid,
$elementOriginType,
$elementDestUid,
$elementDestType
);
//Email-event
foreach ($arrayEvent as $value) {
$result = $this->sendEmail($arrayApplicationData["APP_UID"], $arrayApplicationData["PRO_UID"], $value[0], $arrayApplicationData);
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Email-event do function
*
* @param string $appUID Unique id of application
* @param string $prj_uid Unique id of Project
* @param string $eventUid Unique id of event
* @param array $arrayApplicationData Case data
*
* return void
*/
public function sendEmail($appUID, $prj_uid, $eventUid, $arrayApplicationData)
{
if (!$this->existsEvent($prj_uid, $eventUid)) {
throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST"));
}
$arrayData = $this->existsEvent($prj_uid, $eventUid);
if(sizeof($arrayData)) {
$prfUid = $arrayData[6];
$filesManager = new \ProcessMaker\BusinessModel\FilesManager();
$contentFile = $filesManager->getProcessFileManager($prj_uid, $prfUid);
\PMFSendMessage($appUID, $arrayData[3], $arrayData[4], '', '', $arrayData[5], $contentFile['prf_filename'], array());
}
}
/**
* Update process file Uid
*
* @param string $oldUid Unique id of old process file
* @param string $newUid Unique id of new process file
* @param string $projectUid Unique id of Project
*
* return bool Return array if exists, false otherwise
*/
public function updatePrfUid($oldUid, $newUid, $projectUid) {
try {
$newValues = array();
$rowData = $this->verifyIfEmailEventExistsByPrfUid($oldUid, $projectUid);
if(is_array($rowData)) {
$newValues['PRF_UID'] = $newUid;
$this->update($rowData['EMAIL_EVENT_UID'], $newValues);
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if exists the Email Event of
*
* @param string $oldUid Unique id of old process file
* @param string $projectUid Unique id of Project
*
* return bool Return array if exists, false otherwise
*/
public function verifyIfEmailEventExistsByPrfUid($oldUid, $projectUid)
{
try {
$criteria = $this->getEmailEventCriteria();
$criteria->add(\EmailEventPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
$criteria->add(\EmailEventPeer::PRF_UID, $oldUid, \Criteria::EQUAL);
$rsCriteria = \EmailEventPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
$row = $rsCriteria->getRow();
if(is_array($row)) {
$row = array_change_key_case($row, CASE_UPPER);
}
return (sizeof($row))? $row : false;
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -242,6 +242,41 @@ class FilesManager
throw $e;
}
}
public function addProcessFilesManagerInDb($aData)
{
try {
$oProcessFiles = new \ProcessFiles();
$aData = array_change_key_case($aData, CASE_UPPER);
$oProcessFiles->fromArray($aData, \BasePeer::TYPE_FIELDNAME);
if($this->existsProcessFile($aData['PRF_UID'])) {
$sPkProcessFiles = \G::generateUniqueID();
$oProcessFiles->setPrfUid($sPkProcessFiles);
$sDirectory = PATH_DATA_MAILTEMPLATES . $aData['PRO_UID'] . PATH_SEP . basename($aData['PRF_PATH']);
$oProcessFiles->setPrfPath($sDirectory);
$emailEvent = new \ProcessMaker\BusinessModel\EmailEvent();
$emailEvent->updatePrfUid($aData['PRF_UID'], $sPkProcessFiles, $aData['PRO_UID']);
}
$result = $oProcessFiles->save();
} catch (Exception $e) {
throw $e;
}
}
public function existsProcessFile($prfUid)
{
try {
$obj = \ProcessFilesPeer::retrieveByPK($prfUid);
return (!is_null($obj))? true : false;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Return the Process Files Manager
@@ -306,9 +341,11 @@ class FilesManager
public function getFileManagerUid($path)
{
try {
$path = explode("/",$path);
$baseName = $path[count($path)-2].DIRECTORY_SEPARATOR.$path[count($path)-1];
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\ProcessFilesPeer::PRF_UID);
$criteria->add(\ProcessFilesPeer::PRF_PATH, $path, \Criteria::EQUAL);
$criteria->add(\ProcessFilesPeer::PRF_PATH, "%" . $baseName . "%", \Criteria::LIKE);
$rsCriteria = \ProcessFilesPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next();
@@ -371,6 +408,9 @@ class FilesManager
$oProcessFiles->setPrfUpdateUsrUid($userUID);
$oProcessFiles->setPrfUpdateDate($sDate);
$oProcessFiles->save();
$path = PATH_DATA_MAILTEMPLATES.$sProcessUID.DIRECTORY_SEPARATOR.$sFile;
$fp = fopen($path, 'w');
$content = stripslashes($aData['prf_content']);
$content = str_replace("@amp@", "&", $content);
@@ -417,8 +457,11 @@ class FilesManager
if ($path == '') {
throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('prf_uid')));
}
if (file_exists($path)) {
$sFile = end(explode("/",$path));
$path = PATH_DATA_MAILTEMPLATES.$sProcessUID.DIRECTORY_SEPARATOR.$sFile;
if (file_exists($path) && !is_dir($path)) {
unlink($path);
}

View File

@@ -0,0 +1,621 @@
<?php
namespace ProcessMaker\BusinessModel;
class ScriptTask
{
private $arrayFieldDefinition = array(
"SCRTAS_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "scrtasUid"),
"PRJ_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "projectUid"),
"ACT_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "actUid"),
"SCRTAS_OBJ_TYPE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("TRIGGER"), "fieldNameAux" => "scrtasObjType"),
"SCRTAS_OBJ_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "scrtasObjUid")
);
private $formatFieldNameInUppercase = true;
private $arrayFieldNameForException = array();
/**
* Constructor of the class
*
* return void
*/
public function __construct()
{
try {
foreach ($this->arrayFieldDefinition as $key => $value) {
$this->arrayFieldNameForException[$value["fieldNameAux"]] = $key;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Set the format of the fields name (uppercase, lowercase)
*
* @param bool $flag Value that set the format
*
* return void
*/
public function setFormatFieldNameInUppercase($flag)
{
try {
$this->formatFieldNameInUppercase = $flag;
$this->setArrayFieldNameForException($this->arrayFieldNameForException);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Set exception messages for fields
*
* @param array $arrayData Data with the fields
*
* return void
*/
public function setArrayFieldNameForException(array $arrayData)
{
try {
foreach ($arrayData as $key => $value) {
$this->arrayFieldNameForException[$key] = $this->getFieldNameByFormatFieldName($value);
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get the name of the field according to the format
*
* @param string $fieldName Field name
*
* return string Return the field name according the format
*/
public function getFieldNameByFormatFieldName($fieldName)
{
try {
//Return
return ($this->formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if exists the Script-Task
*
* @param string $scriptTaskUid Unique id of Script-Task
*
* return bool Return true if exists the Script-Task, false otherwise
*/
public function exists($scriptTaskUid)
{
try {
$obj = \ScriptTaskPeer::retrieveByPK($scriptTaskUid);
//Return
return (!is_null($obj))? true : false;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if does not exists the Script-Task
*
* @param string $scriptTaskUid Unique id of Script-Task
* @param string $fieldNameForException Field name for the exception
*
* return void Throw exception if does not exists the Script-Task
*/
public function throwExceptionIfNotExistsScriptTask($scriptTaskUid, $fieldNameForException)
{
try {
if (!$this->exists($scriptTaskUid)) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_DOES_NOT_EXIST", array($fieldNameForException, $scriptTaskUid)));
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Validate the data if they are invalid (INSERT and UPDATE)
*
* @param string $scriptTaskUid Unique id of Script-Task
* @param string $projectUid Unique id of Project
* @param array $arrayData Data
*
* return void Throw exception if data has an invalid value
*/
public function throwExceptionIfDataIsInvalid($scriptTaskUid, $projectUid, array $arrayData)
{
try {
//Set variables
$arrayScriptTaskData = ($scriptTaskUid == "")? array() : $this->getScriptTask($scriptTaskUid, true);
$flagInsert = ($scriptTaskUid == "")? true : false;
$arrayFinalData = array_merge($arrayScriptTaskData, $arrayData);
//Verify data - Field definition
$process = new \ProcessMaker\BusinessModel\Process();
$process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert);
//---
if (isset($arrayData["ACT_UID"])) {
$obj = \BpmnActivityPeer::retrieveByPK($arrayData["ACT_UID"]);
if (is_null($obj)) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_DOES_NOT_ACTIVITY", array($this->arrayFieldNameForException["actUid"], $arrayData["ACT_UID"])));
}
}
//---
if (isset($arrayData["SCRTAS_OBJ_UID"])) {
$obj = \TriggersPeer::retrieveByPK($arrayData["SCRTAS_OBJ_UID"]);
if (is_null($obj)) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_DOES_NOT_TRIGGER", array($this->arrayFieldNameForException["scrtasObjUid"], $arrayData["SCRTAS_OBJ_UID"])));
}
}
//---
if (isset($arrayData["ACT_UID"])) {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\BpmnActivityPeer::ACT_UID);
$criteria->add(\BpmnActivityPeer::ACT_UID, $arrayData["ACT_UID"], \Criteria::EQUAL);
$criteria->add(\BpmnActivityPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
$rsCriteria = \BpmnActivityPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if (!$rsCriteria->next()) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_ACTIVITY_NOT_BELONG_TO_PROJECT", array($arrayData["ACT_UID"], $projectUid)));
}
}
//---
if (isset($arrayData["SCRTAS_OBJ_UID"])) {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\TriggersPeer::TRI_UID);
$criteria->add(\TriggersPeer::TRI_UID, $arrayData["SCRTAS_OBJ_UID"], \Criteria::EQUAL);
$criteria->add(\TriggersPeer::PRO_UID, $projectUid, \Criteria::EQUAL);
$rsCriteria = \TriggersPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if (!$rsCriteria->next()) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_TRIGGER_NOT_BELONG_TO_PROJECT", array($arrayData["SCRTAS_OBJ_UID"], $projectUid)));
}
}
//---
$obj = \BpmnActivityPeer::retrieveByPK($arrayFinalData["ACT_UID"]);
if ($obj->getActTaskType() != "SCRIPTTASK") {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_TYPE_ACTIVITY_NOT_IS_SCRIPTTASK", array($this->arrayFieldNameForException["actUid"], $arrayData["ACT_UID"])));
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Create Script-Task for a Project
*
* @param string $projectUid Unique id of Project
* @param array $arrayData Data
*
* return array Return data of the new Script-Task created
*/
public function create($projectUid, array $arrayData)
{
try {
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$validator = new \ProcessMaker\BusinessModel\Validator();
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
//Set data
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
unset($arrayData["SCRTAS_UID"]);
unset($arrayData["PRJ_UID"]);
//Verify data
$process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
$this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData);
//Create
$cnn = \Propel::getConnection("workflow");
try {
$scriptTask = new \ScriptTask();
$scriptTask->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
$scriptTaskUid = \ProcessMaker\Util\Common::generateUID();
$scriptTask->setScrtasUid($scriptTaskUid);
$scriptTask->setPrjUid($projectUid);
if ($scriptTask->validate()) {
$cnn->begin();
$result = $scriptTask->save();
$cnn->commit();
//Return
return $this->getScriptTask($scriptTaskUid);
} else {
$msg = "";
foreach ($scriptTask->getValidationFailures() as $validationFailure) {
$msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
}
throw new \Exception(\G::LoadTranslation("ID_RECORD_CANNOT_BE_CREATED") . (($msg != "")? "\n" . $msg : ""));
}
} catch (\Exception $e) {
$cnn->rollback();
throw $e;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Update Script-Task
*
* @param string $scriptTaskUid Unique id of Script-Task
* @param array $arrayData Data
*
* return array Return data of the Script-Task updated
*/
public function update($scriptTaskUid, array $arrayData)
{
try {
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$validator = new \ProcessMaker\BusinessModel\Validator();
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
//Set data
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
$arrayDataBackup = $arrayData;
unset($arrayData["SCRTAS_UID"]);
unset($arrayData["PRJ_UID"]);
//Set variables
$arrayScriptTaskData = $this->getScriptTask($scriptTaskUid, true);
//Verify data
$this->throwExceptionIfNotExistsScriptTask($scriptTaskUid, $this->arrayFieldNameForException["scrtasUid"]);
$this->throwExceptionIfDataIsInvalid($scriptTaskUid, $arrayScriptTaskData["PRJ_UID"], $arrayData);
//Update
$cnn = \Propel::getConnection("workflow");
try {
$scriptTask = \ScriptTaskPeer::retrieveByPK($scriptTaskUid);
$scriptTask->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME);
if ($scriptTask->validate()) {
$cnn->begin();
$result = $scriptTask->save();
$cnn->commit();
//Return
$arrayData = $arrayDataBackup;
if (!$this->formatFieldNameInUppercase) {
$arrayData = array_change_key_case($arrayData, CASE_LOWER);
}
return $arrayData;
} else {
$msg = "";
foreach ($scriptTask->getValidationFailures() as $validationFailure) {
$msg = $msg . (($msg != "")? "\n" : "") . $validationFailure->getMessage();
}
throw new \Exception(\G::LoadTranslation("ID_REGISTRY_CANNOT_BE_UPDATED") . (($msg != "")? "\n" . $msg : ""));
}
} catch (\Exception $e) {
$cnn->rollback();
throw $e;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Delete Script-Task
*
* @param string $scriptTaskUid Unique id of Script-Task
*
* return void
*/
public function delete($scriptTaskUid)
{
try {
//Verify data
$this->throwExceptionIfNotExistsScriptTask($scriptTaskUid, $this->arrayFieldNameForException["scrtasUid"]);
//Delete
$criteria = new \Criteria("workflow");
$criteria->add(\ScriptTaskPeer::SCRTAS_UID, $scriptTaskUid, \Criteria::EQUAL);
$result = \ScriptTaskPeer::doDelete($criteria);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Delete Script-Task
*
* @param array $arrayCondition Conditions
*
* return void
*/
public function deleteWhere(array $arrayCondition)
{
try {
//Delete
$criteria = new \Criteria("workflow");
foreach ($arrayCondition as $key => $value) {
if (is_array($value)) {
$criteria->add($key, $value[0], $value[1]);
} else {
$criteria->add($key, $value, \Criteria::EQUAL);
}
}
$result = \ScriptTaskPeer::doDelete($criteria);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get criteria for Script-Task
*
* return object
*/
public function getScriptTaskCriteria()
{
try {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\ScriptTaskPeer::SCRTAS_UID);
$criteria->addSelectColumn(\ScriptTaskPeer::PRJ_UID);
$criteria->addSelectColumn(\ScriptTaskPeer::ACT_UID);
$criteria->addSelectColumn(\ScriptTaskPeer::SCRTAS_OBJ_TYPE);
$criteria->addSelectColumn(\ScriptTaskPeer::SCRTAS_OBJ_UID);
return $criteria;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get data of a Script-Task from a record
*
* @param array $record Record
*
* return array Return an array with data Script-Task
*/
public function getScriptTaskDataFromRecord(array $record)
{
try {
return array(
$this->getFieldNameByFormatFieldName("SCRTAS_UID") => $record["SCRTAS_UID"],
$this->getFieldNameByFormatFieldName("PRJ_UID") => $record["PRJ_UID"],
$this->getFieldNameByFormatFieldName("ACT_UID") => $record["ACT_UID"],
$this->getFieldNameByFormatFieldName("SCRTAS_OBJ_TYPE") => $record["SCRTAS_OBJ_TYPE"],
$this->getFieldNameByFormatFieldName("SCRTAS_OBJ_UID") => $record["SCRTAS_OBJ_UID"]
);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get data of a Script-Task
*
* @param string $scriptTaskUid Unique id of Script-Task
* @param bool $flagGetRecord Value that set the getting
*
* return array Return an array with data of a Script-Task
*/
public function getScriptTask($scriptTaskUid, $flagGetRecord = false)
{
try {
//Verify data
$this->throwExceptionIfNotExistsScriptTask($scriptTaskUid, $this->arrayFieldNameForException["scrtasUid"]);
//Get data
$criteria = $this->getScriptTaskCriteria();
$criteria->add(\ScriptTaskPeer::SCRTAS_UID, $scriptTaskUid, \Criteria::EQUAL);
$rsCriteria = \ScriptTaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$result = $rsCriteria->next();
$row = $rsCriteria->getRow();
//Return
return (!$flagGetRecord)? $this->getScriptTaskDataFromRecord($row) : $row;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get all Script-Tasks
*
* @param string $scriptTaskDefUid Unique id of Project
*
* return array Return an array with all Script-Tasks
*/
public function getScriptTasks($projectUid)
{
try {
$arrayScriptTask = array();
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
//Get data
$criteria = $this->getScriptTaskCriteria();
$criteria->add(\ScriptTaskPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
$rsCriteria = \ScriptTaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayScriptTask[] = $this->getScriptTaskDataFromRecord($row);
}
//Return
return $arrayScriptTask;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get data of a Script-Task by unique id of Activity
*
* @param string $projectUid Unique id of Project
* @param string $activityUid Unique id of Event
*
* return array Return an array with data of a Script-Task by unique id of Activity
*/
public function getScriptTaskByActivity($projectUid, $activityUid)
{
try {
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]);
//---
$obj = \BpmnActivityPeer::retrieveByPK($activityUid);
if (is_null($obj)) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_DOES_NOT_ACTIVITY", array($this->arrayFieldNameForException["actUid"], $activityUid)));
}
//---
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\BpmnActivityPeer::ACT_UID);
$criteria->add(\BpmnActivityPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
$criteria->add(\BpmnActivityPeer::ACT_UID, $activityUid, \Criteria::EQUAL);
$rsCriteria = \BpmnActivityPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if (!$rsCriteria->next()) {
throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_ACTIVITY_NOT_BELONG_TO_PROJECT", array($arrayData["ACT_UID"], $projectUid)));
}
//---
$criteria = $this->getScriptTaskCriteria();
$criteria->add(\ScriptTaskPeer::PRJ_UID, $projectUid, \Criteria::EQUAL);
$criteria->add(\ScriptTaskPeer::ACT_UID, $activityUid, \Criteria::EQUAL);
$rsCriteria = \ScriptTaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
//Return
return ($rsCriteria->next())? $this->getScriptTaskDataFromRecord($rsCriteria->getRow()) : array();
} catch (\Exception $e) {
throw $e;
}
}
/**
* Execute Script
*
* @param string $activityUid Unique id of Event
* @param array $arrayApplicationData Case data
*
* return array
*/
public function execScriptByActivityUid($activityUid, array $arrayApplicationData)
{
try {
$task = \TaskPeer::retrieveByPK($activityUid);
if (!is_null($task) && $task->getTasType() == "SCRIPT-TASK") {
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\ScriptTaskPeer::SCRTAS_OBJ_UID);
$criteria->add(\ScriptTaskPeer::ACT_UID, $activityUid, \Criteria::EQUAL);
$rsCriteria = \ScriptTaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$scriptTasObjUid = $row["SCRTAS_OBJ_UID"];
$trigger = \TriggersPeer::retrieveByPK($scriptTasObjUid);
if (!is_null($trigger)) {
$pmScript = new \PMScript();
$pmScript->setFields($arrayApplicationData);
$pmScript->setScript($trigger->getTriWebbot());
$result = $pmScript->execute();
$arrayApplicationData = $pmScript->aFields;
}
}
}
//Return
return $arrayApplicationData;
} catch (\Exception $e) {
throw $e;
}
}
}