Files
luos/workflow/engine/src/ProcessMaker/Services/Api/Light.php

1829 lines
64 KiB
PHP
Raw Normal View History

<?php
namespace ProcessMaker\Services\Api;
2017-08-11 15:49:39 -04:00
use G;
use ProcessMaker\Project\Adapter;
use ProcessMaker\Services\Api;
use Luracast\Restler\RestException;
use ProcessMaker\BusinessModel\Validator;
use ProcessMaker\Util\DateTime;
use PmDynaform;
/**
*
* Process Api Controller
*
* @protected
*/
class Light extends Api
{
private $regexNull = '/^null$/i';
private $arrayFieldIso8601 = [
// request lists
'newerThan',
'oldestthan',
//return lists
'date',
'delegateDate',
2016-03-22 11:55:24 -04:00
'dueDate',
'delRiskDate'
];
2016-07-28 14:06:03 -04:00
2017-02-07 13:21:34 -04:00
public function __isAllowed()
{
try {
$methodName = $this->restler->apiMethodInfo->methodName;
$arrayArgs = $this->restler->apiMethodInfo->arguments;
switch ($methodName) {
case 'doIfAlreadyRoute':
$applicationUid = $this->parameters[$arrayArgs['app_uid']];
$delIndex = $this->parameters[$arrayArgs['cas_index']];
$userUid = $this->getUserId();
//Check if the user has the case
$appDelegation = new \AppDelegation();
$aCurUser = $appDelegation->getCurrentUsers($applicationUid, $delIndex);
2017-02-08 08:14:05 -04:00
if (!empty($aCurUser) && in_array($userUid, $aCurUser)) {
return true;
2017-02-07 13:21:34 -04:00
}
return false;
break;
}
return false;
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
2016-07-28 14:06:03 -04:00
/**
* Constructor of the class
*
* return void
*/
public function __construct()
{
try {
/**
* The variable $RBAC can be defined as follows:
*
* $RBAC = new \stdClass();
* $RBAC->aUserInfo['USER_INFO'] = ["USR_UID" => $this->getUserId()];
*
* Please consider removing the use of this variable in model class,
* or perform a corresponding improvement.
*/
global $RBAC;
if (!isset($RBAC)) {
2016-07-28 14:06:03 -04:00
$RBAC = \RBAC::getSingleton(PATH_DATA, session_id());
$RBAC->sSystem = 'PROCESSMAKER';
$RBAC->initRBAC();
$RBAC->loadUserRolePermission($RBAC->sSystem, $this->getUserId());
}
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* Get list counters
* @return array
*
* @copyright Colosa - Bolivia
*
* @url GET /counters
*/
public function countersCases ()
{
try {
2015-03-27 16:29:59 -04:00
$userId = $this->getUserId();
/*----------------------------------********---------------------------------*/
if (true) {
//In enterprise version this block of code should always be executed
//In community version this block of code is deleted and is executed the other
$list = new \ProcessMaker\BusinessModel\Lists();
$arrayListCounter = $list->getCounters($userId);
} else {
/*----------------------------------********---------------------------------*/
$case = new \ProcessMaker\BusinessModel\Cases();
$arrayListCounter = $case->getListCounters(
$userId,
['to_do', 'draft', 'sent', 'selfservice', 'paused', 'completed', 'cancelled']
);
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/
$result = $this->parserCountersCases($arrayListCounter);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
2015-03-27 16:29:59 -04:00
return $result;
}
2015-03-27 16:29:59 -04:00
public function parserCountersCases ($data)
{
$structure = array(
"CASES_INBOX" => "toDo",
"CASES_DRAFT" => "draft",
"CASES_CANCELLED" => "cancelled",
"CASES_SENT" => "participated",
"CASES_PAUSED" => "paused",
"CASES_COMPLETED" => "completed",
"CASES_SELFSERVICE" => "unassigned",
'to_do' => 'toDo',
'draft' => 'draft',
'cancelled' => 'cancelled',
'sent' => 'participated',
'paused' => 'paused',
'completed' => 'completed',
'selfservice' => 'unassigned'
2015-03-27 16:29:59 -04:00
);
$response = array();
foreach ($data as $key => $counterList) {
2015-04-01 16:51:34 -04:00
if(isset($structure[$counterList['item']])){
$name = $structure[$counterList['item']];
$response[$name] = $counterList['count'];
} else {
if (isset($structure[$key])) {
$response[$structure[$key]] = $counterList;
}
2015-04-01 16:51:34 -04:00
}
2015-03-27 16:29:59 -04:00
}
return $response;
}
/**
* Get list process start
* @return array
*
* @copyright Colosa - Bolivia
*
* @url GET /start-case
*/
public function getProcessListStartCase ()
{
try {
$oMobile = new \ProcessMaker\BusinessModel\Light();
$processListStartCase = $oMobile->getProcessListStartCase($this->getUserId());
$startCase = $processListStartCase;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $startCase;
}
/**
* Get list Case To Do
*
* @copyright Colosa - Bolivia
*
* @url GET /todo
*/
public function doGetCasesListToDo(
$start = 0,
$limit = 10,
$sort = 'DEL_DELEGATE_DATE',
$dir = 'DESC',
$cat_uid = '',
$pro_uid = '',
2015-08-11 17:12:59 -04:00
$search = '',
$filter = '',
$date_from = '',
$date_to = '',
$newerThan = '',
$oldestthan =''
) {
try {
if (preg_match($this->regexNull, $newerThan)) {
return [];
}
$dataList['userId'] = $this->getUserId();
$dataList['action'] = 'todo';
$dataList['paged'] = true;
$dataList['start'] = $start;
$dataList['limit'] = $limit;
$dataList['sort'] = $sort;
$dataList['dir'] = $dir;
$dataList['category'] = $cat_uid;
$dataList['process'] = $pro_uid;
$dataList['search'] = $search;
2015-08-11 17:12:59 -04:00
$dataList['filter'] = $filter;
$dataList['dateFrom'] = $date_from;
$dataList['dateTo'] = $date_to;
$dataList['newerThan'] = $newerThan;
$dataList['oldestthan'] = $oldestthan;
Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601);
$dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601);
/*----------------------------------********---------------------------------*/
if (true) {
//In enterprise version this block of code should always be executed
//In community version this block of code is deleted and is executed the other
$list = new \ProcessMaker\BusinessModel\Lists();
$response = $list->getList('inbox', $dataList);
} else {
/*----------------------------------********---------------------------------*/
$case = new \ProcessMaker\BusinessModel\Cases();
$response = $case->getList($dataList);
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/
2016-10-27 12:06:06 -04:00
//Complete the list information with some task properties
$response['data'] = $this->addTaskProperties($response['data']);
$result = $this->parserDataTodo($response['data']);
return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
2016-10-27 12:06:06 -04:00
public function addTaskProperties($data){
$task = new \ProcessMaker\BusinessModel\Task();
foreach ($data as $key => $value) {
$valueUpper = array_change_key_case($value, CASE_UPPER);
list($data[$key]['TAS_OFFLINE'], $data[$key]['TAS_AUTO_ROOT']) = $task->getColumnValues($valueUpper['PRO_UID'], $valueUpper['TAS_UID'], array('TAS_OFFLINE', 'TAS_AUTO_ROOT'));
}
return $data;
}
public function parserDataTodo ($data)
{
$structure = array(
2015-08-11 17:12:59 -04:00
'APP_UID' => 'caseId',
'APP_TITLE' => 'caseTitle',
'APP_NUMBER' => 'caseNumber',
'APP_UPDATE_DATE' => 'date',
'DEL_TASK_DUE_DATE' => 'dueDate',
'DEL_INDEX' => 'delIndex',
'DEL_DELEGATE_DATE' => 'delegateDate',
'DEL_RISK_DATE' => 'delRiskDate',
'user' => array(
2015-08-11 17:12:59 -04:00
'USR_UID' => 'userId'
),
'prevUser' => array(
2015-08-11 17:12:59 -04:00
'PREVIOUS_USR_UID' => 'userId',
'PREVIOUS_USR_FIRSTNAME' => 'firstName',
'PREVIOUS_USR_LASTNAME' => 'lastName',
2017-05-12 07:40:20 -04:00
'PREVIOUS_USR_USERNAME' => 'userName',
),
'process' => array(
2015-08-11 17:12:59 -04:00
'PRO_UID' => 'processId',
'APP_PRO_TITLE' => 'name'
),
'task' => array(
2015-08-11 17:12:59 -04:00
'TAS_UID' => 'taskId',
2016-10-27 12:06:06 -04:00
'APP_TAS_TITLE' => 'name',
'TAS_OFFLINE' => 'offlineEnabled',
'TAS_AUTO_ROOT' => 'autoRoot'
2015-08-11 17:12:59 -04:00
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* Get list Case Draft
*
* @copyright Colosa - Bolivia
*
* @url GET /draft
*/
public function doGetCasesListDraft(
$start = 0,
$limit = 10,
$sort = 'DEL_DELEGATE_DATE',
$dir = 'DESC',
$cat_uid = '',
$pro_uid = '',
$search = '',
$newerThan = '',
$oldestthan =''
) {
try {
if (preg_match($this->regexNull, $newerThan)) {
return [];
}
$dataList['userId'] = $this->getUserId();
$dataList['action'] = 'draft';
$dataList['paged'] = true;
$dataList['start'] = $start;
$dataList['limit'] = $limit;
$dataList['sort'] = $sort;
$dataList['dir'] = $dir;
$dataList['category'] = $cat_uid;
$dataList['process'] = $pro_uid;
$dataList['search'] = $search;
$dataList['newerThan'] = $newerThan;
$dataList['oldestthan'] = $oldestthan;
Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601);
$dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601);
/*----------------------------------********---------------------------------*/
if (true) {
//In enterprise version this block of code should always be executed
//In community version this block of code is deleted and is executed the other
$list = new \ProcessMaker\BusinessModel\Lists();
$response = $list->getList('inbox', $dataList);
} else {
/*----------------------------------********---------------------------------*/
$case = new \ProcessMaker\BusinessModel\Cases();
$response = $case->getList($dataList);
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/
2016-10-27 12:06:06 -04:00
//Complete the list information with some task properties
$response['data'] = $this->addTaskProperties($response['data']);
$result = $this->parserDataDraft($response['data']);
return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
public function parserDataDraft ($data)
{
$structure = array(
'APP_UID' => 'caseId',
'APP_TITLE' => 'caseTitle',
'APP_NUMBER' => 'caseNumber',
'APP_UPDATE_DATE' => 'date',
'DEL_TASK_DUE_DATE' => 'dueDate',
'DEL_INDEX' => 'delIndex',
'DEL_DELEGATE_DATE' => 'delegateDate',
'user' => array(
'USR_UID' => 'userId'
),
'currentUser' => array(
'USR_UID' => 'userId',
'USR_FIRSTNAME' => 'firstName',
'USR_LASTNAME' => 'lastName',
2017-05-12 07:40:20 -04:00
'USR_USERNAME' => 'userName',
),
'process' => array(
'PRO_UID' => 'processId',
'APP_PRO_TITLE' => 'name'
),
'task' => array(
'TAS_UID' => 'taskId',
2016-10-27 12:06:06 -04:00
'APP_TAS_TITLE' => 'name',
'TAS_OFFLINE' => 'offlineEnabled',
'TAS_AUTO_ROOT' => 'autoRoot'
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* Get list Cases Participated
*
* @copyright Colosa - Bolivia
*
* @url GET /participated
*/
public function doGetCasesListParticipated(
$count = true,
$paged = true,
$start = 0,
$limit = 10,
$sort = 'DEL_DELEGATE_DATE',
$dir = 'DESC',
$category = '',
$process = '',
2015-08-11 17:12:59 -04:00
$search = '',
$filter = '',
$date_from = '',
$date_to = '',
$newerThan = '',
$oldestthan =''
) {
try {
if (preg_match($this->regexNull, $newerThan)) {
return [];
}
$dataList['userId'] = $this->getUserId();
$dataList['action'] = 'sent';
$dataList['paged'] = $paged;
$dataList['count'] = $count;
$dataList['start'] = $start;
$dataList['limit'] = $limit;
$dataList['sort'] = $sort;
$dataList['dir'] = $dir;
$dataList['category'] = $category;
$dataList['process'] = $process;
$dataList['search'] = $search;
2015-08-11 17:12:59 -04:00
$dataList['filter'] = $filter;
$dataList['dateFrom'] = $date_from;
$dataList['dateTo'] = $date_to;
$dataList['newerThan'] = $newerThan;
$dataList['oldestthan'] = $oldestthan;
Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601);
$dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601);
/*----------------------------------********---------------------------------*/
if (true) {
//In enterprise version this block of code should always be executed
//In community version this block of code is deleted and is executed the other
$list = new \ProcessMaker\BusinessModel\Lists();
$response = $list->getList('participated_last', $dataList);
} else {
/*----------------------------------********---------------------------------*/
$case = new \ProcessMaker\BusinessModel\Cases();
$response = $case->getList($dataList);
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/
$result = $this->parserDataParticipated($response['data']);
return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
public function parserDataParticipated ($data)
{
$structure = array(
2015-08-11 17:12:59 -04:00
'APP_UID' => 'caseId',
'APP_TITLE' => 'caseTitle',
'APP_NUMBER' => 'caseNumber',
'APP_UPDATE_DATE' => 'date',
'DEL_TASK_DUE_DATE' => 'dueDate',
'DEL_INDEX' => 'delIndex',
'DEL_DELEGATE_DATE' => 'delegateDate',
'currentUser' => array(
2015-08-11 17:12:59 -04:00
'USR_UID' => 'userId',
'USR_FIRSTNAME' => 'firstName',
'USR_LASTNAME' => 'lastName',
2017-05-12 07:40:20 -04:00
'USR_USERNAME' => 'userName',
),
'prevUser' => array(
2015-08-11 17:12:59 -04:00
'PREVIOUS_USR_UID' => 'userId',
'PREVIOUS_USR_FIRSTNAME' => 'firstName',
'PREVIOUS_USR_LASTNAME' => 'lastName',
2017-05-12 07:40:20 -04:00
'PREVIOUS_USR_USERNAME' => 'userName',
),
'process' => array(
2015-08-11 17:12:59 -04:00
'PRO_UID' => 'processId',
'APP_PRO_TITLE' => 'name'
),
'task' => array(
2015-08-11 17:12:59 -04:00
'TAS_UID' => 'taskId',
'APP_TAS_TITLE' => 'name'
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* Get list Cases Paused
*
* @copyright Colosa - Bolivia
*
* @url GET /paused
*/
public function doGetCasesListPaused(
$start = 0,
$limit = 10,
2015-08-11 17:12:59 -04:00
$sort = 'APP_PAUSED_DATE',
$dir = 'DESC',
$cat_uid = '',
$pro_uid = '',
2015-08-11 17:12:59 -04:00
$search = '',
$filter = '',
$date_from = '',
$date_to = '',
$newerThan = '',
$oldestthan = ''
) {
try {
if (preg_match($this->regexNull, $newerThan)) {
return [];
}
$dataList['userId'] = $this->getUserId();
$dataList['action'] = 'paused';
$dataList['paged'] = true;
$dataList['start'] = $start;
$dataList['limit'] = $limit;
$dataList['sort'] = $sort;
$dataList['dir'] = $dir;
$dataList['category'] = $cat_uid;
$dataList['process'] = $pro_uid;
$dataList['search'] = $search;
2015-08-11 17:12:59 -04:00
$dataList['filter'] = $filter;
$dataList['dateFrom'] = $date_from;
$dataList['dateTo'] = $date_to;
$dataList['newerThan'] = $newerThan;
$dataList['oldestthan'] = $oldestthan;
/*----------------------------------********---------------------------------*/
if (true) {
//In enterprise version this block of code should always be executed
//In community version this block of code is deleted and is executed the other
$list = new \ProcessMaker\BusinessModel\Lists();
$response = $list->getList('paused', $dataList);
} else {
/*----------------------------------********---------------------------------*/
$case = new \ProcessMaker\BusinessModel\Cases();
$response = $case->getList($dataList);
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/
$result = $this->parserDataParticipated($response['data']);
return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
public function parserDataPaused ($data)
{
$structure = array(
2015-08-11 17:12:59 -04:00
'APP_UID' => 'caseId',
'APP_TITLE' => 'caseTitle',
'APP_NUMBER' => 'caseNumber',
'APP_UPDATE_DATE' => 'date',
'DEL_TASK_DUE_DATE' => 'dueDate',
'DEL_INDEX' => 'delIndex',
'DEL_DELEGATE_DATE' => 'delegateDate',
'currentUser' => array(
2015-08-11 17:12:59 -04:00
'USR_UID' => 'userId',
'DEL_CURRENT_USR_FIRSTNAME' => 'firstName',
'DEL_CURRENT_USR_LASTNAME' => 'lastName',
2017-05-12 07:40:20 -04:00
'DEL_CURRENT_USR_USERNAME' => 'userName',
),
'prevUser' => array(
2015-08-11 17:12:59 -04:00
'DEL_PREVIOUS_USR_UID' => 'userId',
'DEL_PREVIOUS_USR_FIRSTNAME' => 'firstName',
'DEL_PREVIOUS_USR_LASTNAME' => 'lastName',
2017-05-12 07:40:20 -04:00
'DEL_PREVIOUS_USR_USERNAME' => 'userName',
),
'process' => array(
2015-08-11 17:12:59 -04:00
'PRO_UID' => 'processId',
'APP_PRO_TITLE' => 'name'
),
'task' => array(
2015-08-11 17:12:59 -04:00
'TAS_UID' => 'taskId',
'APP_TAS_TITLE' => 'name'
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* Get list Cases Unassigned
*
* @copyright Colosa - Bolivia
*
* @url GET /unassigned
*/
public function doGetCasesListUnassigned(
$start = 0,
$limit = 0,
$sort = 'APP_CACHE_VIEW.APP_NUMBER',
$dir = 'DESC',
$cat_uid = '',
$pro_uid = '',
$search = '',
$newerThan = '',
$oldestthan =''
) {
try {
if (preg_match($this->regexNull, $newerThan)) {
return [];
}
$dataList['userId'] = $this->getUserId();
$dataList['action'] = 'unassigned';
$dataList['paged'] = false;
$dataList['start'] = $start;
$dataList['limit'] = $limit;
$dataList['sort'] = $sort;
$dataList['dir'] = $dir;
$dataList['category'] = $cat_uid;
$dataList['process'] = $pro_uid;
$dataList['search'] = $search;
$dataList['newerThan'] = $newerThan;
$dataList['oldestthan'] = $oldestthan;
Validator::throwExceptionIfDataNotMetIso8601Format($dataList, $this->arrayFieldIso8601);
$dataList = DateTime::convertDataToUtc($dataList, $this->arrayFieldIso8601);
2017-05-24 12:04:28 -04:00
/*----------------------------------********---------------------------------*/
if (true) {
//In enterprise version this block of code should always be executed
//In community version this block of code is deleted and is executed the other
$oCases = new \ProcessMaker\BusinessModel\Lists();
$response = $oCases->getList('unassigned', $dataList);
} else {
/*----------------------------------********---------------------------------*/
$oCases = new \ProcessMaker\BusinessModel\Cases();
$response = $oCases->getList($dataList);
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/
$result = $this->parserDataUnassigned($response);
return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
public function parserDataUnassigned ($data)
{
$structure = array(
'app_uid' => 'caseId',
'app_title' => 'caseTitle',
'app_number' => 'caseNumber',
'app_update_date' => 'date',
'del_task_due_date' => 'dueDate',
'del_index' => 'delIndex',
'del_delegate_date' => 'delegateDate',
'currentUser' => array(
'usrcr_usr_uid' => 'userId',
'usrcr_usr_firstname' => 'firstName',
'usrcr_usr_lastname' => 'lastName',
2017-05-12 07:40:20 -04:00
'usrcr_usr_username' => 'userName',
),
'prevUser' => array(
'previous_usr_uid' => 'userId',
'previous_usr_firstname' => 'firstName',
'previous_usr_lastname' => 'lastName',
2017-05-12 07:40:20 -04:00
'previous_usr_username' => 'userName',
),
'process' => array(
'pro_uid' => 'processId',
'app_pro_title' => 'name'
),
'task' => array(
'tas_uid' => 'taskId',
'app_tas_title' => 'name'
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
public function replaceFields ($data, $structure)
{
$response = array();
foreach ($data as $field => $d) {
2016-08-03 11:39:08 -04:00
$field = preg_quote($field);
if (is_array($d)) {
$newData = array();
foreach ($d as $field => $value) {
2016-08-03 11:39:08 -04:00
$field = preg_quote($field);
if (
preg_match(
'/\|(' . $field . ')\|/i',
'|' . implode('|', array_keys($structure)) . '|',
$arrayMatch
) &&
!is_array($structure[$arrayMatch[1]])
) {
$newName = $structure[$arrayMatch[1]];
$newData[$newName] = is_null($value) ? "":$value;
} else {
foreach ($structure as $name => $str) {
if (is_array($str) &&
preg_match(
'/\|(' . $field . ')\|/i',
'|' . implode('|', array_keys($str)) . '|',
$arrayMatch
) &&
!is_array($str[$arrayMatch[1]])
) {
$newName = $str[$arrayMatch[1]];
$newData[$name][$newName] = is_null($value) ? "":$value;
}
}
}
}
if (count($newData) > 0)
$response[] = $newData;
} else {
if (
preg_match(
'/\|(' . $field . ')\|/i',
'|' . implode('|', array_keys($structure)) . '|',
$arrayMatch
) &&
!is_array($structure[$arrayMatch[1]])
) {
$newName = $structure[$arrayMatch[1]];
$response[$newName] = is_null($d) ? "":$d;
} else {
foreach ($structure as $name => $str) {
if (is_array($str) &&
preg_match(
'/\|(' . $field . ')\|/i',
'|' . implode('|', array_keys($str)) .'|',
$arrayMatch
) &&
!is_array($str[$arrayMatch[1]])
) {
$newName = $str[$arrayMatch[1]];
$response[$name][$newName] = is_null($d) ? "":$d;
}
}
}
}
}
return $response;
}
/**
* Delete case
*
* @copyright Colosa - Bolivia
*
* @url DELETE /case/:app_uid/delete
*
* @param string $app_uid {@min 32}{@max 32}
*/
public function doDeleteCases($app_uid)
{
try {
$oCase = new \Cases();
$oCase->removeCase( $app_uid );
$result = array (
"message" => \G::LoadTranslation( "ID_COMMAND_EXECUTED_SUCCESSFULLY" )
);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $result;
}
/**
* Get list History case
*
* @copyright Colosa - Bolivia
*
* @url GET /history/:app_uid
*
* @param string $app_uid {@min 32}{@max 32}
*/
public function doGetCasesListHistory($app_uid)
{
try {
$arrayFieldIso8601 = array('DEL_DELEGATE_DATE', 'DEL_INIT_DATE', 'DEL_FINISH_DATE');
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->getCasesListHistory($app_uid);
$response8601 = DateTime::convertUtcToIso8601($response['flow'], $arrayFieldIso8601);
$response['flow'] = $this->parserDataHistory($response8601);
$r = new \stdclass();
$r->data = $response;
$r->totalCount = count($response['flow']);
return $r;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
public function parserDataHistory ($data)
{
$structure = array(
//'' => 'caseId',
//'' => 'caseTitle',
//'' => 'processName',
//'' => 'ownerFullName',
//'flow' => array(
'TAS_TITLE' => 'taskName',
//'' => 'userId',
'USR_NAME' => 'userFullName',
'APP_TYPE' => 'flowStatus', // is null default Router in FE
'DEL_DELEGATE_DATE' => 'dueDate',
//)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
2016-03-31 15:38:27 -04:00
* Get Already Route
*
2017-02-07 13:21:34 -04:00
* @access protected
* @class AccessControl {@className \ProcessMaker\Services\Api\Light}
* @param string $app_uid {@min 1}{@max 32}
* @param int $cas_index
*
* @status 204
* @url GET /case/:app_uid/:cas_index
*/
public function doIfAlreadyRoute($app_uid, $cas_index)
{
try {
$oAppDelegate = new \AppDelegation();
$alreadyRouted = $oAppDelegate->alreadyRouted($app_uid, $cas_index);
if ($alreadyRouted) {
throw (new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')));
}
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
*
* @url GET /project/:prj_uid/dynaforms
*
* @param string $prj_uid {@min 32}{@max 32}
*/
public function doGetDynaForms($prj_uid)
{
try {
$process = new \ProcessMaker\BusinessModel\Process();
$process->setFormatFieldNameInUppercase(false);
$process->setArrayFieldNameForException(array("processUid" => "prj_uid"));
2015-08-04 09:42:20 -04:00
$_SESSION['PROCESS'] = $prj_uid;
$response = $process->getDynaForms($prj_uid);
$result = $this->parserDataDynaForm($response);
2017-08-11 15:49:39 -04:00
$pmDynaForm = new PmDynaform();
foreach ($result as $k => $form) {
$result[$k]['formContent'] = (isset($form['formContent']) && $form['formContent'] != null)?json_decode($form['formContent']):"";
$pmDynaForm->jsonr($result[$k]['formContent']);
$result[$k]['index'] = $k;
}
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $result;
}
/**
* @url GET /project/:prj_uid/activity/:act_uid/steps
*
* @param string $act_uid {@min 32}{@max 32}
* @param string $prj_uid {@min 32}{@max 32}
*/
public function doGetActivitySteps($act_uid, $prj_uid)
{
try {
$task = new \ProcessMaker\BusinessModel\Task();
$task->setFormatFieldNameInUppercase(false);
$task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid"));
$activitySteps = $task->getSteps($act_uid);
2015-08-04 09:09:39 -04:00
$_SESSION['PROCESS'] = $prj_uid;
$dynaForm = new \ProcessMaker\BusinessModel\DynaForm();
$dynaForm->setFormatFieldNameInUppercase(false);
$oMobile = new \ProcessMaker\BusinessModel\Light();
$step = new \ProcessMaker\Services\Api\Project\Activity\Step();
$response = array();
for ($i = 0; $i < count($activitySteps); $i++) {
if ($activitySteps[$i]['step_type_obj'] == "DYNAFORM") {
$dataForm = $dynaForm->getDynaForm($activitySteps[$i]['step_uid_obj']);
$result = $this->parserDataDynaForm($dataForm);
2016-05-19 14:42:05 -04:00
$result["formUpdateDate"] = \ProcessMaker\Util\DateTime::convertUtcToIso8601($result["formUpdateDate"]);
2015-08-19 09:34:29 -04:00
$result['index'] = $i;
$result['stepId'] = $activitySteps[$i]["step_uid"];
$result['stepUidObj'] = $activitySteps[$i]["step_uid_obj"];
2015-08-19 09:34:29 -04:00
$result['stepMode'] = $activitySteps[$i]['step_mode'];
2016-10-20 13:15:28 -04:00
$result['stepCondition'] = $activitySteps[$i]['step_condition'];
2015-08-19 09:34:29 -04:00
$result['stepPosition'] = $activitySteps[$i]['step_position'];
$trigger = $oMobile->statusTriggers($step->doGetActivityStepTriggers($activitySteps[$i]["step_uid"], $act_uid, $prj_uid));
$result["triggers"] = $trigger;
2016-05-19 14:42:05 -04:00
unset($result["formContent"]);
$response[] = $result;
}
}
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $response;
}
/**
* Execute Trigger case
*
* @param string $prj_uid {@min 1}{@max 32}
* @param string $act_uid {@min 1}{@max 32}
* @param string $cas_uid {@min 1}{@max 32}
* @param string $step_uid {@min 32}{@max 32}
* @param string $type {@choice before,after}
*
* @copyright Colosa - Bolivia
*
* @url POST /process/:prj_uid/task/:act_uid/case/:cas_uid/step/:step_uid/execute-trigger/:type
*/
public function doPutExecuteTriggerCase($prj_uid, $act_uid, $cas_uid, $step_uid, $type)
{
try {
$userUid = $this->getUserId();
2015-08-04 19:41:06 -04:00
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->doExecuteTriggerCase($userUid, $prj_uid, $act_uid, $cas_uid, $step_uid, $type);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
2015-08-04 09:09:39 -04:00
return $response;
}
2015-08-19 09:34:29 -04:00
/**
* Get next step
*
* @param string $pro_uid {@min 1}{@max 32}
* @param string $app_uid {@min 1}{@max 32}
* @param int $cas_index
* @param int $step_pos
*
* @url GET /process/:pro_uid/case/:app_uid/:cas_index/step/:step_pos
*/
public function doGetNextStep($pro_uid, $app_uid, $cas_index, $step_pos)
{
try {
$oCase = new \Cases();
2016-03-30 18:04:57 -04:00
$oAppDelegate = new \AppDelegation();
$alreadyRouted = $oAppDelegate->alreadyRouted($app_uid, $cas_index);
if ($alreadyRouted) {
throw (new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')));
}
2015-08-19 09:34:29 -04:00
$userUid = $this->getUserId();
$_SESSION["APPLICATION"] = $app_uid;
$_SESSION["PROCESS"] = $pro_uid;
//$_SESSION["TASK"] = "";
$_SESSION["INDEX"] = $cas_index;
$_SESSION["USER_LOGGED"] = $userUid;
//$_SESSION["USR_USERNAME"] = "";
$response = $oCase->getNextStep($pro_uid, $app_uid, $cas_index, $step_pos );
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $response;
}
/**
* @url GET /project/:prj_uid/dynaformprocessed/:dyn_uid
*
* @param string $dyn_uid {@min 32}{@max 32}
* @param string $prj_uid {@min 32}{@max 32}
*/
public function doGetDynaformProcessed($prj_uid, $dyn_uid, $app_uid = null, $del_index = 0)
{
try {
$dynaForm = new \ProcessMaker\BusinessModel\DynaForm();
$dynaForm->setFormatFieldNameInUppercase(false);
$_SESSION['PROCESS'] = $prj_uid;
$response = $dynaForm->getDynaForm($dyn_uid);
$result = $this->parserDataDynaForm($response);
$result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null) ?
\G::json_decode($result['formContent']) : "";
$caseVariables = array();
if (!is_null($app_uid)) {
$case = new \Cases();
$fields = $case->loadCase($app_uid, $del_index);
$caseVariables = array_merge($fields['APP_DATA'],
\ProcessMaker\BusinessModel\Cases::getGlobalVariables($fields['APP_DATA']));
2017-07-18 14:47:53 -04:00
$caseVariables = DateTime::convertUtcToTimeZone($caseVariables);
}
2017-08-11 15:49:39 -04:00
$pmDynaform = new PmDynaform(array("APP_DATA" => $caseVariables, "CURRENT_DYNAFORM" => $dyn_uid));
$pmDynaform->jsonr($result['formContent']);
return $result;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
2015-08-04 09:42:20 -04:00
* @url GET /project/:prj_uid/dynaform/:dyn_uid
*
* @param string $dyn_uid {@min 32}{@max 32}
2015-08-04 09:42:20 -04:00
* @param string $prj_uid {@min 32}{@max 32}
*/
2015-08-04 09:42:20 -04:00
public function doGetDynaForm($prj_uid, $dyn_uid)
{
try {
$dynaForm = new \ProcessMaker\BusinessModel\DynaForm();
$dynaForm->setFormatFieldNameInUppercase(false);
2015-08-04 09:42:20 -04:00
$_SESSION['PROCESS'] = $prj_uid;
$response = $dynaForm->getDynaForm($dyn_uid);
2016-07-13 15:03:27 -04:00
$result = $this->parserDataDynaForm($response);
$result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null) ? \G::json_decode($result['formContent']) : "";
2017-08-11 15:49:39 -04:00
$pmDynaForm = new PmDynaform(["CURRENT_DYNAFORM" => $dyn_uid]);
$pmDynaForm->jsonr($result['formContent']);
return $result;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
2015-08-04 09:42:20 -04:00
* @url POST /project/:prj_uid/dynaforms
*
* @param string $prj_uid {@min 32}{@max 32}
*
*/
2015-08-04 09:42:20 -04:00
public function doGetDynaFormsId($prj_uid, $request_data)
{
try {
$dynaForm = new \ProcessMaker\BusinessModel\DynaForm();
$dynaForm->setFormatFieldNameInUppercase(false);
2015-08-04 09:42:20 -04:00
$_SESSION['PROCESS'] = $prj_uid;
$return = array();
foreach ($request_data['formId'] as $dyn_uid) {
$response = $dynaForm->getDynaForm($dyn_uid);
2017-08-11 15:49:39 -04:00
$pmDynaForm = new PmDynaform(array("CURRENT_DYNAFORM" => $dyn_uid));
$result = $this->parserDataDynaForm($response);
$result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null)?json_decode($result['formContent']):"";
$pmDynaForm->jsonr($result['formContent']);
$return[] = $result;
}
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $return;
}
public function parserDataDynaForm ($data)
{
$structure = array(
'dyn_uid' => 'formId',
'dyn_title' => 'formTitle',
'dyn_description' => 'formDescription',
2016-05-19 14:42:05 -04:00
'dyn_content' => 'formContent',
'dyn_update_date' => 'formUpdateDate'
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* @url POST /process/:pro_uid/task/:task_uid/start-case
*
* @param string $pro_uid {@min 32}{@max 32}
* @param string $task_uid {@min 32}{@max 32}
*/
public function postStartCase($pro_uid, $task_uid)
{
try {
$oMobile = new \ProcessMaker\BusinessModel\Light();
$result = $oMobile->startCase($this->getUserId(), $pro_uid, $task_uid);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $result;
}
/**
* Return Informaction User for derivate
* assignment Users
*
2015-08-03 20:54:10 -04:00
* @url GET /task/:tas_uid/case/:app_uid/:del_index/assignment
*
2015-08-03 20:54:10 -04:00
* @param string $tas_uid {@min 32}{@max 32}
* @param string $app_uid {@min 32}{@max 32}
2016-08-03 11:39:08 -04:00
* @param int $del_index
*/
2015-08-03 20:54:10 -04:00
public function doGetPrepareInformation($tas_uid, $app_uid, $del_index = null)
{
try {
2015-06-24 17:30:08 -04:00
$usr_uid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
2015-08-03 20:54:10 -04:00
$response = $oMobile->getPrepareInformation($usr_uid, $tas_uid, $app_uid, $del_index);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
2015-06-24 17:30:08 -04:00
return $response;
}
/**
* Route Case
* @url PUT /cases/:app_uid/route-case
*
* @param string $app_uid {@min 32}{@max 32}
2016-08-03 11:39:08 -04:00
* @param int $del_index {@from body}
* @param array $tasks {@from body}
*/
public function doPutRouteCase($app_uid, $del_index = null, $tasks = array())
{
try {
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->updateRouteCase($app_uid, $this->getUserId(), $del_index, $tasks);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $response;
}
/**
* @url GET /user/data
*/
public function doGetUserData()
{
try {
$userUid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->getUserData($userUid);
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
return $response;
}
/**
* @url POST /users/data
*/
public function doGetUsersData($request_data)
{
try {
$response = array();
$oMobile = new \ProcessMaker\BusinessModel\Light();
foreach ($request_data['user']['ids'] as $userUid) {
$response[] = $oMobile->getUserData($userUid);
}
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
return $response;
}
/**
* @url POST /case/:app_uid/upload/location
*
* @param string $app_uid { @min 32}{@max 32}
* @param float $latitude {@min -90}{@max 90}
* @param float $longitude {@min -180}{@max 180}
*/
public function postInputDocumentLocation($app_uid, $latitude, $longitude)
{
try {
$userUid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
$url = "http://maps.googleapis.com/maps/api/staticmap?center=".$latitude.','.$longitude."&format=jpg&size=600x600&zoom=15&markers=color:blue%7Clabel:S%7C".$latitude.','.$longitude;
$imageLocation = imagecreatefromjpeg($url);
$tmpfname = tempnam("php://temp","pmm");
imagejpeg($imageLocation, $tmpfname);
$_FILES["form"]["type"] = "image/jpeg";
$_FILES["form"]["name"] = 'Location.jpg';
$_FILES["form"]["tmp_name"] = $tmpfname;
$_FILES["form"]["error"] = 0;
$sizes = getimagesize($tmpfname);
$_FILES["form"]["size"] = ($sizes['0'] * $sizes['1']);
$request_data = array(array('name' => $_FILES["form"]["name"]));
$file = $oMobile->postUidUploadFiles($userUid, $app_uid, $request_data);
$strPathName = PATH_DOCUMENT . G::getPathFromUID($app_uid) . PATH_SEP;
$strFileName = $file[0]['appDocUid'] . "_" . $file[0]['docVersion'] . ".jpg";
if (! is_dir( $strPathName )) {
G::verifyPath( $strPathName, true );
}
copy($tmpfname, $strPathName . $strFileName);
unlink($tmpfname);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $file;
}
/**
* @url POST /case/:app_uid/download64
*
* @param string $app_uid {@min 32}{@max 32}
*/
public function postDownloadFile($app_uid, $request_data)
{
try {
$oMobile = new \ProcessMaker\BusinessModel\Light();
$files = $oMobile->downloadFile($app_uid, $request_data);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $files;
}
/**
* @url POST /logout
*
* @param $access
* @param $refresh
* @return mixed
*/
public function postLogout($access, $refresh)
{
try {
$oMobile = new \ProcessMaker\BusinessModel\Light();
$files = $oMobile->logout($access, $refresh);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $files;
}
/**
* @url GET /:type/case/:app_uid
*
* @param $access
* @param $refresh
* @return mixed
*/
public function getInformation($type, $app_uid)
{
try {
$arrayFieldIso8601 = array('caseCreateDate', 'caseUpdateData', 'delDelegateDate', 'delInitDate',
'delDueDate', 'delFinishDate');
$userUid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->getInformation($userUid, $type, $app_uid);
$response = $this->parserGetInformation($response);
$response = DateTime::convertUtcToIso8601($response, $arrayFieldIso8601);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $response;
}
public function parserGetInformation ($data)
{
$structure = array(
'case' => array(
'PRO_TITLE' => 'processTitle',
'APP_TITLE' => 'caseTitle',
'APP_NUMBER' => 'caseNumber',
'APP_STATUS' => 'caseStatus',
'APP_UID' => 'caseId',
'CREATOR' => 'caseCreator',
'CREATE_DATE' => 'caseCreateDate',
'UPDATE_DATE' => 'caseUpdateData',
'DESCRIPTION' => 'caseDescription',
2017-02-23 15:02:41 -04:00
'PRO_UID' => 'processId',
'DEL_INDEX' => 'delIndex'
),
'task' => array(
'TAS_TITLE' => 'taskTitle',
'CURRENT_USER' => 'currentUser',
'DEL_DELEGATE_DATE' => 'delDelegateDate',
'DEL_INIT_DATE' => 'delInitDate',
'DEL_TASK_DUE_DATE' => 'delDueDate',
'DEL_FINISH_DATE' => 'delFinishDate',
'TAS_UID' => 'taskId'
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* @url POST /case/:app_uid/upload
*
* @param $access
* @param $refresh
* @return mixed
*/
public function uidUploadFiles($app_uid, $request_data)
{
try {
$userUid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
$filesUids = $oMobile->postUidUploadFiles($userUid, $app_uid, $request_data);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $filesUids;
}
/**
* @url POST /case/:app_uid/upload/:app_doc_uid
*
* @param $access
* @param $refresh
* @return mixed
*/
public function documentUploadFiles($app_uid, $app_doc_uid, $request_data)
{
try {
$userUid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
2015-03-16 14:47:08 -04:00
$response = $oMobile->documentUploadFiles($userUid, $app_uid, $app_doc_uid, $request_data);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
2015-03-16 14:47:08 -04:00
return $response;
}
/**
* @url POST /case/:app_uid/claim
*
2015-05-29 17:31:08 -04:00
* @param $app_uid {@min 1}{@max 32}
2015-03-16 14:47:08 -04:00
* @return mixed
*/
public function claimCaseUser($app_uid)
{
try {
$userUid = $this->getUserId();
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->claimCaseUser($userUid, $app_uid);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $response;
}
/**
* Get Case Notes
*
* @param string $app_uid {@min 1}{@max 32}
2016-08-04 12:11:23 -04:00
* @param int $start {@from path}
* @param int $limit {@from path}
* @param string $sort {@from path}
* @param string $dir {@from path}
* @param string $usr_uid {@from path}
* @param string $date_from {@from path}
* @param string $date_to {@from path}
* @param string $search {@from path}
* @return array
*
* @copyright Colosa - Bolivia
*
* @url GET /case/:app_uid/notes
*/
public function doGetCaseNotes(
$app_uid,
$start = 0,
$limit = 25,
$sort = 'APP_CACHE_VIEW.APP_NUMBER',
$dir = 'DESC',
$usr_uid = '',
$date_from = '',
$date_to = '',
$search = ''
) {
try {
$dataList['start'] = $start;
$dataList['limit'] = $limit;
$dataList['sort'] = $sort;
$dataList['dir'] = $dir;
$dataList['user'] = $usr_uid;
$dataList['dateFrom'] = $date_from;
$dataList['dateTo'] = $date_to;
$dataList['search'] = $search;
2015-04-30 20:50:36 -04:00
$appNotes = new \AppNotes();
$response = $appNotes->getNotesList( $app_uid, '', $start, $limit );
$response = $this->parserDataNotes($response['array']['notes']);
return DateTime::convertUtcToIso8601($response, array('date'));
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
public function parserDataNotes ($data)
{
$structure = array(
2015-04-30 20:50:36 -04:00
'APP_UID' => 'caseId',
'notes' => array(
2015-04-30 20:50:36 -04:00
'NOTE_DATE' => 'date',
'NOTE_CONTENT' => 'content'
),
'user' => array(
2015-04-30 21:33:59 -04:00
'USR_UID' => 'userId',
'USR_USERNAME' => 'name',
'USR_FIRSTNAME' => 'firstName',
'USR_LASTNAME' => 'lastName',
'USR_EMAIL' => 'email'
)
);
$response = $this->replaceFields($data, $structure);
return $response;
}
/**
* Post Case Notes
*
* @param string $app_uid {@min 1}{@max 32}
* @param string $noteContent {@min 1}{@max 500}
* @param int $sendMail {@choice 1,0}
*
* @copyright Colosa - Bolivia
*
* @url POST /case/:app_uid/note
*/
public function doPostCaseNote($app_uid, $noteContent, $sendMail = 0)
{
try {
$usr_uid = $this->getUserId();
$cases = new \ProcessMaker\BusinessModel\Cases();
$sendMail = ($sendMail == 0) ? false : true;
$cases->saveCaseNote($app_uid, $usr_uid, $noteContent, $sendMail);
$result = array("status" => 'ok');
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $result;
}
/**
* GET list category
*
* @return array
* @throws RestException
*
* @url GET /category
*/
public function getCategoryList()
{
try {
$oLight = new \ProcessMaker\BusinessModel\Light();
$category = $oLight->getCategoryList();
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $category;
}
/**
* GET list process
*
* @return array
* @throws RestException
*
* @param string $action {@min 1}{@max 32}
* @param string $cat_uid {@max 32}{@from path}
*
* @url GET /process/:action
*/
public function getProcessList ($action, $cat_uid = null)
{
try {
$usr_uid = $this->getUserId();
$oLight = new \ProcessMaker\BusinessModel\Light();
$process = $oLight->getProcessList($action, $cat_uid, $usr_uid);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $process;
}
/**
* GET list process
*
* @return array
* @throws RestException
*
* @param string $task_uid {@min 1}{@max 32}
*
* @url GET /userstoreassign/:task_uid
*/
public function getUsersToReassign ($task_uid)
{
try {
$usr_uid = $this->getUserId();
$oLight = new \ProcessMaker\BusinessModel\Light();
$process = $oLight->getUsersToReassign($usr_uid, $task_uid);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $process;
}
/**
* @return \stdclass
* @throws RestException
*
* @param string $app_uid {@min 1}{@max 32}
* @param string $to_usr_uid {@min 1}{@max 32}
*
* @url POST /reassign/:app_uid/user/:to_usr_uid
*/
public function reassignCase ($app_uid, $to_usr_uid)
{
try {
$usr_uid = $this->getUserId();
$oLight = new \ProcessMaker\BusinessModel\Light();
$process = $oLight->reassignCase($usr_uid, $app_uid, $to_usr_uid);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $process;
}
/**
* Paused Case
*
* @return \stdclass
* @throws RestException
*
* @param string $app_uid {@min 1}{@max 32}
*
* @url POST /cases/:app_uid/pause
*/
public function pauseCase ($app_uid, $request_data)
{
try {
Validator::throwExceptionIfDataNotMetIso8601Format($request_data, array('unpauseDate'));
$usr_uid = $this->getUserId();
$oLight = new \ProcessMaker\BusinessModel\Light();
$process = $oLight->pauseCase($usr_uid, $app_uid, $request_data);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $process;
}
/**
* Unpaused Case
*
* @return \stdclass
* @throws RestException
*
* @param string $app_uid {@min 1}{@max 32}
*
* @url POST /cases/:app_uid/unpause
*/
public function unpauseCase ($app_uid)
{
$result = array();
try {
$usr_uid = $this->getUserId();
$cases = new \ProcessMaker\BusinessModel\Cases();
$cases->putUnpauseCase($app_uid, $usr_uid);
$result["status"] = "ok";
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
return $result;
}
/**
* Cancel Case
*
* @param string $cas_uid {@min 1}{@max 32}
*
* @copyright Colosa - Bolivia
*
* @url POST /cases/:app_uid/cancel
*/
public function doPutCancelCase($app_uid)
{
$response = array("status" => "false");
try {
$userUid = $this->getUserId();
$cases = new \ProcessMaker\BusinessModel\Cases();
$cases->putCancelCase($app_uid, $userUid);
$response["status"] = "ok";
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
return $response;
}
/**
* Get Case Variables
*
2016-08-13 13:13:59 -04:00
* @access protected
* @class AccessControl {@className \ProcessMaker\Services\Api\Cases}
* @url GET /:app_uid/variables
2016-08-13 13:13:59 -04:00
*
* @param string $app_uid {@min 1}{@max 32}
* @param string $dyn_uid
* @param string $pro_uid
* @param string $act_uid
* @param int $app_index
* @return mixed
* @throws RestException
*/
public function doGetCaseVariables($app_uid, $dyn_uid = null, $pro_uid = null, $act_uid = null, $app_index = null)
{
try {
$usr_uid = $this->getUserId();
$cases = new \ProcessMaker\BusinessModel\Cases();
$response = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid, $pro_uid, $act_uid, $app_index);
return DateTime::convertUtcToTimeZone($response);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* Put Case Variables
*
* @param string $app_uid {@min 1}{@max 32}
* @param array $request_data
* @param string $dyn_uid {@from path}
2016-08-04 12:11:23 -04:00
* @param int $del_index {@from path}
*
* @url PUT /:app_uid/variable
*/
public function doPutCaseVariables($app_uid, $request_data, $dyn_uid = '', $del_index = 0)
{
try {
2016-09-16 14:06:16 -04:00
//Check if the user is a supervisor or have permissions
$usr_uid = $this->getUserId();
$cases = new \ProcessMaker\BusinessModel\Cases();
$hasAccess = $cases->checkUserHasPermissionsOrSupervisor($usr_uid, $app_uid, $dyn_uid);
//When the user is a supervisor del_index is 0
if ($del_index <= 0 && !$hasAccess) {
2016-08-17 18:42:56 -04:00
throw (new \Exception(G::LoadTranslation('ID_INVALID_VALUE_EXPECTING_POSITIVE_INTEGER', array('del_index')), Api::STAT_APP_EXCEPTION));
}
2016-08-10 15:33:49 -04:00
if ($del_index === null) {
throw (new \Exception(G::LoadTranslation('ID_CAN_NOT_BE_NULL', array('del_index')), Api::STAT_APP_EXCEPTION));
}
if ($del_index > 0) {
if ($cases->caseAlreadyRouted($app_uid, $del_index, $usr_uid)) {
throw (new \Exception(G::LoadTranslation('ID_CASE_ALREADY_DERIVATED'), Api::STAT_APP_EXCEPTION));
}
}
$request_data = \ProcessMaker\Util\DateTime::convertDataToUtc($request_data);
$cases->setCaseVariables($app_uid, $request_data, $dyn_uid, $usr_uid, $del_index);
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
2015-08-19 14:32:02 -04:00
* Get in base64 the image process (processmap)
*
* @url GET /process/:pro_uid/case
*
* @param string $prj_uid {@min 32}{@max 32}
2015-08-19 14:32:02 -04:00
* @param string $app_uid {@min 32}{@max 32}{@from path}
*/
2015-08-19 14:32:02 -04:00
public function doGetProcessMapImage($pro_uid, $app_uid = null)
{
$return = array();
try {
$oPMap = new \ProcessMaker\BusinessModel\ProcessMap();
2015-08-19 14:32:02 -04:00
$schema = Adapter\BpmnWorkflow::getStruct($pro_uid);
2015-08-19 14:32:02 -04:00
$schemaStatus = array();
if (!is_null($app_uid)) {
$case = new \ProcessMaker\BusinessModel\Cases();
$case->setFormatFieldNameInUppercase(false);
$schemaStatus = $case->getTasks($app_uid);
}
$file = $oPMap->get_image($schema, $schemaStatus);
ob_start();
imagepng($file);
$image = ob_get_clean();
$return["map"] = base64_encode($image);
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
return $return;
}
2015-04-30 17:08:24 -04:00
/**
* Get configuration ProcessMaker
*
* @return array
*
* @access public
2015-04-30 17:08:24 -04:00
* @url GET /config
*
2016-08-03 11:39:08 -04:00
* @param boolean $fileLimit {@from path}
2015-04-30 17:08:24 -04:00
*/
public function getConfiguration($fileLimit = false)
2015-04-30 17:08:24 -04:00
{
try {
$params = array('fileLimit' => $fileLimit);
2015-04-30 17:08:24 -04:00
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->getConfiguration($params);
2015-04-30 17:08:24 -04:00
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
return $response;
}
/**
* Get configuration ProcessMaker
*
* @return array
*
* @url GET /config-user
*
2016-08-03 11:39:08 -04:00
* @param boolean $fileLimit {@from path}
* @param boolean $tz {@from path}
*/
public function getConfigurationUser($fileLimit = false, $tz = false)
{
try {
$params = array('fileLimit' => $fileLimit, 'tz' => $tz);
$oMobile = new \ProcessMaker\BusinessModel\Light();
$response = $oMobile->getConfiguration($params);
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
return $response;
}
2016-06-03 17:39:48 -04:00
/**
* Get next step
*
* @url POST /get-next-step/:app_uid
* @return array
*/
public function doGetStep($app_uid, $request_data)
{
$pro_uid = $request_data["pro_uid"];
$act_uid = $request_data["act_uid"];
$step_uid = $request_data["step_uid"];
$step_pos = $request_data["step_pos"];
$app_index = $request_data["app_index"];
$dyn_uid = isset($request_data["dyn_uid"]) ? $request_data["dyn_uid"] : null;
$usr_uid = $this->getUserId();
2016-09-30 16:38:23 -04:00
$response = array();
2016-06-03 17:39:48 -04:00
//conditionalSteps
$oCase = new \Cases();
$oAppDelegate = new \AppDelegation();
$alreadyRouted = $oAppDelegate->alreadyRouted($app_uid, $app_index);
if ($alreadyRouted) {
throw (new RestException(Api::STAT_APP_EXCEPTION, G::LoadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')));
}
$_SESSION["APPLICATION"] = $app_uid;
$_SESSION["PROCESS"] = $pro_uid;
$_SESSION["INDEX"] = $app_index;
$_SESSION["USER_LOGGED"] = $usr_uid;
2016-06-03 17:39:48 -04:00
do {
$conditionalSteps = $oCase->getNextStep($pro_uid, $app_uid, $app_index, $step_pos);
if (is_array($conditionalSteps) && (
$conditionalSteps["TYPE"] === "DYNAFORM" ||
$conditionalSteps["TYPE"] === "DERIVATION")
) {
break;
} else {
$step_pos = $step_pos + 1;
}
} while ($conditionalSteps !== false);
$response["conditionalSteps"] = $conditionalSteps;
2016-09-30 15:44:20 -04:00
//trigger before
2016-09-30 16:38:23 -04:00
if($conditionalSteps) {
$c = new \Criteria();
$c->clearSelectColumns();
$c->addSelectColumn(\StepPeer::STEP_UID);
$c->addSelectColumn(\StepPeer::STEP_UID_OBJ);
$c->add(\StepPeer::TAS_UID, $act_uid);
$c->add(\StepPeer::STEP_TYPE_OBJ, 'DYNAFORM');
$c->add(\StepPeer::STEP_UID_OBJ, $conditionalSteps['UID']);
$rs = \StepPeer::doSelectRS($c);
$rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rs->next();
$row = $rs->getRow();
if ($row) {
$oMobile = new \ProcessMaker\BusinessModel\Light();
$triggers = $oMobile->doExecuteTriggerCase($usr_uid, $pro_uid, $act_uid, $app_uid, $row['STEP_UID'], "before", $app_index);
if ($triggers["status"] === "ok") {
$triggers["status"] = "200";
}
$response["triggers"] = $triggers;
}
2016-09-30 15:44:20 -04:00
}
2016-06-03 17:39:48 -04:00
//variables
$cases = new \ProcessMaker\BusinessModel\Cases();
$variables = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid, $pro_uid, $act_uid, $app_index);
2016-06-03 17:39:48 -04:00
$variables = DateTime::convertUtcToTimeZone($variables);
$response["variables"] = $variables;
return $response;
}
}