예제 #1
0
 function checkCredentials($params)
 {
     require_once 'classes/model/Event.php';
     require_once 'classes/model/Users.php';
     require_once 'classes/model/TaskUser.php';
     require_once 'classes/model/GroupUser.php';
     $sPRO_UID = $params->PRO_UID;
     $sEVN_UID = $params->EVN_UID;
     //$sDYNAFORM = $params->DYN_UID;
     $sWS_USER = trim($params->WS_USER);
     $sWS_PASS = trim($params->WS_PASS);
     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;
     $parameters = array('userid' => $user, 'password' => $pass);
     $result = $client->__SoapCall('login', array($parameters));
     $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 = true;
     $message = $result->message;
     G::LoadClass('Task');
     //G::LoadClass ( 'Event' );
     G::LoadClass('User');
     G::LoadClass('TaskUser');
     G::LoadClass('Groupwf');
     $event = new Event();
     $event->load($sEVN_UID);
     $sTASKS = $event->getEvnTasUidTo();
     $task = new Task();
     $task->load($sTASKS);
     $sTASKS_SEL = $task->getTasTitle();
     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->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 = false;
                 $message = "The User \"" . $sWS_USER . "\" doesn't have the task \"" . $sTASKS_SEL . "\" assigned.";
             }
         }
     } else {
         $messageCode = false;
     }
     $this->success = $messageCode;
     $this->msg = $message;
 }
    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->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 task \"" . $sTASKS_SEL . "\" assigned";
        }
    }
} else {
    $messageCode = $result->message;
}
echo $messageCode;
예제 #3
0
 /**
   function executed by the cron
   this function will synchronize users from ldap/active directory to PM users tables
   @return void
 */
 public function executeCron($debug)
 {
     $rbac =& RBAC::getSingleton();
     if (is_null($rbac->authSourcesObj)) {
         $rbac->authSourcesObj = new AuthenticationSource();
     }
     $plugin = new ldapAdvanced();
     $plugin->sSystem = $rbac->sSystem;
     $plugin->setFrontEnd(true);
     $plugin->setDebug($debug);
     //Get all authsource for this plugin ( ldapAdvanced plugin, because other authsources are not needed )
     $arrayAuthenticationSource = $plugin->getAuthSources();
     $aDepartments = $plugin->getDepartments("");
     $aGroups = $plugin->getGroups();
     //$arrayDepartmentUserAd = array(); //(D) Update Users
     //$arrayGroupUserAd = array(); //(G) Update Users
     //echo "\n";
     $plugin->frontEndShow("START");
     $plugin->debugLog("START");
     foreach ($arrayAuthenticationSource as $value) {
         $arrayAuthenticationSourceData = $value;
         $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$arrayAuthenticationSourceData ---->\n" . print_r($arrayAuthenticationSourceData, true));
         $plugin->sAuthSource = $arrayAuthenticationSourceData["AUTH_SOURCE_UID"];
         $plugin->ldapcnn = null;
         $plugin->setArrayDepartmentUserSynchronizedChecked(array());
         $plugin->setArrayUserUpdateChecked(array());
         //Get all User (USR_UID, USR_USERNAME, USR_AUTH_USER_DN) registered in RBAC with this Authentication Source
         $plugin->setArrayAuthenticationSourceUsers($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]);
         //INITIALIZE DATA
         $plugin->frontEndShow("TEXT", "Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]);
         $plugin->log(null, "Executing cron for Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]);
         //Get all departments from Ldap/ActiveDirectory and build a hierarchy using dn (ou->ou parent)
         $aLdapDepts = $plugin->searchDepartments();
         //Obtain all departments from PM with a valid department in LDAP/ActiveDirectory
         $aRegisteredDepts = $plugin->getRegisteredDepartments($aLdapDepts, $aDepartments);
         $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredDepts ---->\n" . print_r($aRegisteredDepts, true));
         //Get all group from Ldap/ActiveDirectory
         $aLdapGroups = $plugin->searchGroups();
         //Obtain all groups from PM with a valid group in LDAP/ActiveDirectory
         $aRegisteredGroups = $plugin->getRegisteredGroups($aLdapGroups, $aGroups);
         $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredGroups ---->\n" . print_r($aRegisteredGroups, true));
         //Get all users from Removed OU
         $this->usersRemovedOu = $plugin->getUsersFromRemovedOu($arrayAuthenticationSourceData);
         $plugin->deactiveArrayOfUsers($this->usersRemovedOu);
         //Variables
         $this->deletedRemoved = count($this->usersRemovedOu);
         $this->deletedRemovedUsers = "";
         $this->dAlready = 0;
         $this->dMoved = 0;
         $this->dImpossible = 0;
         $this->dCreated = 0;
         $this->dRemoved = 0;
         $this->dAlreadyUsers = "";
         $this->dMovedUsers = "";
         $this->dImpossibleUsers = "";
         $this->dCreatedUsers = "";
         $this->dRemovedUsers = "";
         $this->gAlready = 0;
         $this->gMoved = 0;
         $this->gImpossible = 0;
         $this->gCreated = 0;
         $this->gRemoved = 0;
         $this->gAlreadyUsers = "";
         $this->gMovedUsers = "";
         $this->gImpossibleUsers = "";
         $this->gCreatedUsers = "";
         $this->gRemovedUsers = "";
         //Department - Synchronize Users
         $numDepartments = count($aRegisteredDepts);
         $count = 0;
         $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numDepartments ----> {$numDepartments}");
         foreach ($aRegisteredDepts as $registeredDept) {
             $count++;
             //(D) Update Users
             //if (!isset($arrayDepartmentUserAd[$registeredDept["DEP_UID"]])) {
             //    $arrayDepartmentUserAd[$registeredDept["DEP_UID"]] = array(); //Current users in department based in Active Directory
             //}
             //
             //$arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept);
             //$arrayAux = array_merge($arrayDepartmentUserAd[$registeredDept["DEP_UID"]], $arrayAux);
             //
             //$arrayDepartmentUserAd[$registeredDept["DEP_UID"]] = array_unique($arrayAux);
             $arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept);
         }
         //Department - Print log
         $logResults = sprintf("- Departments -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d", $this->dAlready, $this->dMoved, $this->dImpossible, $this->dCreated, $this->dRemoved);
         $plugin->frontEndShow("TEXT", $logResults);
         $plugin->log(null, $logResults);
         //Group - Synchronize Users
         $numGroups = count($aRegisteredGroups);
         $count = 0;
         $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numGroups ----> {$numGroups}");
         foreach ($aRegisteredGroups as $registeredGroup) {
             $count++;
             //(G) Update Users
             //if (!isset($arrayGroupUserAd[$registeredGroup["GRP_UID"]])) {
             //    $arrayGroupUserAd[$registeredGroup["GRP_UID"]] = array(); //Current users in group based in Active Directory
             //}
             //
             //$arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup);
             //$arrayAux = array_merge($arrayGroupUserAd[$registeredGroup["GRP_UID"]], $arrayAux);
             //
             //$arrayGroupUserAd[$registeredGroup["GRP_UID"]] = array_unique($arrayAux);
             $arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup);
         }
         //Group - Print log
         $logResults = sprintf("- Groups -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d", $this->gAlready, $this->gMoved, $this->gImpossible, $this->gCreated, $this->gRemoved);
         $plugin->frontEndShow("TEXT", $logResults);
         $plugin->log(null, $logResults);
         //Manager
         $plugin->clearManager($this->managersToClear);
         if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) {
             if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) {
                 foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"] as $departmentUID) {
                     // Delete manager assignments
                     $criteriaSet = new Criteria("workflow");
                     $criteriaSet->add(UsersPeer::USR_REPORTS_TO, "");
                     $criteriaWhere = new Criteria("workflow");
                     $criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID);
                     $criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL);
                     $this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
                     // Delete department assignments
                     $criteriaSet = new Criteria("workflow");
                     $criteriaSet->add(UsersPeer::DEP_UID, "");
                     $criteriaWhere = new Criteria("workflow");
                     $criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID);
                     $this->dMoved += UsersPeer::doCount($criteriaWhere);
                     BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
                 }
             }
             unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"]);
             $rbac =& RBAC::getSingleton();
             $rbac->authSourcesObj->update($arrayAuthenticationSourceData);
         }
         if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) {
             if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) {
                 foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"] as $groupUID) {
                     // Delete manager assignments
                     $groupsInstance = new Groups();
                     $criteria = $groupsInstance->getUsersGroupCriteria($groupUID);
                     $dataset = UsersPeer::doSelectRS($criteria);
                     $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
                     $dataset->next();
                     $users = array();
                     while ($row = $dataset->getRow()) {
                         $users[] = $row["USR_UID"];
                         $dataset->next();
                     }
                     $criteriaSet = new Criteria("workflow");
                     $criteriaSet->add(UsersPeer::USR_REPORTS_TO, "");
                     $criteriaWhere = new Criteria("workflow");
                     $criteriaWhere->add(UsersPeer::USR_UID, $users, Criteria::IN);
                     $criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL);
                     $this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
                     // Delete group assignments
                     $criteria = new Criteria("workflow");
                     $criteria->add(GroupUserPeer::GRP_UID, $groupUID);
                     $this->gMoved += GroupUserPeer::doCount($criteria);
                     BasePeer::doDelete($criteria, Propel::getConnection("workflow"));
                 }
             }
             unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"]);
             $rbac =& RBAC::getSingleton();
             $rbac->authSourcesObj->update($arrayAuthenticationSourceData);
         }
         // Delete the managers that not exists in PM
         $criteria = new Criteria("rbac");
         $criteria->addSelectColumn(RbacUsersPeer::USR_AUTH_USER_DN);
         $criteria->add(RbacUsersPeer::USR_AUTH_USER_DN, "", Criteria::NOT_EQUAL);
         $dataset = RbacUsersPeer::doSelectRS($criteria);
         $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
         $dataset->next();
         $existingUsers = array();
         while ($row = $dataset->getRow()) {
             $existingUsers[] = $row["USR_AUTH_USER_DN"];
             $dataset->next();
         }
         foreach ($this->managersHierarchy as $managerDN => $subordinates) {
             if (!in_array($managerDN, $existingUsers)) {
                 unset($this->managersHierarchy[$managerDN]);
             }
         }
         // Get the managers assigments counters
         $plugin->synchronizeManagers($this->managersHierarchy);
         $deletedManagersAssignments = self::array_diff_assoc_recursive($this->oldManagersHierarchy, $this->managersHierarchy);
         $newManagersAssignments = self::array_diff_assoc_recursive($this->managersHierarchy, $this->oldManagersHierarchy);
         $deletedManagers = array();
         $newManagers = array();
         $movedManagers = array();
         if (is_array($deletedManagersAssignments)) {
             foreach ($deletedManagersAssignments as $dn1 => $subordinates1) {
                 foreach ($subordinates1 as $subordinate) {
                     if (!in_array($subordinate, $deletedManagers)) {
                         $deletedManagers[] = $subordinate;
                     }
                     foreach ($newManagersAssignments as $dn2 => $subordinates2) {
                         if (isset($subordinates2[$subordinate])) {
                             $movedManagers[] = $subordinate;
                         }
                     }
                 }
             }
         }
         if (is_array($newManagersAssignments)) {
             foreach ($newManagersAssignments as $dn1 => $subordinates1) {
                 foreach ($subordinates1 as $subordinate) {
                     if (!in_array($subordinate, $newManagers)) {
                         $newManagers[] = $subordinate;
                     }
                     foreach ($deletedManagersAssignments as $dn2 => $subordinates2) {
                         if (isset($subordinates2[$subordinate])) {
                             if (!in_array($subordinate, $movedManagers)) {
                                 $movedManagers[] = $subordinate;
                             }
                         }
                     }
                 }
             }
         }
         //Print and log the users's information
         //Deleted/Removed Users
         $logResults = sprintf("- Deleted/Removed Users: %d", $this->deletedRemoved);
         $plugin->frontEndShow("TEXT", $logResults);
         $plugin->log(null, $logResults);
         if ($this->deletedRemoved > 0) {
             $plugin->log(null, "Deleted/Removed Users: ");
             $plugin->log(null, $this->deletedRemovedUsers);
         }
         if ($this->dAlready + $this->gAlready > 0) {
             $plugin->log(null, "Existing Users: ");
             $plugin->log(null, $this->dAlreadyUsers . " " . $this->gAlreadyUsers);
         }
         if ($this->dMoved + $this->gMoved > 0) {
             $plugin->log(null, "Moved Users: ");
             $plugin->log(null, $this->dMovedUsers . " " . $this->gMovedUsers);
         }
         if ($this->dImpossible + $this->gImpossible > 0) {
             $plugin->log(null, "Impossible Users: ");
             $plugin->log(null, $this->dImpossibleUsers . " " . $this->gImpossibleUsers);
         }
         if ($this->dCreated + $this->gCreated > 0) {
             $plugin->log(null, "Created Users: ");
             $plugin->log(null, $this->dCreatedUsers . " " . $this->gCreatedUsers);
         }
         if ($this->dRemoved + $this->gRemoved > 0) {
             $plugin->log(null, "Removed Users: ");
             $plugin->log(null, $this->dRemovedUsers . " " . $this->gRemovedUsers);
         }
         //Print and log the managers assignments"s information
         $logResults = sprintf("- Managers assignments: created %d, moved %d, removed %d", count($newManagers) - count($movedManagers), count($movedManagers), count($deletedManagers) - count($movedManagers) + $this->deletedManager);
         $plugin->frontEndShow("TEXT", $logResults);
         $plugin->log(null, $logResults);
         //Update Users data based on the LDAP Server
         $plugin->usersUpdateData($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]);
     }
     $plugin->frontEndShow("END");
     //(D) Update Users
     ////Department //Upgrade users in departments
     //foreach ($arrayDepartmentUserAd as $departmentUid => $arrayUserAd) {
     //    $plugin->setArrayDepartmentUsers($departmentUid); //INITIALIZE DATA
     //
     //    $arrayAux = array_diff(array_keys($plugin->arrayDepartmentUsersByUid), $arrayUserAd);
     //
     //    $this->departmentRemoveUsers($departmentUid, $arrayAux);
     //}
     //(G) Update Users
     ////Group //Upgrade users in groups
     //foreach ($arrayGroupUserAd as $groupUid => $arrayUserAd) {
     //    $plugin->setArrayGroupUsers($groupUid); //INITIALIZE DATA
     //
     //    $arrayAux = array_diff(array_keys($plugin->arrayGroupUsersByUid), $arrayUserAd);
     //
     //    $this->groupRemoveUsers($groupUid, $arrayAux);
     //}
     //// Developed by Gary and Ronald
     //$usersInfo = $plugin->ASUpdateInfo('');
     //if (isset($usersInfo) && $usersInfo > 0) {
     //    $this->dMoved = $usersInfo;
     //}
     //// End Developed by Gary and Ronald
     $plugin->debugLog("END");
 }
예제 #4
0
 /**
  * Checks if the user exists
  *
  * @param string $userName  Name
  * @param string $sTaskUID  Task
  *
  * return message
  */
 public function getUser($userName, $sTaskUID)
 {
     try {
         $sTASKS = $sTaskUID;
         $sWS_USER = trim($userName);
         $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);
         $userIsAssigned = \TaskUserPeer::doCount($oCriteria);
         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)) {
                 throw new \Exception(\G::LoadTranslation("ID_USER_DOES_NOT_HAVE_ACTIVITY_ASSIGNED", array($sWS_USER, $sTASKS)));
             }
         }
         $oDataset = \TaskUserPeer::doSelectRS($oCriteria);
         $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
         $oDataset->next();
         while ($aRow = $oDataset->getRow()) {
             $messageCode = $aRow['USR_UID'];
             $oDataset->next();
         }
         return $messageCode;
     } catch (\Exception $e) {
         throw $e;
     }
 }
예제 #5
0
 /**
  * Return the user that can start a task
  *
  * @param string $sProcessUID {@min 32} {@max 32}
  * @param string $sActivityUID {@min 32} {@max 32}
  * @param array  $oData
  *
  * return array
  *
  * @access public
  */
 public function projectWsUserCanStartTask($sProcessUID, $sActivityUID, $oData)
 {
     try {
         Validator::proUid($sProcessUID, '$prj_uid');
         /**
          * 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
          */
         $sTASKS = $sActivityUID;
         $sWS_USER = trim($oData['username']);
         $sWS_PASS = trim($oData['password']);
         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->addSelectColumn(\TaskPeer::PRO_UID);
             $oCriteria->addJoin(\TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN);
             $oCriteria->addJoin(\TaskUserPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN);
             if ($sTASKS) {
                 $oCriteria->add(\TaskUserPeer::TAS_UID, $sTASKS);
             }
             $oCriteria->add(\UsersPeer::USR_USERNAME, $sWS_USER);
             $oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID);
             $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->addSelectColumn(\UsersPeer::USR_USERNAME);
                 $oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME);
                 $oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME);
                 $oCriteria->addJoin(\UsersPeer::USR_UID, \GroupUserPeer::USR_UID, \Criteria::LEFT_JOIN);
                 $oCriteria->addJoin(\GroupUserPeer::GRP_UID, \TaskUserPeer::USR_UID, \Criteria::LEFT_JOIN);
                 $oCriteria->addJoin(\TaskUserPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN);
                 if ($sTASKS) {
                     $oCriteria->add(\TaskUserPeer::TAS_UID, $sTASKS);
                 }
                 $oCriteria->add(\UsersPeer::USR_USERNAME, $sWS_USER);
                 $oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID);
                 $userIsAssigned = \GroupUserPeer::doCount($oCriteria);
                 if (!($userIsAssigned >= 1)) {
                     if ($sTASKS) {
                         throw new \Exception(\G::LoadTranslation("ID_USER_NOT_ID_ACTIVITY", array($sWS_USER, $sTASKS)));
                     } else {
                         throw new \Exception(\G::LoadTranslation("ID_USER_NOT_ACTIVITY", array($sWS_USER)));
                     }
                 }
             }
             $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 {
             throw new \Exception($result->message);
         }
         return $messageCode;
     } catch (Exception $e) {
         throw $e;
     }
 }