/** * 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"; } }
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; }