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;
}
Exemple #2
0
    $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;
        }