Esempio n. 1
0
            }
        } else {
            add_error("A valid evaluation must be selected from the drop-down list to request an evaluation be completed for you.");
        }
    } else {
        add_error("An evaluation must be selected from the drop-down list to request an evaluation be completed for you.");
    }
    if (has_error()) {
        echo display_error();
    }
    if (isset($notifications_sent) && $notifications_sent) {
        add_success("Successfully requested that " . ($notifications_sent > 1 ? $notifications_sent . " evaluators" : get_account_data("wholename", $associated_evaluator)) . " fill out this evaluation [" . $evaluation_title . "] for you.");
        echo display_success();
    }
}
$evaluation_requests = Models_Evaluation::getTargetRequests($ENTRADA_USER->GetID(), false, false, true);
if ($evaluation_requests) {
    $notice_msg = "The following Evaluation Request Codes are still active but unused: <br />";
    foreach ($evaluation_requests as $evaluation_request) {
        $requestee = get_account_data("wholename", $evaluation_request["target_proxy_id"]);
        $notice_msg .= "<br />" . $evaluation_request["evaluation_title"] . " [" . $requestee . "]: <strong>" . $evaluation_request["request_code"] . "</strong>";
    }
    add_notice($notice_msg);
    echo display_notice();
}
if ($evaluations && $view != "review") {
    ?>
	<h1>My Evaluations and Assessments</h1>
	<?php 
    if ($review_evaluations) {
        $sidebar_html = "<ul class=\"menu\">\n";
Esempio n. 2
0
 public static function getTargetsArray($evaluation_id, $evaluator_id = 0, $evaluator_proxy_id = 0, $simple = true, $available_only = false, $recent = false, $request_id = false, $mandatory_only = false)
 {
     global $db, $ENTRADA_USER;
     if (!$evaluator_proxy_id && isset($ENTRADA_USER) && $ENTRADA_USER->getProxyId()) {
         $evaluator_proxy_id = $ENTRADA_USER->getProxyId();
     } elseif ($evaluator_id) {
         $query = "SELECT * FROM `evaluation_evaluators` WHERE `eevaluator_id` = " . $db->qstr($evaluator_id);
         $evaluator = $db->GetRow($query);
         if ($evaluator["evaluator_type"] == "proxy_id") {
             $evaluator_proxy_id = $evaluator["evaluator_value"];
         } elseif ($evaluator["evaluator_type"] == "cgroup_id") {
             $cgroup_id = $evaluator["evaluator_value"];
         }
     }
     $evaluation_targets = array();
     $query = "SELECT * FROM `evaluations` AS a\n\t\t\t\t\tJOIN `evaluation_forms` AS b\n\t\t\t\t\tON a.`eform_id` = b.`eform_id`\n\t\t\t\t\tJOIN `evaluations_lu_targets` AS c\n\t\t\t\t\tON b.`target_id` = c.`target_id`\n\t\t\t\t\tWHERE `evaluation_id` = " . $db->qstr($evaluation_id);
     $evaluation = $db->GetRow($query);
     if ($evaluation) {
         if (isset($evaluation["allow_repeat_targets"]) && $evaluation["allow_repeat_targets"] == 1) {
             $available_only = false;
         }
         if (!$evaluation["max_submittable"] && $evaluation["target_shortname"] != "peer" && $evaluation["allow_repeat_targets"]) {
             $evaluation["max_submittable"] = 2147483647;
         }
         if ($evaluator_id) {
             $query = "SELECT * FROM `evaluation_evaluators`\n\t\t\t\t\t\t\tWHERE `eevaluator_id` = " . $db->qstr($evaluator_id) . "\n\t\t\t\t\t\t\tAND `evaluation_id` = " . $db->qstr($evaluation_id);
             $evaluator_record = $db->getRow($query);
         }
         switch ($evaluation["target_shortname"]) {
             case "self":
                 if ($simple) {
                     $evaluation_targets[] = $evaluator_proxy_id;
                 } else {
                     $query = "SELECT *, b.`id` AS `proxy_id` FROM `evaluation_targets` AS a\n\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n\t\t\t\t\t\t\t\t\tON b.`id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\tWHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\tAND a.`target_type` = 'self'\n\t\t\t\t\t\t\t\t\tAND a.`target_active` = 1";
                     $evaluation_target_record = $db->GetRow($query);
                     if ($evaluation_target_record) {
                         $evaluation_targets[] = $evaluation_target_record;
                     }
                 }
                 break;
             case "peer":
                 if ($evaluator) {
                     switch ($evaluator["evaluator_type"]) {
                         case "cgroup_id":
                             if ($evaluator_proxy_id && $available_only) {
                                 $unavailable_proxy_ids_string = "";
                                 $query = "SELECT `target_record_id` FROM `evaluation_progress`\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `progress_value` = 'complete'";
                                 $unavailable_proxy_ids = $db->GetAll($query);
                                 if ($unavailable_proxy_ids) {
                                     foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                         $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["target_record_id"]);
                                     }
                                 }
                             }
                             $query = "SELECT " . ($simple ? "a.`proxy_id`" : "b.*, c.*, a.`proxy_id`") . " FROM `course_group_audience` AS a\n\t\t\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n\t\t\t\t\t\t\t\t\t\t\tON a.`proxy_id` = b.`id`\n\t\t\t\t\t\t\t\t\t\t\tJOIN `evaluation_targets` AS c\n\t\t\t\t\t\t\t\t\t\t\tON c.`target_value` = a.`cgroup_id`\n\t\t\t\t\t\t\t\t\t\t\tAND c.`target_type` = 'cgroup_id'\n\t\t\t\t\t\t\t\t\t\t\tAND c.`evaluation_id` = " . $db->qstr($evaluation_id) . "\n\t\t\t\t\t\t\t\t\t\t\tWHERE a.`cgroup_id` = " . $db->qstr($evaluator["evaluator_value"]) . "\n\t\t\t\t\t\t\t\t\t\t\t" . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`proxy_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t\tAND a.`active` = 1\n\t\t\t\t\t\t\t\t\t\t\tGROUP BY b.`id`";
                             $evaluation_target_users = $db->GetAll($query);
                             if ($evaluation_target_users) {
                                 foreach ($evaluation_target_users as $evaluation_target_user) {
                                     if ($evaluation_target_user["proxy_id"] != $evaluator_proxy_id) {
                                         if ($simple) {
                                             $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                                         } else {
                                             $evaluation_targets[] = $evaluation_target_user;
                                         }
                                     }
                                 }
                             }
                             break;
                         case "cohort":
                             if ($evaluator_proxy_id && $available_only) {
                                 $unavailable_proxy_ids_string = "";
                                 $query = "SELECT `target_record_id` FROM `evaluation_progress`\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `progress_value` = 'complete'";
                                 $unavailable_proxy_ids = $db->GetAll($query);
                                 if ($unavailable_proxy_ids) {
                                     foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                         $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["target_record_id"]);
                                     }
                                 }
                             }
                             $query = "SELECT " . ($simple ? "a.`proxy_id`" : "*") . " FROM `group_members` AS a\n\t\t\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n\t\t\t\t\t\t\t\t\t\t\tON a.`proxy_id` = b.`id`\n\t\t\t\t\t\t\t\t\t\t\tJOIN `evaluation_targets` AS c\n\t\t\t\t\t\t\t\t\t\t\tON c.`target_value` = a.`group_id`\n\t\t\t\t\t\t\t\t\t\t\tAND c.`target_type` = 'cohort'\n\t\t\t\t\t\t\t\t\t\t\tAND c.`evaluation_id` = " . $db->qstr($evaluation_id) . "\n\t\t\t\t\t\t\t\t\t\t\tWHERE a.`group_id` = " . $db->qstr($evaluator["evaluator_value"]) . "\n\t\t\t\t\t\t\t\t\t\t\t" . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`proxy_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t\tAND a.`member_active` = 1\n\t\t\t\t\t\t\t\t\t\t\tGROUP BY b.`id`";
                             $evaluation_target_users = $db->GetAll($query);
                             if ($evaluation_target_users) {
                                 foreach ($evaluation_target_users as $evaluation_target_user) {
                                     if ($evaluation_target_user["proxy_id"] != $evaluator_proxy_id) {
                                         if ($simple) {
                                             $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                                         } else {
                                             $evaluation_targets[] = $evaluation_target_user;
                                         }
                                     }
                                 }
                             }
                             break;
                         case "proxy_id":
                             if ($evaluator_proxy_id && $available_only) {
                                 $unavailable_proxy_ids_string = "";
                                 $query = "SELECT `etarget_id` FROM `evaluation_progress`\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND `progress_value` = 'complete'";
                                 $unavailable_proxy_ids = $db->GetAll($query);
                                 if ($unavailable_proxy_ids) {
                                     foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                         $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["etarget_id"]);
                                     }
                                 }
                             }
                             $query = "SELECT *, b.`id` AS `proxy_id` FROM `evaluation_targets` AS a\n\t\t\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n\t\t\t\t\t\t\t\t\t\t\tON a.`target_value` = b.`id`\n\t\t\t\t\t\t\t\t\t\t\tWHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\tAND a.`target_type` = 'proxy_id'\n\t\t\t\t\t\t\t\t\t\t\t" . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`etarget_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t\tAND a.`target_active` = 1";
                             $evaluation_target_records = $db->GetAll($query);
                             if ($evaluation_target_records) {
                                 foreach ($evaluation_target_records as $evaluation_target_record) {
                                     if ($evaluation_target_record["target_value"] != $evaluator_proxy_id) {
                                         if ($simple) {
                                             $evaluation_targets[] = $evaluation_target_record["target_value"];
                                         } else {
                                             $query = "SELECT *, a.`id` AS `proxy_id` FROM `" . AUTH_DATABASE . "`.`user_data` AS a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tJOIN `evaluation_targets` AS b\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tON b.`target_value` = a.`id`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND b.`target_type` = 'proxy_id'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND b.`evaluation_id` = " . $db->qstr($evaluation_id) . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE a.`id` = " . $db->qstr($evaluation_target_record["target_value"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tGROUP BY a.`id`";
                                             $evaluation_target_user = $db->GetRow($query);
                                             $evaluation_targets[] = $evaluation_target_user;
                                         }
                                     }
                                 }
                             }
                             break;
                     }
                     if (!$simple) {
                         $sort_lastname = array();
                         $sort_firstname = array();
                         foreach ($evaluation_targets as $temp_target) {
                             $sort_lastname[] = $temp_target["lastname"];
                             $sort_firstname[] = $temp_target["firstname"];
                         }
                         array_multisort($sort_lastname, SORT_ASC, $sort_firstname, SORT_ASC, $evaluation_targets);
                     }
                 }
                 break;
             case "preceptor":
             case "rotation_elective":
             case "rotation_core":
                 $query = "SELECT " . ($simple ? "b.`rotation_id`" : "*") . " FROM `evaluation_targets` AS a\n\t\t\t\t\t\t\t\tJOIN `" . CLERKSHIP_DATABASE . "`.`global_lu_rotations` AS b\n\t\t\t\t\t\t\t\tON a.`target_value` = b.`rotation_id`\n\t\t\t\t\t\t\t\tAND a.`target_type` = 'rotation_id'\n\t\t\t\t\t\t\t\tWHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]);
                 $rotations = $db->GetAll($query);
                 foreach ($rotations as $rotation) {
                     $evaluated_event_ids_string = "";
                     $fulfilled_event_ids_string = "";
                     if ($evaluator_proxy_id) {
                         if ($available_only) {
                             $query = "SELECT a.`event_id` FROM `evaluation_progress_clerkship_events` AS a\n\t\t\t\t\t\t\t\t\t\t\tJOIN `evaluation_progress` AS b\n\t\t\t\t\t\t\t\t\t\t\tON a.`eprogress_id` = b.`eprogress_id`\n\t\t\t\t\t\t\t\t\t\t\tWHERE b.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\tAND b.`proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t\tGROUP BY a.`event_id`\n\t\t\t\t\t\t\t\t\t\t\tHAVING COUNT(a.`event_id`) >= " . $evaluation["max_submittable"];
                             $evaluation_event_ids = $db->GetAll($query);
                             if ($evaluation_event_ids) {
                                 foreach ($evaluation_event_ids as $event) {
                                     $evaluated_event_ids_string .= ($evaluated_event_ids_string ? ", " : "") . $db->qstr($event["event_id"]);
                                 }
                             }
                         }
                         if ($mandatory_only) {
                             $query = "SELECT a.`event_id` FROM `evaluation_progress_clerkship_events` AS a\n\t\t\t\t\t\t\t\t\t\t\tJOIN `evaluation_progress` AS b\n\t\t\t\t\t\t\t\t\t\t\tON a.`eprogress_id` = b.`eprogress_id`\n\t\t\t\t\t\t\t\t\t\t\tWHERE b.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\tAND b.`proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t\tGROUP BY a.`event_id`\n\t\t\t\t\t\t\t\t\t\t\tHAVING COUNT(a.`event_id`) >= " . $evaluation["min_submittable"];
                             $event_ids = $db->GetAll($query);
                             if ($event_ids) {
                                 foreach ($event_ids as $event) {
                                     $fulfilled_event_ids_string .= ($fulfilled_event_ids_string ? ", " : "") . $db->qstr($event["event_id"]);
                                 }
                             }
                         }
                         $query = "SELECT * FROM `" . CLERKSHIP_DATABASE . "`.`events` AS a\n\t\t\t\t\t\t\t\t\t\tJOIN `" . CLERKSHIP_DATABASE . "`.`event_contacts` AS b\n\t\t\t\t\t\t\t\t\t\tON a.`event_id` = b.`event_id`\n\t\t\t\t\t\t\t\t\t\tWHERE a.`rotation_id` = " . $db->qstr($rotation["rotation_id"]) . "\n                                        AND a.`event_finish` >= " . $db->qstr($evaluation["evaluation_start"]) . "\n\t\t\t\t\t\t\t\t\t\tAND b.`etype_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t" . ($evaluated_event_ids_string && $available_only ? "AND a.`event_id` NOT IN (" . $evaluated_event_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t" . ($fulfilled_event_ids_string && $mandatory_only ? "AND a.`event_id` NOT IN (" . $fulfilled_event_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t" . ($recent ? "AND a.`event_finish` > " . $db->qstr(strtotime("-36 hours")) . "" : "") . "\n\t\t\t\t\t\t\t\t\t\t" . (defined("CLERKSHIP_EVALUATION_LOCKOUT") && CLERKSHIP_EVALUATION_LOCKOUT ? "AND a.`event_finish` > " . $db->qstr(time() - CLERKSHIP_EVALUATION_LOCKOUT) . "" : "") . "\n\t\t\t\t\t\t\t\t\t\t" . ($mandatory_only && defined("CLERKSHIP_EVALUATION_TIMEOUT") && CLERKSHIP_EVALUATION_TIMEOUT ? "AND a.`event_finish` <= " . $db->qstr(time() - CLERKSHIP_EVALUATION_TIMEOUT) : "") . "\n\t\t\t\t\t\t\t\t\t\tAND a.`event_finish` <= " . $db->qstr(strtotime("+5 days"));
                         $events = $db->GetAll($query);
                         if ($events) {
                             foreach ($events as $event) {
                                 if ($simple) {
                                     $evaluation_targets[] = $event["event_id"];
                                 } else {
                                     $event = array_merge($event, $rotation);
                                     $evaluation_targets[] = $event;
                                 }
                             }
                         }
                     }
                 }
                 break;
             case "student":
                 $query = "SELECT * FROM `evaluation_targets`\n\t\t\t\t\t\t\t\tWHERE `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\tAND `target_active` = 1";
                 $evaluation_target_records = $db->GetAll($query);
                 if ($evaluation_target_records) {
                     $query = "SELECT `cgroup_id` FROM `course_group_contacts` WHERE `proxy_id` = " . $db->qstr($ENTRADA_USER->getID());
                     $course_groups = $db->GetAll($query);
                     if ($course_groups) {
                         $course_group_ids = array();
                         foreach ($course_groups as $course_group) {
                             $course_group_ids[] = $course_group["cgroup_id"];
                         }
                     }
                     foreach ($evaluation_target_records as $evaluation_target_record) {
                         switch ($evaluation_target_record["target_type"]) {
                             case "cgroup_id":
                                 if (!isset($course_group_ids) || !count($course_group_ids) || array_search($evaluation_target_record["target_value"], $course_group_ids) !== false) {
                                     if ($evaluator_proxy_id && $available_only) {
                                         $unavailable_proxy_ids_string = "";
                                         $query = "SELECT `target_record_id` FROM `evaluation_progress`\n                                                        WHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n                                                        AND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                                        AND `progress_value` = 'complete'";
                                         $unavailable_proxy_ids = $db->GetAll($query);
                                         if ($unavailable_proxy_ids) {
                                             foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                                 $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["target_record_id"]);
                                             }
                                         }
                                     }
                                     $query = "SELECT " . ($simple ? "a.`proxy_id`" : "*") . " FROM `course_group_audience` AS a\n                                                                JOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n                                                                ON a.`proxy_id` = b.`id`\n                                                                WHERE a.`cgroup_id` = " . $db->qstr($evaluation_target_record["target_value"]) . "\n                                                                " . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`proxy_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n                                                                AND a.`active` = 1\n                                                                GROUP BY b.`id`";
                                     $evaluation_target_users = $db->GetAll($query);
                                     if ($evaluation_target_users) {
                                         foreach ($evaluation_target_users as $evaluation_target_user) {
                                             if ($simple) {
                                                 $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                                             } else {
                                                 $evaluation_target_user = array_merge($evaluation_target_user, $evaluation_target_record);
                                                 $evaluation_targets[] = $evaluation_target_user;
                                             }
                                         }
                                     }
                                 }
                                 break;
                             case "cohort":
                                 if ($evaluator_proxy_id && $available_only) {
                                     $unavailable_proxy_ids_string = "";
                                     $query = "SELECT `target_record_id` FROM `evaluation_progress`\n                                                    WHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n                                                    AND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                                    AND `progress_value` = 'complete'";
                                     $unavailable_proxy_ids = $db->GetAll($query);
                                     if ($unavailable_proxy_ids) {
                                         foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                             $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["target_record_id"]);
                                         }
                                     }
                                 }
                                 $query = "SELECT " . ($simple ? "a.`proxy_id`" : "*") . " FROM `group_members` AS a\n\t\t\t\t\t\t\t\t\t\t\t\tJOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n\t\t\t\t\t\t\t\t\t\t\t\tON a.`proxy_id` = b.`id`\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE a.`group_id` = " . $db->qstr($evaluation_target_record["target_value"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\t" . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`proxy_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t\t\tAND a.`member_active` = 1\n\t\t\t\t\t\t\t\t\t\t\t\tGROUP BY b.`id`";
                                 $evaluation_target_users = $db->GetAll($query);
                                 if ($evaluation_target_users) {
                                     foreach ($evaluation_target_users as $evaluation_target_user) {
                                         if ($simple) {
                                             $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                                         } else {
                                             $evaluation_target_user = array_merge($evaluation_target_user, $evaluation_target_record);
                                             $evaluation_targets[] = $evaluation_target_user;
                                         }
                                     }
                                 }
                                 break;
                             case "proxy_id":
                                 if ($simple) {
                                     $evaluation_targets[] = $evaluation_target_record["target_value"];
                                 } else {
                                     if ($evaluator_proxy_id && $available_only) {
                                         $unavailable_proxy_ids_string = "";
                                         $query = "SELECT `target_record_id` FROM `evaluation_progress`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tAND `progress_value` = 'complete'";
                                         $unavailable_proxy_ids = $db->GetAll($query);
                                         if ($unavailable_proxy_ids) {
                                             foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                                 $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["target_record_id"]);
                                             }
                                         }
                                     }
                                     $query = "SELECT *, `id` AS `proxy_id` FROM `" . AUTH_DATABASE . "`.`user_data`\n\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE `id` = " . $db->qstr($evaluation_target_record["target_value"]) . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t" . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND `id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\t\t\t\t\t\tGROUP BY `id`";
                                     $evaluation_target_user = $db->GetRow($query);
                                     if ($evaluation_target_user) {
                                         $evaluation_target_user = array_merge($evaluation_target_user, $evaluation_target_record);
                                         $evaluation_targets[] = $evaluation_target_user;
                                     }
                                 }
                                 break;
                         }
                     }
                 }
                 if (!$simple) {
                     $sort_lastname = array();
                     $sort_firstname = array();
                     foreach ($evaluation_targets as $temp_target) {
                         $sort_lastname[] = $temp_target["lastname"];
                         $sort_firstname[] = $temp_target["firstname"];
                     }
                     array_multisort($sort_lastname, SORT_ASC, $sort_firstname, SORT_ASC, $evaluation_targets);
                 }
                 break;
             case "teacher":
                 if (isset($cgroup_id) && $cgroup_id) {
                     if ($evaluator_proxy_id && $available_only) {
                         $unavailable_proxy_ids_string = "";
                         $query = "SELECT `etarget_id` FROM `evaluation_progress`\n                                        WHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n                                        AND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                        AND `progress_value` = 'complete'";
                         $unavailable_proxy_ids = $db->GetAll($query);
                         if ($unavailable_proxy_ids) {
                             foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                 $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["etarget_id"]);
                             }
                         }
                     }
                     $query = "SELECT " . ($simple ? "a.`target_value` as `proxy_id`" : "*, a.`target_value` as `proxy_id`") . " FROM `evaluation_targets` AS a\n                                    JOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n                                    ON a.`target_value` = b.`id`\n                                    AND a.`target_type` = 'proxy_id'\n                                    JOIN `course_group_contacts` AS c\n                                    ON c.`proxy_id` = b.`id`\n                                    WHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                    " . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`etarget_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n                                    AND c.`cgroup_id` = " . $db->qstr($cgroup_id) . "\n                                    AND a.`target_active` = 1";
                     $evaluation_target_users = $db->GetAll($query);
                     if ($evaluation_target_users) {
                         $target_found = true;
                         foreach ($evaluation_target_users as $evaluation_target_user) {
                             if ($simple) {
                                 $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                             } else {
                                 $evaluation_targets[] = $evaluation_target_user;
                             }
                         }
                         if (!$simple) {
                             $sort_lastname = array();
                             $sort_firstname = array();
                             foreach ($evaluation_targets as $temp_target) {
                                 $sort_lastname[] = $temp_target["lastname"];
                                 $sort_firstname[] = $temp_target["firstname"];
                             }
                             array_multisort($sort_lastname, SORT_ASC, $sort_firstname, SORT_ASC, $evaluation_targets);
                         }
                     } else {
                         $target_found = false;
                     }
                 }
                 if (!isset($target_found) || !$target_found) {
                     if ($evaluator_proxy_id && $available_only) {
                         $unavailable_proxy_ids_string = "";
                         $query = "SELECT `etarget_id` FROM `evaluation_progress`\n                                        WHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n                                        AND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                        AND `progress_value` = 'complete'";
                         $unavailable_proxy_ids = $db->GetAll($query);
                         if ($unavailable_proxy_ids) {
                             foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                 $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["etarget_id"]);
                             }
                         }
                     }
                     $query = "SELECT " . ($simple ? "a.`target_value` as `proxy_id`" : "*, a.`target_value` as `proxy_id`") . " FROM `evaluation_targets` AS a\n                                    JOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n                                    ON a.`target_value` = b.`id`\n                                    AND a.`target_type` = 'proxy_id'\n                                    WHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                    " . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`etarget_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n                                    AND a.`target_active` = 1";
                     $evaluation_target_users = $db->GetAll($query);
                     if ($evaluation_target_users) {
                         foreach ($evaluation_target_users as $evaluation_target_user) {
                             if ($simple) {
                                 $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                             } else {
                                 $evaluation_targets[] = $evaluation_target_user;
                             }
                         }
                     }
                     if (!$simple) {
                         $sort_lastname = array();
                         $sort_firstname = array();
                         foreach ($evaluation_targets as $temp_target) {
                             $sort_lastname[] = $temp_target["lastname"];
                             $sort_firstname[] = $temp_target["firstname"];
                         }
                         array_multisort($sort_lastname, SORT_ASC, $sort_firstname, SORT_ASC, $evaluation_targets);
                     }
                 }
                 break;
             case "resident":
                 if (isset($cgroup_id) && $cgroup_id) {
                     if ($evaluator_proxy_id && $available_only) {
                         $unavailable_proxy_ids_string = "";
                         $query = "SELECT `etarget_id` FROM `evaluation_progress`\n                                        WHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n                                        AND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                        AND `progress_value` = 'complete'";
                         $unavailable_proxy_ids = $db->GetAll($query);
                         if ($unavailable_proxy_ids) {
                             foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                 $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["etarget_id"]);
                             }
                         }
                     }
                     $query = "SELECT " . ($simple ? "a.`target_value` as `proxy_id`" : "*, a.`target_value` as `proxy_id`") . " FROM `evaluation_targets` AS a\n                                    JOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n                                    ON a.`target_value` = b.`id`\n                                    AND a.`target_type` = 'proxy_id'\n                                    JOIN `course_group_contacts` AS c\n                                    ON c.`proxy_id` = b.`id`\n                                    WHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                    " . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`etarget_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n                                    AND c.`cgroup_id` = " . $db->qstr($cgroup_id) . "\n                                    AND a.`target_active` = 1";
                     $evaluation_target_users = $db->GetAll($query);
                     if ($evaluation_target_users) {
                         $target_found = true;
                         foreach ($evaluation_target_users as $evaluation_target_user) {
                             if ($simple) {
                                 $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                             } else {
                                 $evaluation_targets[] = $evaluation_target_user;
                             }
                         }
                         if (!$simple) {
                             $sort_lastname = array();
                             $sort_firstname = array();
                             foreach ($evaluation_targets as $temp_target) {
                                 $sort_lastname[] = $temp_target["lastname"];
                                 $sort_firstname[] = $temp_target["firstname"];
                             }
                             array_multisort($sort_lastname, SORT_ASC, $sort_firstname, SORT_ASC, $evaluation_targets);
                         }
                     } else {
                         $target_found = false;
                     }
                 }
                 if (!isset($target_found) || !$target_found) {
                     if ($evaluator_proxy_id && $available_only) {
                         $unavailable_proxy_ids_string = "";
                         $query = "SELECT `etarget_id` FROM `evaluation_progress`\n                                        WHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n                                        AND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                        AND `progress_value` = 'complete'";
                         $unavailable_proxy_ids = $db->GetAll($query);
                         if ($unavailable_proxy_ids) {
                             foreach ($unavailable_proxy_ids as $unavailable_proxy_id) {
                                 $unavailable_proxy_ids_string .= ($unavailable_proxy_ids_string ? ", " : "") . $db->qstr($unavailable_proxy_id["etarget_id"]);
                             }
                         }
                     }
                     $query = "SELECT " . ($simple ? "a.`target_value` as `proxy_id`" : "*, a.`target_value` as `proxy_id`") . " FROM `evaluation_targets` AS a\n                                    JOIN `" . AUTH_DATABASE . "`.`user_data` AS b\n                                    ON a.`target_value` = b.`id`\n                                    AND a.`target_type` = 'proxy_id'\n                                    WHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n                                    " . ($evaluator_proxy_id && $available_only && $unavailable_proxy_ids_string ? "AND a.`etarget_id` NOT IN (" . $unavailable_proxy_ids_string . ")" : "") . "\n                                    AND a.`target_active` = 1";
                     $evaluation_target_users = $db->GetAll($query);
                     if ($evaluation_target_users) {
                         foreach ($evaluation_target_users as $evaluation_target_user) {
                             if ($simple) {
                                 $evaluation_targets[] = $evaluation_target_user["proxy_id"];
                             } else {
                                 $evaluation_targets[] = $evaluation_target_user;
                             }
                         }
                     }
                     if (!$simple) {
                         $sort_lastname = array();
                         $sort_firstname = array();
                         foreach ($evaluation_targets as $temp_target) {
                             $sort_lastname[] = $temp_target["lastname"];
                             $sort_firstname[] = $temp_target["firstname"];
                         }
                         array_multisort($sort_lastname, SORT_ASC, $sort_firstname, SORT_ASC, $evaluation_targets);
                     }
                 }
                 break;
             case "course":
             default:
                 if ($evaluator_proxy_id && $available_only) {
                     $unavailable_course_ids_string = "";
                     $query = "SELECT `etarget_id` FROM `evaluation_progress`\n\t\t\t\t\t\t\t\t\tWHERE `proxy_id` = " . $db->qstr($evaluator_proxy_id) . "\n\t\t\t\t\t\t\t\t\tAND `evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t\tAND `progress_value` = 'complete'";
                     $unavailable_course_ids = $db->GetAll($query);
                     if ($unavailable_course_ids) {
                         foreach ($unavailable_course_ids as $unavailable_course_id) {
                             $unavailable_course_ids_string .= ($unavailable_course_ids_string ? ", " : "") . $db->qstr($unavailable_course_id["etarget_id"]);
                         }
                     }
                 }
                 $query = "SELECT " . ($simple ? "b.`course_id`" : "*") . " FROM `evaluation_targets` AS a\n\t\t\t\t\t\t\t\tJOIN `courses` AS b\n\t\t\t\t\t\t\t\tON a.`target_value` = b.`course_id`\n\t\t\t\t\t\t\t\tAND a.`target_type` = 'course_id'\n\t\t\t\t\t\t\t\tWHERE a.`evaluation_id` = " . $db->qstr($evaluation["evaluation_id"]) . "\n\t\t\t\t\t\t\t\t" . ($evaluator_proxy_id && $available_only && $unavailable_course_ids_string ? "AND a.`etarget_id` NOT IN (" . $unavailable_course_ids_string . ")" : "") . "\n\t\t\t\t\t\t\t\tAND a.`target_active` = 1\n\t\t\t\t\t\t\t\tORDER BY b.`course_code` ASC";
                 $evaluation_target_courses = $db->GetAll($query);
                 if ($evaluation_target_courses) {
                     foreach ($evaluation_target_courses as $evaluation_target_course) {
                         if ($simple) {
                             $evaluation_targets[] = $evaluation_target_course["course_id"];
                         } else {
                             $evaluation_targets[] = $evaluation_target_course;
                         }
                     }
                 }
                 break;
         }
     }
     if ($request_id) {
         $query = "SELECT * FROM `evaluation_requests`\n                        WHERE `erequest_id` = " . $db->qstr($request_id) . "\n                        AND `evaluation_id` = " . $db->qstr($evaluation_id) . "\n                        AND (\n                            `request_expires` = 0\n                            OR `request_expires` > " . $db->qstr(time()) . "\n                        )\n                        AND `target_proxy_id` = " . $db->qstr($ENTRADA_USER->getID());
         $request = $db->GetRow($query);
         if ($request) {
             $temp_evaluation_targets = $evaluation_targets;
             $evaluation_targets = array();
             foreach ($temp_evaluation_targets as $evaluation_target) {
                 if ($simple) {
                     $temp_proxy_id = $evaluation_target;
                 } else {
                     $temp_proxy_id = $evaluation_target["proxy_id"];
                 }
                 $requests = Models_Evaluation::getTargetRequests($temp_proxy_id, $evaluation_id, $request_id, $request["request_code"] ? true : false);
                 if ($requests && count($requests)) {
                     if (!$simple && $requests[0]["erequest_id"] == $request_id) {
                         $evaluation_target["requested"] = true;
                     } elseif (!$simple) {
                         $evaluation_target["requested"] = false;
                     }
                     if ($evaluation["require_requests"]) {
                         $evaluation_targets[] = $evaluation_target;
                     }
                 }
                 if (!$evaluation["require_requests"]) {
                     $evaluation_targets[] = $evaluation_target;
                 }
             }
         } else {
             $temp_evaluation_targets = $evaluation_targets;
             $evaluation_targets = array();
             foreach ($temp_evaluation_targets as $evaluation_target) {
                 if ($simple) {
                     $temp_proxy_id = $evaluation_target;
                 } else {
                     $temp_proxy_id = $evaluation_target["proxy_id"];
                 }
                 $requests = Models_Evaluation::getTargetRequests($temp_proxy_id, $evaluation_id);
                 if ($requests && count($requests)) {
                     if (!$simple && !count($evaluation_targets)) {
                         $evaluation_target["requested"] = true;
                     } elseif (!$simple) {
                         $evaluation_target["requested"] = false;
                     }
                     if ($evaluation["require_requests"]) {
                         $evaluation_targets[] = $evaluation_target;
                     }
                 }
                 if (!$evaluation["require_requests"]) {
                     $evaluation_targets[] = $evaluation_target;
                 }
             }
         }
     }
     return $evaluation_targets;
 }