Files
luos/workflow/engine/controllers/processProxy.php
2016-03-08 01:47:53 +00:00

474 lines
16 KiB
PHP
Executable File

<?php
class ProcessProxy extends HttpProxyController
{
/**
* get Process Categories List with defailt value (empty option) and -All- aoption
*/
public function categoriesList ()
{
$data = $this->getCategoriesList();
$defaultOption[] = Array ('CATEGORY_UID' => '<reset>','CATEGORY_NAME' => G::LoadTranslation( 'ID_ALL' ));
return array_merge( $defaultOption, $data );
}
/**
* Get Process categories list with defailt value (empty option)
*
* @return array
*/
public function getCategoriesList ()
{
require_once "classes/model/ProcessCategory.php";
$processCategory = new ProcessCategory();
$defaultOption = Array ();
$defaultOption[] = Array ('CATEGORY_UID' => '','CATEGORY_NAME' => G::LoadTranslation( 'ID_PROCESS_NO_CATEGORY' ));
return array_merge( $defaultOption, $processCategory->getAll( 'array' ) );
}
/**
* Save new process
*
* @param object $httpData
*/
public function saveProcess ($httpData)
{
$projectType = empty($_GET['type']) ? 'classicProject' : $_GET['type'];
try {
$data = (array) $httpData;
$data['PRO_CREATE_USER'] = $_SESSION['USER_LOGGED'];
if ($projectType == "classicProject") {
$project = new ProcessMaker\Project\Workflow($data);
} else {
$project = new ProcessMaker\Project\Adapter\WorkflowBpmn($data);
}
$sProUid = $project->getUid();
// require_once 'classes/model/Task.php';
// G::LoadClass( 'processMap' );
// $oProcessMap = new ProcessMap();
//
// $httpData->PRO_TITLE = trim( $httpData->PRO_TITLE );
//
// try {
// if (! isset( $httpData->PRO_UID )) {
// if (Process::existsByProTitle( $httpData->PRO_TITLE )) {
// $result = array ('success' => false,'msg' => G::LoadTranslation( 'ID_SAVE_PROCESS_ERROR' ),'errors' => array ('PRO_TITLE' => G::LoadTranslation( 'ID_PROCESSTITLE_ALREADY_EXISTS', SYS_LANG, Array ('PRO_TITLE' => $httpData->PRO_TITLE
// ) )
// )
// );
// print G::json_encode( $result );
// exit( 0 );
// }
//
// $processData['USR_UID'] = $_SESSION['USER_LOGGED'];
// $processData['PRO_TITLE'] = $httpData->PRO_TITLE;
// $processData['PRO_DESCRIPTION'] = $httpData->PRO_DESCRIPTION;
// $processData['PRO_CATEGORY'] = $httpData->PRO_CATEGORY;
//
// $sProUid = $oProcessMap->createProcess( $processData );
//
// //call pluginsx
// $oData['PRO_UID'] = $sProUid;
// $oData['PRO_TEMPLATE'] = isset( $httpData->PRO_TEMPLATE ) && $httpData->PRO_TEMPLATE != '' ? $httpData->PRO_TEMPLATE : '';
// $oData['PROCESSMAP'] = $oProcessMap;
//
// $oPluginRegistry = & PMPluginRegistry::getSingleton();
// $oPluginRegistry->executeTriggers( PM_NEW_PROCESS_SAVE, $oData );
//
// } else {
// //$oProcessMap->updateProcess($_POST['form']);
// $sProUid = $httpData->PRO_UID;
// }
//
// //Save Calendar ID for this process
// if (isset( $httpData->PRO_CALENDAR )) {
// G::LoadClass( "calendar" );
// $calendarObj = new Calendar();
// $calendarObj->assignCalendarTo( $sProUid, $httpData->PRO_CALENDAR, 'PROCESS' );
// }
//
$this->success = true;
$this->PRO_UID = $sProUid;
$this->msg = G::LoadTranslation( 'ID_CREATE_PROCESS_SUCCESS' );
} catch (Exception $e) {
$this->success = false;
$this->msg = $e->getMessage();
$this->trace = $e->getTraceAsString();
}
}
/**
* Change process status
*/
public function changeStatus ()
{
$ids = explode( ',', $_REQUEST['UIDS'] );
G::LoadClass( 'processes' );
$oProcess = new Processes();
if (count( $ids ) > 0) {
foreach ($ids as $id) {
$oProcess->changeStatus( htmlspecialchars($id) );
}
}
}
/**
* Change process debug mode
*/
public function changeDebugMode ()
{
$ids = explode( ',', $_REQUEST['UIDS'] );
G::LoadClass( 'processes' );
$oProcess = new Processes();
if (count( $ids ) > 0) {
foreach ($ids as $id) {
$oProcess->changeDebugMode( $id );
}
}
}
/**
* Get users list
*
* @param $params httpdata object
*/
public function getUsers ($params)
{
require_once 'classes/model/Users.php';
$search = isset( $params->search ) ? $params->search : null;
return Users::getAll( $params->start, $params->limit, $search );
}
/**
* Get groups list
*
* @param $params httpdata object
*/
public function getGroups ($params)
{
require_once 'classes/model/Groupwf.php';
$search = isset( $params->search ) ? $params->search : null;
return Groupwf::getAll( $params->start, $params->limit, $search );
}
/**
* Assign actors to task
*
* @param unknown_type $param
*/
public function assignActorsTask ($param)
{
require_once 'classes/model/TaskUser.php';
require_once 'classes/model/Task.php';
$oTaskUser = new TaskUser();
$UIDS = explode( ',', $param->UIDS );
$TU_TYPE = $param->TU_TYPE;
$TAS_UID = $param->TAS_UID;
foreach ($UIDS as $UID) {
if ($param->TU_RELATION == '1') {
$res[] = $oTaskUser->create( array ('TAS_UID' => $TAS_UID,'USR_UID' => $UID,'TU_TYPE' => $TU_TYPE,'TU_RELATION' => 1) );
} else {
$res[] = $oTaskUser->create( array ('TAS_UID' => $TAS_UID,'USR_UID' => $UID,'TU_TYPE' => $TU_TYPE,'TU_RELATION' => 2) );
}
}
$task = TaskPeer::retrieveByPk( $TAS_UID );
$this->success = true;
if (! in_array( '-1', $res )) {
if (count( $UIDS ) == 1) {
$this->msg = __( 'ID_ACTOR_ASSIGNED_SUCESSFULLY', SYS_LANG, Array ('tas_title' => $task->getTasTitle()) );
} else {
$this->msg = __( 'ID_ACTORS_ASSIGNED_SUCESSFULLY', SYS_LANG, Array (count( $UIDS ),$task->getTasTitle()) );
}
} else {
if (count( $UIDS ) == 1) {
$this->msg = __( 'ID_ACTOR_ALREADY_ASSIGNED', SYS_LANG, Array ($task->getTasTitle()) );
} else {
$this->msg = __( 'ID_SOME_ACTORS_ALREADY_ASSIGNED', SYS_LANG, Array ($task->getTasTitle()) );
}
}
}
/**
* Remove Actors from Task
*
* @param $param
*/
public function removeActorsTask ($param)
{
require_once 'classes/model/TaskUser.php';
$oTaskUser = new TaskUser();
$USR_UIDS = explode( ',', $param->USR_UID );
$TU_RELATIONS = explode( ',', $param->TU_RELATION );
$TU_TYPE = $param->TU_TYPE;
foreach ($USR_UIDS as $i => $USR_UID) {
if ($TU_RELATIONS[$i] == 1) {
$oTaskUser->remove( $param->TAS_UID, $USR_UID, $TU_TYPE, 1 );
} else {
$oTaskUser->remove( $param->TAS_UID, $USR_UID, $TU_TYPE, 2 );
}
}
$this->success = true;
$this->msg = '';
}
/**
* Get actors asssigned to task
*
* @param object $httpData{tas_uid, tu_type},
*/
public function getActorsTask ($httpData)
{
require_once 'classes/model/TaskUser.php';
$usersTaskList = Array ();
$task = new TaskUser();
$usersTask = $task->getUsersTask( $httpData->tas_uid, $httpData->tu_type );
foreach ($usersTask->data as $userTask) {
$usersTaskListItem['TAS_UID'] = $userTask['TAS_UID'];
if ($userTask['TU_RELATION'] == 1) {
$usersTaskListItem['USR_USERNAME'] = $userTask['USR_USERNAME'];
$usersTaskListItem['USR_FIRSTNAME'] = $userTask['USR_FIRSTNAME'];
$usersTaskListItem['USR_LASTNAME'] = $userTask['USR_LASTNAME'];
} else {
$usersTaskListItem['NAME'] = $userTask['GRP_TITLE'];
}
$usersTaskListItem['TU_RELATION'] = $userTask['TU_RELATION'];
$usersTaskListItem['USR_UID'] = $userTask['USR_UID'];
$usersTaskList[] = $usersTaskListItem;
}
$this->data = $usersTaskList;
$this->totalCount = $usersTask->totalCount;
}
/**
* Get Process details
*
* @param object $httpData{PRO_UID}
* @return array
*/
public function getProcessDetail ($httpData)
{
require_once 'classes/model/Process.php';
G::loadClass( 'tasks' );
$tasks = new Tasks();
$PRO_UID = $httpData->PRO_UID;
$process = ProcessPeer::retrieveByPk( $PRO_UID );
$tasksList = $tasks->getAllTasks( $PRO_UID );
$rootNode->id = $process->getProUid();
$rootNode->type = 'process';
$rootNode->typeLabel = G::LoadTranslation( 'ID_PROCESS' );
$rootNode->text = $process->getProTitle();
$rootNode->leaf = count( $tasksList ) > 0 ? false : true;
$rootNode->iconCls = 'ss_sprite ss_application';
$rootNode->expanded = true;
foreach ($tasksList as $task) {
$node = new stdClass();
$node->id = $task['TAS_UID'];
$node->type = 'task';
$node->typeLabel = G::LoadTranslation( 'ID_TASK' );
$node->text = $task['TAS_TITLE'];
$node->iconCls = 'ss_sprite ss_layout';
$node->leaf = true;
$rootNode->children[] = $node;
}
$treeDetail[] = $rootNode;
return $treeDetail;
}
/**
* Get process and task properties
*
* @param object $httpData{type, UID}
*/
public function getProperties ($httpData)
{
switch ($httpData->type) {
case 'process':
require_once 'classes/model/ProcessCategory.php';
require_once 'classes/model/CalendarDefinition.php';
G::LoadClass( 'processMap' );
$oProcessMap = new processMap( new DBConnection() );
$process = $oProcessMap->editProcessNew( $httpData->UID );
$category = ProcessCategoryPeer::retrieveByPk( $process['PRO_CATEGORY'] );
$categoryName = is_object( $category ) ? $category->getCategoryName() : '';
$calendar = CalendarDefinitionPeer::retrieveByPk( $process['PRO_CALENDAR'] );
$calendarName = is_object( $calendar ) ? $calendar->getCalendarName() : '';
$properties['Title'] = $process['PRO_TITLE'];
$properties['Description'] = $process['PRO_DESCRIPTION'];
$properties['Calendar'] = $calendarName;
$properties['Category'] = $categoryName;
$properties['Debug'] = $process['PRO_DEBUG'] == '1' ? true : false;
$this->sucess = true;
$this->prop = $properties;
break;
case 'task':
require_once 'classes/model/Task.php';
$task = new Task();
$taskData = $task->load( $httpData->UID );
$properties['Title'] = $taskData['TAS_TITLE'];
$properties['Description'] = $taskData['TAS_DESCRIPTION'];
$properties['Variable for case priority'] = $taskData['TAS_PRIORITY_VARIABLE'];
$properties['Starting Task'] = $taskData['TAS_START'] == 'TRUE' ? true : false;
$this->sucess = true;
$this->prop = $properties;
break;
}
}
/**
* Save process and task propeties
*
* @param object $httpData{UID, type, property, value}
*/
public function saveProperties ($httpData)
{
switch ($httpData->type) {
case 'process':
require_once 'classes/model/ProcessCategory.php';
require_once 'classes/model/CalendarDefinition.php';
G::LoadClass( 'processMap' );
$oProcessMap = new ProcessMap();
$process['PRO_UID'] = $httpData->UID;
switch ($httpData->property) {
case 'Title':
$fieldName = 'PRO_TITLE';
break;
case 'Description':
$fieldName = 'PRO_DESCRIPTION';
break;
case 'Debug':
$fieldName = 'PRO_DEBUG';
$httpData->value = $httpData->value == 'true' ? '1' : '0';
break;
case 'Category':
$fieldName = 'PRO_CATEGORY';
$category = ProcessCategory::loadByCategoryName( $httpData->value );
$httpData->value = $category['CATEGORY_UID'];
break;
case 'Calendar':
$fieldName = 'PRO_CALENDAR';
$calendar = CalendarDefinition::loadByCalendarName( $httpData->value );
G::LoadClass( "calendar" );
$calendarObj = new Calendar();
$calendarObj->assignCalendarTo( $process['PRO_UID'], $calendar['CALENDAR_UID'], 'PROCESS' );
break;
}
if ($fieldName != 'PRO_CALENDAR') {
$process[$fieldName] = $httpData->value;
$oProcessMap->updateProcess( $process );
}
break;
case 'task':
require_once 'classes/model/Task.php';
$oTask = new Task();
$task['TAS_UID'] = $httpData->UID;
switch ($httpData->property) {
case 'Title':
$fieldName = 'TAS_TITLE';
break;
case 'Description':
$fieldName = 'TAS_DESCRIPTION';
break;
case 'Variable for case priority':
$fieldName = 'TAS_PRIORITY_VARIABLE';
break;
case 'Starting Task':
$fieldName = 'TAS_START';
$httpData->value = strtoupper( $httpData->value );
break;
}
$task[$fieldName] = $httpData->value;
$oTask->update( $task );
break;
}
$this->sucess = true;
}
/**
* get calendar list
*/
public function getCaledarList ()
{
G::LoadClass( 'calendar' );
$calendar = new CalendarDefinition();
$calendarObj = $calendar->getCalendarList( true, true );
$calendarObj['array'][0] = Array ('CALENDAR_UID' => '','CALENDAR_NAME' => ''
);
$this->rows = $calendarObj['array'];
}
/**
* Get PM Variables
*
* @param $param{PRO_UID}
*/
public function getPMVariables ($param)
{
G::LoadClass( 'processMap' );
$oProcessMap = new processMap( new DBConnection() );
$rows = getDynaformsVars( $param->PRO_UID );
foreach ($rows as $i => $var) {
$rows[$i]['sName'] = "@@{$var['sName']}";
}
$this->rows = $rows;
}
/**
* Generate BPMN (New record is generated)
*
* return void
*/
public function generateBpmn()
{
try {
$processUid = $_POST["processUid"];
$workflowBpmn = new \ProcessMaker\Project\Adapter\WorkflowBpmn();
$projectUid = $workflowBpmn->generateBpmn($processUid, "processUid", $_SESSION["USER_LOGGED"]);
$this->status = "OK";
$this->projectUid = $projectUid;
} catch (Exception $e) {
$this->status = "ERROR";
$this->message = $e->getMessage();
}
}
}