diff --git a/workflow/engine/src/BusinessModel/CaseScheduler.php b/workflow/engine/src/BusinessModel/CaseScheduler.php index 5826e751d..43e2b9330 100644 --- a/workflow/engine/src/BusinessModel/CaseScheduler.php +++ b/workflow/engine/src/BusinessModel/CaseScheduler.php @@ -189,7 +189,7 @@ class CaseScheduler * @param string $userPass Password * @param string $sProcessUID Process * - * return bool Return true if the user exists, false otherwise + * return message if the authentication fail */ public function getUser($userName, $userPass, $sProcessUID) { diff --git a/workflow/engine/src/BusinessModel/ProjectUser.php b/workflow/engine/src/BusinessModel/ProjectUser.php index 346a52430..d948022ea 100644 --- a/workflow/engine/src/BusinessModel/ProjectUser.php +++ b/workflow/engine/src/BusinessModel/ProjectUser.php @@ -67,14 +67,10 @@ class ProjectUser $sDelimiter = \DBAdapter::getStringDelimiter(); $oCriteria = new \Criteria('workflow'); $oCriteria->setDistinct(); + $oCriteria->addSelectColumn(\UsersPeer::USR_UID); $oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); $oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME); $oCriteria->addSelectColumn(\UsersPeer::USR_USERNAME); - $oCriteria->addSelectColumn(\UsersPeer::USR_EMAIL); - $oCriteria->addSelectColumn(\TaskUserPeer::TAS_UID); - $oCriteria->addSelectColumn(\TaskUserPeer::USR_UID); - $oCriteria->addSelectColumn(\TaskUserPeer::TU_TYPE); - $oCriteria->addSelectColumn(\TaskUserPeer::TU_RELATION); $oCriteria->addJoin(\TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); $oCriteria->addJoin(\TaskUserPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN); $oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID); @@ -89,36 +85,25 @@ class ProjectUser $oCase = new \Cases(); $startTasks = $oCase->getStartCases( $aRow['USR_UID'] ); foreach ($startTasks as $task) { - if ((isset( $task['pro_uid'] )) && ($task['pro_uid'] == $sProcessUID)) { + if ((isset( $task['pro_uid'] )) && ($task['pro_uid'] == $sProcessUID) ) { $taskValue = explode( '(', $task['value'] ); $tasksLastIndex = count( $taskValue ) - 1; $taskValue = explode( ')', $taskValue[$tasksLastIndex] ); - //echo ""; - echo $task['uid'] ." ------ ".$aUsers." fin "; - //var_dump($aUsers); - if (in_array($task['uid'], $aUsers)) { - echo "Es mac"; - } - - $aUsers[] = array(/*'usr_uid' => $aRow['USR_UID'], - 'usr_username' => $aRow['USR_USERNAME'], - 'usr_firstname' => $aRow['USR_FIRSTNAME'], - 'usr_lastname' => $aRow['USR_LASTNAME'],*/ - 'tas_name' => $taskValue[0], - 'tas_uid' => $task['uid']); - if (in_array($task['uid'], $aUsers['tas_uid'] )) { - echo "Es mac"; - } - echo $task['uid'] . " "; - $oDataset->next(); + $aUsers[] = array('act_name' => $taskValue[0], + 'act_uid' => $task['uid']); } - //$oDataset->next(); } - //die(); - $oDataset->next(); - + $oDataset->next(); } - return $aUsers; + $new = array(); + $exclude = array(""); + for ($i = 0; $i<=count($aUsers)-1; $i++) { + if (!in_array(trim($aUsers[$i]["act_uid"]) ,$exclude)) { + $new[] = $aUsers[$i]; + $exclude[] = trim($aUsers[$i]["act_uid"]); + } + } + return $new; } catch (Exception $e) { throw $e; } @@ -146,8 +131,8 @@ class ProjectUser $taskValue = explode( '(', $task['value'] ); $tasksLastIndex = count( $taskValue ) - 1; $taskValue = explode( ')', $taskValue[$tasksLastIndex] ); - $aUsers[] = array('tas_uid' => $task['uid'], - 'tas_name' => $taskValue[0]); + $aUsers[] = array('act_uid' => $task['uid'], + 'act_name' => $taskValue[0]); } } return $aUsers; @@ -156,5 +141,109 @@ class ProjectUser } } + /** + * Return the users and users groups to assigned to a process + * + * @param string $sProcessUID {@min 32} {@max 32} + * @param array $oData + * + * return array + * + * @access public + */ + public function postProjectWsUserCanStartTask($sProcessUID, $oData) + { + try { + /** + * process_webEntryValidate + * validates if the username and password are valid data and if the user assigned + * to the webentry has the rights and persmissions required + */ + $sPRO_UID = $sProcessUID; + $sTASKS = $oData['act_uid']; + $sTASKS_SEL = $oData->TASKS_NAME; + $sDYNAFORM = $oData->DYNAFORM; + $sWE_TYPE = $oData->WE_TYPE; + $sWS_USER = trim( $oData['username'] ); + $sWS_PASS = trim( $oData['password'] ); + $sWS_ROUNDROBIN = $oData->WS_ROUNDROBIN; + $sWE_USR = $oData->WE_USR; + if (\G::is_https()) + $http = 'https://'; + else + $http = 'http://'; + $endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; + @$client = new \SoapClient( $endpoint ); + $user = $sWS_USER; + $pass = $sWS_PASS; + $params = array ('userid' => $user,'password' => $pass); + $result = $client->__SoapCall('login', array ($params)); + $fields['status_code'] = $result->status_code; + $fields['message'] = 'ProcessMaker WebService version: ' . $result->version . "\n" . $result->message; + $fields['version'] = $result->version; + $fields['time_stamp'] = $result->timestamp; + $messageCode = 1; + \G::LoadClass( 'Task' ); + \G::LoadClass( 'User' ); + \G::LoadClass( 'TaskUser' ); + \G::LoadClass( 'Groupwf' ); + /** + * note added by gustavo cruz gustavo-at-colosa-dot-com + * This is a little check to see if the GroupUser class has been declared or not. + * Seems that the problem its present in a windows installation of PM however. + * It's seems that could be replicated in a Linux server easily. + * I recomend that in some way check already if a imported class is declared + * somewhere else or maybe delegate the task to the G Class LoadClass method. + */ + if (! class_exists( 'GroupUser' )) { + \G::LoadClass( 'GroupUser' ); + } + // if the user has been authenticated, then check if has the rights or + // permissions to create the webentry + if ($result->status_code == 0) { + $oCriteria = new \Criteria( 'workflow' ); + $oCriteria->addSelectColumn( \UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( \TaskUserPeer::USR_UID ); + $oCriteria->addSelectColumn( \TaskUserPeer::TAS_UID ); + $oCriteria->addSelectColumn( \UsersPeer::USR_USERNAME ); + $oCriteria->addSelectColumn( \UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( \UsersPeer::USR_LASTNAME ); + $oCriteria->addJoin( \TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN ); + $oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS ); + $oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER ); + //$oCriteria->add(TaskUserPeer::TU_RELATION,1); + $userIsAssigned = \TaskUserPeer::doCount( $oCriteria ); + // if the user is not assigned directly, maybe a have the task a group with the user + if ($userIsAssigned < 1) { + $oCriteria = new \Criteria( 'workflow' ); + $oCriteria->addSelectColumn( \UsersPeer::USR_UID ); + $oCriteria->addJoin( \UsersPeer::USR_UID, \GroupUserPeer::USR_UID, \Criteria::LEFT_JOIN ); + $oCriteria->addJoin( \GroupUserPeer::GRP_UID, \TaskUserPeer::USR_UID, \Criteria::LEFT_JOIN ); + $oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS ); + $oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER ); + $userIsAssigned = \GroupUserPeer::doCount( $oCriteria ); + if (! ($userIsAssigned >= 1)) { + $messageCode = "The User `" . $sWS_USER . "` doesn't have the activity `" . $sTASKS . "` assigned"; + } + } + $oDataset = \TaskUserPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $messageCode = array('usr_uid' => $aRow['USR_UID'], + 'usr_username' => $aRow['USR_USERNAME'], + 'usr_firstname' => $aRow['USR_FIRSTNAME'], + 'usr_lastname' => $aRow['USR_LASTNAME']); + $oDataset->next(); + } + } else { + $messageCode = $result->message; + } + return $messageCode; + } catch (Exception $e) { + throw $e; + } + } + } diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php index d765d7a77..2c1860d8d 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php @@ -69,7 +69,42 @@ class ProjectUsers extends Api return $response; } - - + /** + * @param string $prjUid {@min 32} {@max 32} + * @param wsUserCanStartTaskStructure $request_data + * + * @url POST /:prjUid/ws/user/can-start-task + */ + public function doGetProjectWsUserCanStartTask($prjUid, wsUserCanStartTaskStructure $request_data = null) + { + try { + $request_data = (array)($request_data); + $user = new \BusinessModel\ProjectUser(); + $objectData = $user->postProjectWsUserCanStartTask($prjUid, $request_data); + //Response + $response = $objectData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } } + +class wsUserCanStartTaskStructure +{ /** + * @var string {@from body} {@min 32} {@max 32} + */ + public $act_uid; + + /** + * @var string {@from body} + */ + public $username; + + /** + * @var string {@from body} + */ + public $password; +}