$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname';
$sql = "SELECT user.user_id,lastname,firstname FROM $table_user as user,$table_course_user as course_user WHERE course_user.status='1' AND course_user.user_id=user.user_id AND course_user.course_code='".$course_code."'".$order_clause;
$sql = "SELECT user.user_id,lastname,firstname FROM $table_user as user,$table_course_user as course_user
WHERE course_user.status='1' AND course_user.user_id=user.user_id AND course_user.course_code='".$course_code."'".$order_clause;
//Checking the variable $_SESSION['combination'] that has all the information of the selected course (instead of using a lots of hidden variables ... )
if (isset($_SESSION['combination']) && !empty($_SESSION['combination'])) {
$sql = "SELECT * FROM $TABLETRACK_EXERCICES WHERE exe_cours_id = '$origin_course_code' AND session_id = $origin_session_id AND exe_user_id = $user_id ";
$sql = "SELECT * FROM $TABLETRACK_EXERCICES WHERE c_id = '$course_id' AND session_id = $origin_session_id AND exe_user_id = $user_id ";
//Nothing to do because there are not relationship with a session
//3. track_e_course_access
$sql = "SELECT * FROM $TBL_TRACK_E_COURSE_ACCESS WHERE course_code = '$origin_course_code' AND session_id = $origin_session_id AND user_id = $user_id ";
//3. track_e_course_access
$sql = "SELECT * FROM $TBL_TRACK_E_COURSE_ACCESS
WHERE course_code = '$origin_course_code' AND session_id = $origin_session_id AND user_id = $user_id ";
$sql = "SELECT access_id FROM $TBL_TRACK_E_LAST_ACCESS WHERE access_cours_code = '$origin_course_code' AND access_session_id = $origin_session_id AND access_user_id = $user_id ";
$sql = "SELECT access_id FROM $TBL_TRACK_E_LAST_ACCESS WHERE access_cours_code = '$origin_course_code' AND access_session_id = $origin_session_id AND access_user_id = $user_id ";
//$sql = "SELECT DISTINCT exe_user_id, exe_cours_id as code, session_id as id_session FROM $TABLETRACK_EXERCICES WHERE exe_user_id = $user_id GROUP BY exe_user_id, exe_cours_id ORDER by exe_user_id, exe_cours_id ASC";
$sql = "SELECT DISTINCT exe_user_id, exe_cours_id as code, session_id as id_session FROM $TABLETRACK_EXERCICES WHERE exe_user_id = $user_id ORDER by exe_user_id, exe_cours_id ASC";
$sql = "SELECT DISTINCT exe_user_id, c_id, session_id as id_session
FROM $TABLETRACK_EXERCICES WHERE exe_user_id = $user_id
$sql .= "SELECT * FROM $TBL_TRACK_HOTPOTATOES thp JOIN $TBL_USER u ON thp.exe_user_id = u.user_id WHERE thp.exe_cours_id = '$course_code' AND exe_name LIKE '$in_hotpot_path%'";
$sql = "SELECT * FROM $TBL_TRACK_HOTPOTATOES thp
JOIN $TBL_USER u ON thp.exe_user_id = u.user_id
WHERE thp.c_id = '$courseId' AND
exe_name LIKE '$in_hotpot_path%'";
// just count how many answers
if ($in_get_count) {
@ -1050,13 +1054,13 @@ function get_exam_results_data($from, $number_of_items, $column, $direction, $ex
// sql for chamilo-type tests for teacher / tutor view
$sql_inner_join_tbl_track_exercices = " (
SELECT DISTINCT ttte.*, if(tr.exe_id,1, 0) as revised
FROM $TBL_TRACK_EXERCICES ttte LEFT JOIN $TBL_TRACK_ATTEMPT_RECORDING tr
ON (ttte.exe_id = tr.exe_id)
WHERE exe_cours_id = '$course_code' AND
exe_exo_id = $exercise_id AND
ttte.session_id = ".api_get_session_id()."
)";
SELECT DISTINCT ttte.*, if(tr.exe_id,1, 0) as revised
FROM $TBL_TRACK_EXERCICES ttte LEFT JOIN $TBL_TRACK_ATTEMPT_RECORDING tr
ON (ttte.exe_id = tr.exe_id)
WHERE ttte.c_id = '$course_id' AND
exe_exo_id = $exercise_id AND
ttte.session_id = ".api_get_session_id()."
)";
if ($is_allowedToEdit) {
//Teacher view
if (isset($_GET['gradebook']) && $_GET['gradebook'] == 'view') {
@ -1153,9 +1157,9 @@ function get_exam_results_data($from, $number_of_items, $column, $direction, $ex
INNER JOIN $sql_inner_join_tbl_user AS user ON (user.user_id = exe_user_id)
WHERE $extra_where_conditions AND
te.status != 'incomplete'
AND te.exe_cours_id='".api_get_course_id()."' $session_id_and
AND te.c_id='".$course_id."' $session_id_and
AND ce.active <>-1
AND ce.c_id=".api_get_course_int_id()."
AND ce.c_id=".$course_id."
$exercise_where ";
// sql for hotpotatoes tests for teacher / tutor view
@ -1171,7 +1175,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction, $ex
tth.exe_weighting,
tth.exe_date";
}
// AND $where_condition seems not to be used
$hpsql = " $hpsql_select
FROM
$TBL_TRACK_HOTPOTATOES tth,
@ -1179,12 +1183,12 @@ function get_exam_results_data($from, $number_of_items, $column, $direction, $ex
$sqlFromOption
WHERE
user.user_id=tth.exe_user_id
AND tth.exe_cours_id = '".api_get_course_id()."'
AND tth.c_id = '".$course_id."'
$hotpotatoe_where
$sqlWhereOption
AND $where_condition
ORDER BY
tth.exe_cours_id ASC,
tth.c_id ASC,
tth.exe_date DESC";
}
@ -1234,7 +1238,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction, $ex
if (is_array($results)) {
$users_array_id = array();
if ($_GET['gradebook'] == 'view') {
if (isset($_GET['gradebook']) &&$_GET['gradebook'] == 'view') {
$from_gradebook = true;
}
$sizeof = count($results);
@ -1247,7 +1251,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction, $ex
for ($i = 0; $i < $sizeof; $i++) {
$revised = $results[$i]['revised'];
if ($from_gradebook &&($is_allowedToEdit)) {
if (isset($from_gradebook)&&$from_gradebook && $is_allowedToEdit) {
if (in_array($results[$i]['username'].$results[$i]['firstname'].$results[$i]['lastname'], $users_array_id)) {
@ -1653,11 +1657,11 @@ function get_exercise_result_ranking($my_score, $my_exe_id, $exercise_id, $cours
* @param float user score to be compared attention => score/weight
* @param int exe id of the exercise (this is necesary because if 2 students have the same score the one with the minor exe_id will have a best position, just to be fair and FIFO)
* @param int exercise id
* @param string course code
* @param int course id
* @param int session id
* @return int the position of the user between his friends in a course (or course within a session)
FROM $TBL_EXERCISES AS ce INNER JOIN $TBL_TRACK_EXERCISES AS te ON (te.exe_exo_id = ce.id) INNER JOIN $TBL_USER AS user ON (user.user_id = exe_user_id)
FROM $TBL_EXERCISES AS ce INNER JOIN $TBL_TRACK_EXERCISES AS te ON (te.exe_exo_id = ce.id)
INNER JOIN $TBL_USER AS user ON (user.user_id = exe_user_id)
WHERE ce.c_id = $course_id AND
te.status != 'incomplete' AND
te.exe_cours_id='" . Database :: escape_string($cid) . "' $user_id_and $session_id_and AND
te.c_id ='" . $course_id . "' $user_id_and $session_id_and AND
ce.active <>-1 AND
orig_lp_id = 0 AND
orig_lp_item_id = 0
ORDER BY userpart2, te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC";
ORDER BY userpart2, te.c_id ASC, ce.title ASC, te.exe_date DESC";
WHERE exe_user_id = '".Database::escape_string($my_usr)."' AND exe_cours_id = '".Database::escape_string($my_cid)."' AND exe_exo_id = '".Database::escape_string($my_exe)."'
WHERE exe_user_id = '".Database::escape_string($my_usr)."' AND
WHERE course_code = '$course_code' AND session_id = $session_id AND exe_id = $exe_id AND user_id = $user_id AND question_id = $question_id AND position = $position";
$last_attempt_date = $row_last_attempt['last_attempt_date']; //Get the date of last attempt
@ -881,7 +887,7 @@ function get_attempt_count($user_id, $exerciseId, $lp_id, $lp_item_id, $lp_item_
orig_lp_id = $lp_id AND
orig_lp_item_id = $lp_item_id AND
orig_lp_item_view_id = $lp_item_view_id AND
exe_cours_id = '".api_get_course_id()."' AND
c_id = '".api_get_course_int_id()."' AND
session_id = '".api_get_session_id()."'";
$query = Database::query($sql);
@ -908,7 +914,7 @@ function get_attempt_count_not_finished($user_id, $exerciseId, $lp_id, $lp_item_
status != 'incomplete' AND
orig_lp_id = $lp_id AND
orig_lp_item_id = $lp_item_id AND
exe_cours_id = '".api_get_course_id()."' AND
c_id = '".api_get_course_int_id()."' AND
session_id = '".api_get_session_id()."'";
$query = Database::query($sql);
@ -920,6 +926,12 @@ function get_attempt_count_not_finished($user_id, $exerciseId, $lp_id, $lp_item_
}
}
/**
* @param int $user_id
* @param int $lp_id
* @param array $course
* @param int $session_id
*/
function delete_student_lp_events($user_id, $lp_id, $course, $session_id)
{
@ -954,7 +966,11 @@ function delete_student_lp_events($user_id, $lp_id, $course, $session_id)
$sql = "DELETE FROM $lp_view_table WHERE c_id = $course_id AND user_id = $user_id AND lp_id= $lp_id AND session_id = $session_id ";
Database::query($sql);
$sql = "SELECT exe_id FROM $track_e_exercises WHERE exe_user_id = $user_id AND session_id = $session_id AND exe_cours_id = '{$course['code']}' AND orig_lp_id = $lp_id";
$sql = "SELECT exe_id FROM $track_e_exercises
WHERE exe_user_id = $user_id AND
session_id = $session_id AND
c_id = $course_id AND
orig_lp_id = $lp_id";
$result = Database::query($sql);
$exe_list = array();
while ($row = Database::fetch_array($result, 'ASSOC')) {
@ -981,15 +997,20 @@ function delete_student_lp_events($user_id, $lp_id, $course, $session_id)
* @param string course code
* @param int session id
*/
function delete_all_incomplete_attempts($user_id, $exercise_id, $course_code, $session_id = 0)
function delete_all_incomplete_attempts($user_id, $exercise_id, $course_id, $session_id = 0)
if (!empty($user_id) && !empty($exercise_id) && !empty($course_code)) {
$sql = "DELETE FROM $track_e_exercises WHERE exe_user_id = $user_id AND exe_exo_id = $exercise_id AND exe_cours_id = '$course_code' AND session_id = $session_id AND status = 'incomplete' ";
$sql = "DELETE FROM $track_e_exercises
WHERE exe_user_id = $user_id AND
exe_exo_id = $exercise_id AND
c_id = '$course_id' AND
session_id = $session_id AND
status = 'incomplete' ";
Database::query($sql);
}
}
@ -1002,11 +1023,11 @@ function delete_all_incomplete_attempts($user_id, $exercise_id, $course_code, $s
$sql = "SELECT $select FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER BY exe_id";
$sql = "SELECT $select FROM $table_track_exercises
WHERE status = '' AND
c_id = '$courseId' AND
session_id = $session_id AND
orig_lp_id = 0 AND
orig_lp_item_id = 0
ORDER BY exe_id";
$res = Database::query($sql);
if ($get_count) {
$row = Database::fetch_array($res, 'ASSOC');
@ -1084,16 +1111,22 @@ function get_all_exercise_results_by_course($course_code, $session_id = 0, $get_
* @return array with the results
*
*/
function get_all_exercise_results_by_user($user_id, $course_code, $session_id = 0)
function get_all_exercise_results_by_user($user_id, $courseId, $session_id = 0)
$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_user_id = $user_id AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER by exe_id";
$sql = "SELECT * FROM $table_track_exercises
WHERE status = '' AND
exe_user_id = $user_id AND
c_id = '$courseId' AND
session_id = $session_id AND
orig_lp_id = 0 AND
orig_lp_item_id = 0
ORDER by exe_id";
$res = Database::query($sql);
$list = array();
@ -1145,7 +1178,6 @@ function get_exercise_results_by_attempt($exe_id)
$sql = "SELECT count(*) as count FROM $TABLETRACK_EXERCICES
WHERE status = '' AND exe_user_id = '$user_id' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
WHERE status = '' AND
exe_user_id = '$user_id' AND
c_id = '$courseId' AND
exe_exo_id = '$exercise_id' AND
session_id = $session_id AND
orig_lp_id =0 AND
orig_lp_item_id = 0
ORDER BY exe_id";
$res = Database::query($sql);
$result = 0;
if (Database::num_rows($res) > 0) {
@ -1237,21 +1276,28 @@ function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $
/**
* Gets all exercise BEST results attempts (NO Exercises in LPs ) from a given exercise id, course, session per user
* @param int exercise id
* @param string course code
* @param int course id
* @param int session id
* @return array with the results
* @todo rename this function
*
*/
function get_best_exercise_results_by_user($exercise_id, $course_code, $session_id = 0)
function get_best_exercise_results_by_user($exercise_id, $courseId, $session_id = 0)
$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
$sql = "SELECT * FROM $table_track_exercises
WHERE status = '' AND
c_id = $courseId AND
exe_exo_id = '$exercise_id' AND
session_id = $session_id AND
orig_lp_id = 0 AND
orig_lp_item_id = 0
ORDER BY exe_id";
$res = Database::query($sql);
$list = array();
@ -1269,7 +1315,6 @@ function get_best_exercise_results_by_user($exercise_id, $course_code, $session_
$sql = "SELECT DISTINCT exe_exo_id, exe_user_id FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND session_id = $session_id AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
$sql = "SELECT DISTINCT exe_exo_id, exe_user_id
FROM $table_track_exercises
WHERE status = '' AND
c_id = '$courseId' AND
session_id = $session_id AND
orig_lp_id =0 AND
orig_lp_item_id = 0
ORDER BY exe_id";
$res = Database::query($sql);
$count = 0;
if (Database::num_rows($res) > 0) {
@ -1375,15 +1439,21 @@ function get_count_exercises_attempted_by_course($course_code, $session_id = 0)
* @param int session id
* @return array
*/
function get_all_exercise_event_from_lp($exercise_id, $course_code, $session_id = 0)
function get_all_exercise_event_from_lp($exercise_id, $courseId, $session_id = 0)
$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id AND orig_lp_id !=0 AND orig_lp_item_id != 0";
$sql = "SELECT * FROM $table_track_exercises
WHERE status = '' AND
c_id = $courseId AND
exe_exo_id = '$exercise_id' AND
session_id = $session_id AND
orig_lp_id !=0 AND
orig_lp_item_id != 0";
$res = Database::query($sql);
$list = array();
@ -1419,18 +1489,23 @@ function get_all_exercises_from_lp($lp_id, $course_id)
$sql = "DELETE FROM $table_track_attempt WHERE exe_id = $exe_id AND user_id = $user_id AND course_code = '$course_code' AND session_id = $session_id AND question_id = $question_id ";
$sql = "DELETE FROM $table_track_attempt
WHERE exe_id = $exe_id AND
user_id = $user_id AND
c_id = $courseId AND
session_id = $session_id AND
question_id = $question_id ";
Database::query($sql);
}
function delete_attempt_hotspot($exe_id, $user_id, $course_code, $question_id)
/**
* @param $exe_id
* @param $user_id
* @param int $courseId
* @param $question_id
*/
function delete_attempt_hotspot($exe_id, $user_id, $courseId, $question_id)
$sql = "DELETE FROM $table_track_attempt WHERE hotspot_exe_id = $exe_id AND hotspot_user_id = $user_id AND hotspot_course_code = '$course_code' AND hotspot_question_id = $question_id ";
$sql = "DELETE FROM $table_track_attempt
WHERE hotspot_exe_id = $exe_id AND
hotspot_user_id = $user_id AND
hotspot_course_code = $courseId AND
hotspot_question_id = $question_id ";
Database::query($sql);
}
/**
* User logs in for the first time to a course
* @param $course_code
* @param $user_id
* @param $session_id
*/
function event_course_login($course_code, $user_id, $session_id)
$sql = "SELECT SUM(UNIX_TIMESTAMP(logout_course_date) - UNIX_TIMESTAMP(login_course_date)) as nb_seconds
FROM $tbl_track_course
WHERE UNIX_TIMESTAMP(logout_course_date) > UNIX_TIMESTAMP(login_course_date) AND course_code='$course_code' AND session_id = '$session_id' $condition_user";
WHERE UNIX_TIMESTAMP(logout_course_date) > UNIX_TIMESTAMP(login_course_date) AND course_code='$course_code' AND session_id = '$session_id' $condition_user";
$rs = Database::query($sql);
$row = Database::fetch_array($rs);
@ -477,11 +477,11 @@ class Tracking
$sql = "SELECT SUM(exe_result/exe_weighting*100) as avg_score, COUNT(*) as num_attempts
FROM $tbl_stats_exercise
WHERE exe_exo_id IN ('".$exercise_id."')
$condition_user AND
orig_lp_id = 0 AND
status = '' AND
exe_cours_id = '$course_code' AND
orig_lp_item_id = 0 $condition_session
$condition_user AND
orig_lp_id = 0 AND
status = '' AND
c_id = '{$course_info['real_id']}' AND
orig_lp_item_id = 0 $condition_session
ORDER BY exe_date DESC";
$res = Database::query($sql);
@ -507,15 +507,15 @@ class Tracking
/**
* Get count student's exercise COMPLETED attempts
* @param int Student id
* @param string Course code
* @param int course id
* @param int Exercise id
* @param int Learning path id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
* @param int Learning path item id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
* @return int count of attempts
*/
public static function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0)
public static function count_student_exercise_attempts($student_id, $courseId, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0)
$sql = "SELECT * FROM $tbl_user AS u INNER JOIN $tbl_course_rel_user AS cu ON cu.user_id = u.user_id WHERE cu.course_code = '".$course_code."' AND ISNULL(cu.role);";
$sql = "SELECT * FROM $tbl_user AS u
INNER JOIN $tbl_course_rel_user AS cu ON cu.user_id = u.user_id
WHERE cu.course_code = '".$course_code."' AND ISNULL(cu.role);";
$sql = "SELECT * FROM $tbl_user AS u INNER JOIN $tbl_course_rel_user AS cu ON cu.user_id = u.user_id WHERE cu.course_code = '".$course_code."' AND ISNULL(cu.role);";
$sql = "SELECT * FROM $tbl_user AS u INNER JOIN $tbl_course_rel_user AS cu ON cu.user_id = u.user_id
WHERE cu.course_code = '".$course_code."' AND ISNULL(cu.role);";
$sql = "SELECT user_id FROM $tbl_user AS u INNER JOIN $tbl_session_rel_course_rel_user AS scu ON u.user_id = scu.id_user WHERE scu.id_session = '".$session_id."' AND scu.course_code = '".$row->code."';";
$sql = "SELECT user_id FROM $tbl_user AS u INNER JOIN $tbl_session_rel_course_rel_user AS scu ON u.user_id = scu.id_user
WHERE scu.id_session = '".$session_id."' AND scu.course_code = '".$row->code."';";
$sql = "SELECT * FROM $tbl_course AS c INNER JOIN $tbl_session_rel_course AS sc ON sc.course_code = c.code WHERE sc.id_session = '".$session_id."';";
$sql = "SELECT c.title, c.code, c.idFROM $tbl_course AS c INNER JOIN $tbl_session_rel_course AS sc ON sc.course_code = c.code
WHERE sc.id_session = '".$session_id."';";
$result = Database::query($sql);
while ($row = Database::fetch_object($result)) {
$csv_row = array();
$csv_row[] = $session_title;
$csv_row[] = $row->title;
// get the users in the course
$sql = "SELECT user_id FROM $tbl_user AS u INNER JOIN $tbl_session_rel_course_rel_user AS scu ON u.user_id = scu.id_user WHERE scu.id_session = '".$session_id."' AND scu.course_code = '".$row->code."';";
$sql = "SELECT user_id FROM $tbl_user AS u INNER JOIN $tbl_session_rel_course_rel_user AS scu ON u.user_id = scu.id_user
WHERE scu.id_session = '".$session_id."' AND scu.course_code = '".$row->code."';";
$sql = "SELECT * FROM $tbl_course_user WHERE user_id = '".Database::escape_string($user[4])."' AND relation_type<>".COURSE_RELATION_TYPE_RRHH." ";
$sql = "SELECT code, id FROM $tbl_course_user WHERE user_id = '".Database::escape_string($user[4])."' AND relation_type<>".COURSE_RELATION_TYPE_RRHH." ";
$result = Database::query($sql);
while ($row = Database::fetch_row($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {