예제 #1
0
 /**
  * Get IN condition clause
  * @param string $currentUserId Current user id
  * @param string $teamTableAlias Team table alias
  * @return string IN clause
  */
 protected function getInCondition($currentUserId, $teamTableAlias)
 {
     $usePrefetch = false;
     if ($this->getOption('teamset_prefetch')) {
         $teamSets = TeamSet::getTeamSetIdsForUser($currentUserId);
         $count = count($teamSets);
         if ($count <= $this->getOption('teamset_prefetch_max', self::TEAMSET_PREFETCH_MAX)) {
             $usePrefetch = true;
         } else {
             $this->log->warn("TeamSetPrefetch max reached for user {$currentUserId} --> {$count}");
         }
     }
     if ($usePrefetch) {
         if ($count) {
             return implode(',', array_map(array($this->bean->db, 'quoted'), $teamSets));
         } else {
             return 'NULL';
         }
     } else {
         return "select tst.team_set_id from team_sets_teams tst\n                    INNER JOIN team_memberships {$teamTableAlias} ON tst.team_id = {$teamTableAlias}.team_id\n                    AND {$teamTableAlias}.user_id = '{$currentUserId}'\n                    AND {$teamTableAlias}.deleted = 0";
     }
 }
예제 #2
0
 public function selectCase($api, $args)
 {
     $this->checkACL($api, $args);
     $returnArray = array();
     $bpmFlow = BeanFactory::retrieveBean('pmse_BpmFlow', $args['idflow']);
     $returnArray['case']['flow'] = $bpmFlow->fetched_row;
     $activity = BeanFactory::getBean('pmse_BpmActivityDefinition')->retrieve_by_string_fields(array('id' => $bpmFlow->bpmn_id));
     $teamSets = TeamSet::getTeamSetIdsForUser($api->user->id);
     if ($api->user->id != $bpmFlow->cas_user_id) {
         if ($activity->act_assignment_method == 'selfservice' && !in_array($bpmFlow->cas_user_id, $teamSets) || $activity->act_assignment_method == 'static' || $activity->act_assignment_method == 'balanced') {
             throw new SugarApiExceptionNotAuthorized('EXCEPTION_NOT_AUTHORIZED', null, null, 403);
         }
     }
     $reclaimCaseByUser = false;
     if (isset($bpmFlow->cas_adhoc_type) && $bpmFlow->cas_adhoc_type === '' && $bpmFlow->cas_start_date == '' && $activity->act_assignment_method == 'selfservice') {
         $reclaimCaseByUser = true;
     }
     if ($reclaimCaseByUser) {
         $listButtons = array('claim', 'cancel');
     } elseif (isset($bpmFlow->cas_adhoc_type) && $bpmFlow->cas_adhoc_type === '' && ($activity->act_response_buttons == '' || $activity->act_response_buttons == 'APPROVE')) {
         $listButtons = array('link_cancel', 'approve', 'reject', 'edit');
     } else {
         $listButtons = array('link_cancel', 'route', 'edit');
     }
     if (!$reclaimCaseByUser && !empty($bpmFlow->cas_adhoc_actions)) {
         $listButtons = unserialize($bpmFlow->cas_adhoc_actions);
     }
     $continue = array_search('continue', $listButtons);
     if ($continue !== false) {
         unset($listButtons[$continue]);
         $returnArray['case']['taskContinue'] = true;
     }
     $returnArray['case']['reclaim'] = $reclaimCaseByUser;
     $returnArray['case']['buttons'] = $this->getButtons($listButtons, $activity);
     $returnArray['case']['readonly'] = json_decode(base64_decode($activity->act_readonly_fields));
     $returnArray['case']['required'] = json_decode(base64_decode($activity->act_required_fields));
     $data_aux = new stdClass();
     $data_aux->cas_task_start_date = $returnArray['case']['flow']['cas_task_start_date'];
     $data_aux->cas_delegate_date = $returnArray['case']['flow']['cas_delegate_date'];
     $returnArray['case']['title']['time'] = $this->caseWrapper->expectedTime($activity->act_expected_time, $data_aux);
     $bpmnProcess = BeanFactory::retrieveBean('pmse_BpmnProcess', $bpmFlow->pro_id);
     $returnArray['case']['title']['process'] = $bpmnProcess->name;
     $bpmnActivity = BeanFactory::retrieveBean('pmse_BpmnActivity', $bpmFlow->bpmn_id);
     $returnArray['case']['title']['activity'] = $bpmnActivity->name;
     $returnArray['case']['inboxId'] = $bpmnActivity->name;
     $returnArray['case']['flowId'] = $args['idflow'];
     $returnArray['case']['inboxId'] = $args['id'];
     return $returnArray;
 }
 /**
  * This function constructs and returns team filter for elasticsearch query.
  *
  * @return \Elastica\Filter\Terms
  */
 public function getTeamTermFilter()
 {
     global $current_user;
     if (empty($current_user)) {
         // This condition should never happen, but just to be consistent with the SQl side of the house, we are adding a filter that is false for this module
         $termFilter = new \Elastica\Filter\Terms('team_set_id', array('Non existing team_set_id to fake search term that is always false'));
     } else {
         $teamIDS = TeamSet::getTeamSetIdsForUser($current_user->id);
         $termFilter = new \Elastica\Filter\Terms('team_set_id', $teamIDS);
     }
     return $termFilter;
 }