function userFilterCondition($filters) { debug("userFilterCondition", $filters, "print_r"); global $questions; $and = ""; $query = ""; foreach ($filters as $questionId => &$answer) { $range = contains($answer, ":"); $multiple = contains($answer, ","); $qtype = getQuestionType($questionId); if ($range) { $qtype = "number"; } $col = getAnswerColumn($qtype); debug("Q {$questionId} {$qtype} {$col}", $answer); $subQuery = "select username from user_profile_answer where question_id = {$questionId}"; $subQuery .= " and {$col} "; if ($range) { $answer = explode(":", $answer); debug("range", $answer); $min = $answer[0]; $max = $answer[1]; if ($min && $max) { sortMinMax($min, $max); } if ($min !== "" && $max !== "") { $subQuery .= $min == $max ? "= {$min}" : "BETWEEN {$min} and {$max}"; } else { if ($min !== "") { $subQuery .= ">= {$min}"; } else { if ($max !== "") { $subQuery .= "<= {$max}"; } } } } else { if ($multiple) { debug("multiple", $answer); $subQuery .= "IN ({$answer})"; } else { if ($qtype == "text") { $subQuery .= "= '{$answer}'"; } else { $subQuery .= "= {$answer}"; } } } debug("subQuery", $subQuery); $query .= "{$and} username in ({$subQuery})"; $and = " AND"; } debug("userFilterCondition", $query); return $query; }
$users = filterUsers($db, $params); arrayDistinct($results, "username"); setExists($results); $results = array("all" => $results); } else { //if groupBy is a profile question, translate group=gender => group=Q_0 $questionsByField = arrayIndexBy($questions, "field_name"); if (array_key_exists($groupBy, $questionsByField)) { $qid = $questionsByField[$groupBy]["id"]; $groupBy = "Q_{$qid}"; } $groups = getDistinctGroups($db, $params, $groupBy, $interval); $questionId = getQuestionId($groupBy); $form_answers = null; if ($questionId !== "") { $qtype = getQuestionType($questionId); if (isset($questions[$questionId]["form_answers"])) { $form_answers = arrayIndexBy($questions[$questionId]["form_answers"], "id"); } } debugVar("groups"); $results = array(); foreach ($groups as $groupValue) { if ($groupValue === "NULL") { continue; } $params[$groupBy] = $groupValue; $data = demographicPortrait($db, $params, $portraitType); if (!count($data)) { continue; }