diff --git a/main/inc/lib/events.lib.inc.php b/main/inc/lib/events.lib.inc.php index 7ff43fa69d..c31dead86e 100644 --- a/main/inc/lib/events.lib.inc.php +++ b/main/inc/lib/events.lib.inc.php @@ -69,8 +69,8 @@ function event_open() { * @desc Record information for login event * (when an user identifies himself with username & password) */ -function event_login() { - +function event_login() { + global $_user; global $TABLETRACK_LOGIN; @@ -79,12 +79,12 @@ function event_login() { VALUES ('".$_user['user_id']."', '".Database::escape_string($_SERVER['REMOTE_ADDR'])."', '".$reallyNow."', - '".$reallyNow."' + '".$reallyNow."' )"; $res = Database::query($sql); // autoSubscribe $user_status = $_user['status']; - $user_status = $_user['status'] == SESSIONADMIN ? 'sessionadmin' : + $user_status = $_user['status'] == SESSIONADMIN ? 'sessionadmin' : $_user['status'] == COURSEMANAGER ? 'teacher' : $_user['status'] == DRH ? 'DRH' : 'student'; @@ -92,7 +92,7 @@ function event_login() { if ($autoSubscribe) { $autoSubscribe = explode('|', $autoSubscribe); foreach ($autoSubscribe as $code) { - if (CourseManager::course_exists($code)) { + if (CourseManager::course_exists($code)) { CourseManager::subscribe_user($_user['user_id'], $code); } } @@ -106,11 +106,11 @@ function event_login() { */ function event_access_course() { global $_user, $TABLETRACK_ACCESS, $TABLETRACK_LASTACCESS; - - $id_session = api_get_session_id(); - $now = api_get_utc_datetime(); - $_cid = api_get_course_id(); - + + $id_session = api_get_session_id(); + $now = api_get_utc_datetime(); + $_cid = api_get_course_id(); + if ($_user['user_id']) { $user_id = "'".$_user['user_id']."'"; } else { @@ -119,18 +119,18 @@ function event_access_course() { $sql = "INSERT INTO ".$TABLETRACK_ACCESS." (access_user_id, access_cours_code, access_date, access_session_id) VALUES (".$user_id.", '".$_cid."', '".$now."','".$id_session."')"; $res = Database::query($sql); - + // added for "what's new" notification - $sql = "UPDATE $TABLETRACK_LASTACCESS SET access_date = '$now' + $sql = "UPDATE $TABLETRACK_LASTACCESS SET access_date = '$now' WHERE access_user_id = $user_id AND access_cours_code = '$_cid' AND access_tool IS NULL AND access_session_id=".$id_session; $res = Database::query($sql); - + if (Database::affected_rows() == 0) { $sql = "INSERT INTO $TABLETRACK_LASTACCESS (access_user_id, access_cours_code, access_date, access_session_id) VALUES (".$user_id.", '".$_cid."', '$now', '".$id_session."')"; $res = Database::query($sql); } - // end "what's new" notification + // end "what's new" notification return 1; } @@ -152,24 +152,24 @@ function event_access_tool($tool, $id_session=0) { global $_configuration; global $_user; global $_cid; - global $TABLETRACK_ACCESS; + global $TABLETRACK_ACCESS; global $_course; global $TABLETRACK_LASTACCESS; //for "what's new" notification - + $id_session = api_get_session_id(); - $tool = Database::escape_string($tool); + $tool = Database::escape_string($tool); $reallyNow = api_get_utc_datetime(); $user_id = $_user['user_id'] ? "'".$_user['user_id']."'" : "0"; // no one // record information // only if user comes from the course $_cid //if( eregi($_configuration['root_web'].$_cid,$_SERVER['HTTP_REFERER'] ) ) //$pos = strpos($_SERVER['HTTP_REFERER'],$_configuration['root_web'].$_cid); - + $pos = isset($_SERVER['HTTP_REFERER']) ? strpos(strtolower($_SERVER['HTTP_REFERER']), strtolower(api_get_path(WEB_COURSE_PATH).$_course['path'])) : false; // added for "what's new" notification $pos2 = isset($_SERVER['HTTP_REFERER']) ? strpos(strtolower($_SERVER['HTTP_REFERER']), strtolower($_configuration['root_web']."index")) : false; // end "what's new" notification - if ($pos !== false || $pos2 !== false) { + if ($pos !== false || $pos2 !== false) { $sql = "INSERT INTO ".$TABLETRACK_ACCESS." (access_user_id, access_cours_code, @@ -181,7 +181,7 @@ function event_access_tool($tool, $id_session=0) { (".$user_id.",".// Don't add ' ' around value, it's already done. "'".$_cid."' , '".$tool."', - '".$reallyNow."', + '".$reallyNow."', '".$id_session."')"; $res = Database::query($sql); } @@ -211,14 +211,14 @@ function event_access_tool($tool, $id_session=0) { * and later again. * Doing this twice causes an error, I remove one of them. */ -function event_download($doc_url) { - $tbl_stats_downloads = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS); +function event_download($doc_url) { + $tbl_stats_downloads = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_DOWNLOADS); $doc_url = Database::escape_string($doc_url); $reallyNow = api_get_utc_datetime(); $user_id = "'".api_get_user_id()."'"; $_cid = api_get_course_id(); - + $sql = "INSERT INTO $tbl_stats_downloads ( down_user_id, down_cours_id, @@ -244,11 +244,11 @@ function event_download($doc_url) { * used in the works tool to record informations when * an user upload 1 work */ -function event_upload($doc_id) { +function event_upload($doc_id) { global $_user; global $_cid; global $TABLETRACK_UPLOADS; - + $reallyNow = api_get_utc_datetime(); if (isset($_user['user_id']) && $_user['user_id']!='') { $user_id = "'".$_user['user_id']."'"; @@ -307,39 +307,39 @@ function event_link($link_id) { /** * Update the TRACK_E_EXERCICES exercises - * + * * @param int exeid id of the attempt * @param int exo_id exercise id - * @param mixed result score + * @param mixed result score * @param int weighting ( higher score ) * @param int duration ( duration of the attempt, in seconds ) * @param int session_id * @param int learnpath_id (id of the learnpath) * @param int learnpath_item_id (id of the learnpath_item) - * + * * @author Sebastien Piraux * @author Julio Montoya Armas Reworked 2010 - * @desc Record result of user when an exercice was done + * @desc Record result of user when an exercice was done */ -function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$learnpath_id=0, $learnpath_item_id=0, $learnpath_item_view_id = 0, $duration, $question_list, $status = '', $remind_list = array()) { +function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$learnpath_id=0, $learnpath_item_id=0, $learnpath_item_view_id = 0, $duration, $question_list, $status = '', $remind_list = array() , $end_date = null) { require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; if ($exeid != '') { // Validation in case of fraud with actived control time if (!exercise_time_control_is_valid($exo_id)) { - $score = 0; + $score = 0; } - + /* start_date wouldn't be updated - $start_date_condition = ''; + $start_date_condition = ''; //Validation in case of wrong start_date if (isset($_SESSION['exercice_start_date'])) { $start_date = $_SESSION['exercice_start_date']; $diff = abs($start_date - $now); if ($diff > 14400) { // 14400 = 4h*60*60 more than 4h of diff $start_date = $now - 1800; // Now - 30min - } + } }*/ - + if (!isset($status) || empty($status)) { $status = ''; } else { @@ -348,14 +348,18 @@ function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$ $TABLETRACK_EXERCICES = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $question_list = array_map('intval', $question_list); - + if (!empty($remind_list)) { $remind_list = array_map('intval', $remind_list); $remind_list = array_filter($remind_list); $remind_list = implode(",", $remind_list); } else { $remind_list = ''; - } + } + + if (empty($end_date)) { + $end_date = api_get_utc_datetime(); + } $sql = "UPDATE $TABLETRACK_EXERCICES SET exe_exo_id = '".Database::escape_string($exo_id)."', @@ -366,19 +370,19 @@ function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$ orig_lp_item_id = '".Database::escape_string($learnpath_item_id)."', orig_lp_item_view_id = '".Database::escape_string($learnpath_item_view_id)."', exe_duration = '".Database::escape_string($duration)."', - exe_date = '".api_get_utc_datetime()."', + exe_date = '".$end_date."', status = '".$status."', - questions_to_check = '".$remind_list."', + questions_to_check = '".$remind_list."', data_tracking = '".implode(',', $question_list)."' WHERE exe_id = '".Database::escape_string($exeid)."'"; $res = Database::query($sql); - - if ($debug) error_log('update_event_exercice called '); + + if ($debug) error_log('update_event_exercice called'); if ($debug) error_log("$sql"); - - //Deleting control time session track + + //Deleting control time session track //exercise_time_control_delete($exo_id); - return $res; + return $res; } else { return false; } @@ -391,14 +395,14 @@ function update_event_exercice($exeid, $exo_id, $score, $weighting,$session_id,$ * @author Julio Montoya * @desc Record result of user when an exercice was done */ -function create_event_exercice($exo_id) { +function create_event_exercice($exo_id) { if (empty($exo_id) or (intval($exo_id)!=$exo_id)) { return false; } //error_log('create_event_exercice'); $tbl_track_exe = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $tbl_exe = Database::get_course_table(TABLE_QUIZ_TEST); $now = api_get_utc_datetime(); $uid = api_get_user_id(); - + $course_id = api_get_course_int_id(); // First, check the exercise exists @@ -447,7 +451,7 @@ function create_event_exercice($exo_id) { * @param integer Position * @return boolean Result of the insert query */ -function exercise_attempt($score, $answer, $question_id, $exe_id, $position, $exercise_id = 0, $nano = null) { +function exercise_attempt($score, $answer, $question_id, $exe_id, $position, $exercise_id = 0, $nano = null) { require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; global $debug; $score = Database::escape_string($score); @@ -457,36 +461,36 @@ function exercise_attempt($score, $answer, $question_id, $exe_id, $position, $ex $position = Database::escape_string($position); $now = api_get_utc_datetime(); $user_id = api_get_user_id(); - + $TBL_TRACK_ATTEMPT = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); - + if ($debug) error_log("----- entering exercise_attempt function ------"); - + if ($debug) error_log("answer: $answer"); if ($debug) error_log("score: $score"); if ($debug) error_log("question_id : $question_id"); if ($debug) error_log("position: $position"); - //Validation in case of fraud with actived control time + //Validation in case of fraud with actived control time if (!exercise_time_control_is_valid($exercise_id)) { if ($debug) error_log("exercise_time_control_is_valid is false"); $score = 0; - $answer = 0; + $answer = 0; } - - + + if (!empty($user_id)) { $user_id = "'".$user_id."'"; } else { // anonymous $user_id = api_get_anonymous_id(); - } - - $file = ''; - if (isset($nano)) { + } + + $file = ''; + if (isset($nano)) { $file = Database::escape_string(basename($nano->load_filename_if_exists(false))); } - + $sql = "INSERT INTO $TBL_TRACK_ATTEMPT (exe_id, user_id, question_id, answer, marks, course_code, session_id, position, tms, filename) VALUES ( ".$exe_id.", @@ -499,20 +503,20 @@ function exercise_attempt($score, $answer, $question_id, $exe_id, $position, $ex '".$position."', '".$now."', '".$file."' - )"; - + )"; + if ($debug) error_log("Saving question attempt: "); if ($debug) error_log($sql); if ($debug) error_log(""); - + if (!empty($question_id) && !empty($exe_id) && !empty($user_id)) { - $res = Database::query($sql); + $res = Database::query($sql); if (defined('ENABLED_LIVE_EXERCISE_TRACKING')){ $recording_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); if ($debug) error_log("Saving e attempt recording "); $recording_changes = "INSERT INTO $recording_table (exe_id, question_id, marks, insert_date, author, session_id) VALUES ('$exe_id','$question_id','$score','".api_get_utc_datetime()."','', '".api_get_session_id()."') "; - Database::query($recording_changes); - } + Database::query($recording_changes); + } return $res; } else { return false; @@ -532,8 +536,8 @@ function exercise_attempt($score, $answer, $question_id, $exe_id, $position, $ex function exercise_attempt_hotspot($exe_id, $question_id, $answer_id, $correct, $coords, $exerciseId = 0) { require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; //Validation in case of fraud with actived control time - if (!exercise_time_control_is_valid($exerciseId)) { - $correct = 0; + if (!exercise_time_control_is_valid($exerciseId)) { + $correct = 0; } $tbl_track_e_hotspot = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_HOTSPOT); @@ -558,12 +562,12 @@ function exercise_attempt_hotspot($exe_id, $question_id, $answer_id, $correct, $ * @param integer User ID (defaults to null) * @param string Course code (defaults to null) */ -function event_system($event_type, $event_value_type, $event_value, $datetime = null, $user_id = null, $course_code = null) { +function event_system($event_type, $event_value_type, $event_value, $datetime = null, $user_id = null, $course_code = null) { global $TABLETRACK_DEFAULT; $event_type = Database::escape_string($event_type); $event_value_type = Database::escape_string($event_value_type); - + //Clean the user_info if ($event_value_type == LOG_USER_OBJECT) { if (is_array($event_value)) { @@ -573,36 +577,36 @@ function event_system($event_type, $event_value_type, $event_value, $datetime = unset($event_value['avatar_small']); unset($event_value['avatar']); unset($event_value['password']); - unset($event_value['lastLogin']); - unset($event_value['picture_uri']); + unset($event_value['lastLogin']); + unset($event_value['picture_uri']); $event_value = serialize($event_value); } } - - $event_value = Database::escape_string($event_value); + + $event_value = Database::escape_string($event_value); $course_info = api_get_course_info($course_code); - + if (!empty($course_info)) { $course_id = $course_info['real_id']; - $course_code = $course_info['code']; + $course_code = $course_info['code']; $course_code = Database::escape_string($course_code); } else { $course_id = null; $course_code = null; } - + if (!isset($datetime)) { $datetime = api_get_utc_datetime(); } - + $datetime = Database::escape_string($datetime); - + if (!isset($user_id)) { $user_id = api_get_user_id(); } - + $user_id = intval($user_id); - + $sql = "INSERT INTO $TABLETRACK_DEFAULT (default_user_id, default_cours_code, @@ -627,21 +631,21 @@ function event_system($event_type, $event_value_type, $event_value, $datetime = * Get every email stored in the database * * @param int $etId - * @return type + * @return type */ -function get_all_event_types() +function get_all_event_types() { global $event_config; - - $sql = 'SELECT etm.id, event_type_name, activated, language_id, message, subject, dokeos_folder - FROM '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' etm - INNER JOIN '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' l + + $sql = 'SELECT etm.id, event_type_name, activated, language_id, message, subject, dokeos_folder + FROM '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' etm + INNER JOIN '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' l ON etm.language_id = l.id; '; - + $events_types = Database::store_result(Database::query($sql),'ASSOC'); // echo $sql; - $to_return = array(); + $to_return = array(); foreach ($events_types as $et) { $et['nameLangVar'] = get_lang($event_config[$et["event_type_name"]]["name_lang_var"]); $et['descLangVar'] = get_lang($event_config[$et["event_type_name"]]["desc_lang_var"]); @@ -654,7 +658,7 @@ function get_all_event_types() * Get users linked to an event * * @param int $etId - * @return type + * @return type */ function get_users_subscribed_to_event($event_name){ $event_name = Database::escape_string($event_name); @@ -673,15 +677,15 @@ function get_users_subscribed_to_event($event_name){ * * @param string $event_name */ -function get_event_users($event_name) +function get_event_users($event_name) { $sql = 'SELECT user.* FROM '.Database::get_main_table(TABLE_MAIN_USER).' user JOIN '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' relUser ON relUser.user_id = user.user_id WHERE relUser.event_type_name = "'.$event_name.'" '; - + $events_types = Database::store_result(Database::query($sql),'ASSOC'); - + return $events_types; } @@ -692,17 +696,17 @@ function get_event_users($event_name) * @param array $users * @param string $message * @param string $subject - * @param string $eventMessageLanguage - * @param int $activated + * @param string $eventMessageLanguage + * @param int $activated */ -function save_event_type_message($event_name,$users,$message,$subject, $event_message_language, $activated) +function save_event_type_message($event_name,$users,$message,$subject, $event_message_language, $activated) { // Deletes then re-adds the users linked to the event $sql = 'DELETE FROM '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' WHERE event_type_name = "'.$event_name.'" '; Database::query($sql); - + foreach ($users as $user) { $sql = 'INSERT INTO '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' (user_id,event_type_name) @@ -710,38 +714,38 @@ function save_event_type_message($event_name,$users,$message,$subject, $event_me '; Database::query($sql); } - + // check if this template in this language already exists or not $sql = 'SELECT COUNT(id) as total FROM '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' - WHERE event_type_name = "'.$event_name.'" AND language_id = (SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' + WHERE event_type_name = "'.$event_name.'" AND language_id = (SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' WHERE dokeos_folder = "'.$event_message_language.'") '; $sql = Database::store_result(Database::query($sql),'ASSOC'); - + // if already exists, we update if ($sql[0]["total"] > 0) { $sql = 'UPDATE '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' SET message = "'.Database::escape_string($message).'", - subject = "'.Database::escape_string($subject).'", + subject = "'.Database::escape_string($subject).'", activated = '.$activated.' - WHERE event_type_name = "'.Database::escape_string($event_name).'" AND language_id = (SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' + WHERE event_type_name = "'.Database::escape_string($event_name).'" AND language_id = (SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' WHERE dokeos_folder = "'.$event_message_language.'") '; Database::query($sql); } else { // else we create a new record // gets the language_-_id - $lang_id = '(SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' + $lang_id = '(SELECT id FROM '.Database::get_main_table(TABLE_MAIN_LANGUAGE).' WHERE dokeos_folder = "'.$event_message_language.'")'; $lang_id = Database::store_result(Database::query($lang_id),'ASSOC'); - + $sql = 'INSERT INTO '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' - (event_type_name, language_id, message, subject, activated) + (event_type_name, language_id, message, subject, activated) VALUES("'.Database::escape_string($event_name).'", '.$lang_id[0]["id"].', "'.Database::escape_string($message).'", "'.Database::escape_string($subject).'", '.$activated.') '; Database::query($sql); } - + // set activated at every save $sql = 'UPDATE '.Database::get_main_table(TABLE_MAIN_EVENT_EMAIL_TEMPLATE).' SET activated = '.$activated.' @@ -752,29 +756,29 @@ function save_event_type_message($event_name,$users,$message,$subject, $event_me function eventType_mod($etId,$users,$message,$subject) { $etId = intval($etId); - + $sql = 'DELETE FROM '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' WHERE event_type_id = '.$etId.' '; - + Database::query($sql); - + foreach($users as $user) { $sql = 'INSERT INTO '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_REL_USER).' (user_id,event_type_id) VALUES('.intval($user).','.$etId.') '; - + Database::query($sql); } - + $sql = 'UPDATE '.Database::get_main_table(TABLE_MAIN_EVENT_TYPE_MESSAGE).' SET message = "'.Database::escape_string($message).'", subject = "'.Database::escape_string($subject).'" WHERE event_type_id = '.$etId.' '; - - + + Database::query($sql); } @@ -786,11 +790,11 @@ function get_last_attempt_date_of_exercise($exe_id) { $exe_id = intval($exe_id); $track_attempts = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $track_exercises = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); - + $sql_track_attempt = 'SELECT max(tms) as last_attempt_date FROM '.$track_attempts.' WHERE exe_id='.$exe_id; - - $rs_last_attempt = Database::query($sql_track_attempt); - $row_last_attempt = Database::fetch_array($rs_last_attempt); + + $rs_last_attempt = Database::query($sql_track_attempt); + $row_last_attempt = Database::fetch_array($rs_last_attempt); $last_attempt_date = $row_last_attempt['last_attempt_date'];//Get the date of last attempt return $last_attempt_date; } @@ -810,24 +814,24 @@ function get_attempt_count($user_id, $exerciseId, $lp_id, $lp_item_id,$lp_item_v $lp_id = intval($lp_id); $lp_item_id = intval($lp_item_id); $lp_item_view_id= intval($lp_item_view_id); - - $sql = "SELECT count(*) as count FROM $stat_table WHERE - exe_exo_id = $exerciseId AND + + $sql = "SELECT count(*) as count FROM $stat_table WHERE + exe_exo_id = $exerciseId AND exe_user_id = $user_id AND - status != 'incomplete' AND - 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 + status != 'incomplete' AND + 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 session_id = '" . api_get_session_id() . "'"; $query = Database::query($sql); if (Database::num_rows($query) > 0 ) { - $attempt = Database :: fetch_array($query,'ASSOC'); + $attempt = Database :: fetch_array($query,'ASSOC'); return $attempt['count']; } else { - return 0; - } + return 0; + } } @@ -841,12 +845,12 @@ function get_attempt_count_not_finished($user_id, $exerciseId, $lp_id, $lp_item_ $lp_item_view_id= intval($lp_item_view_id); $sql = "SELECT count(*) as count FROM $stat_table WHERE - exe_exo_id = $exerciseId AND + exe_exo_id = $exerciseId AND exe_user_id = $user_id AND - status != 'incomplete' AND - orig_lp_id = $lp_id AND + 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 + exe_cours_id = '".api_get_course_id()."' AND session_id = '" . api_get_session_id() . "'"; $query = Database::query($sql); @@ -861,61 +865,61 @@ function get_attempt_count_not_finished($user_id, $exerciseId, $lp_id, $lp_item_ function delete_student_lp_events($user_id, $lp_id, $course, $session_id) { - + $lp_view_table = Database::get_course_table(TABLE_LP_VIEW); $lp_item_view_table = Database::get_course_table(TABLE_LP_ITEM_VIEW); $course_id = $course['real_id']; if (empty($course_id)) { $course_id = api_get_course_int_id(); } - + $track_e_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $track_attempts = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $recording_table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); - + $user_id = intval($user_id); $lp_id = intval($lp_id); $session_id = intval($session_id); - + //make sure we have the exact lp_view_id - $sqlview = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = $user_id AND lp_id = $lp_id AND session_id = $session_id "; + $sqlview = "SELECT id FROM $lp_view_table WHERE c_id = $course_id AND user_id = $user_id AND lp_id = $lp_id AND session_id = $session_id "; $resultview = Database::query($sqlview); - - if (Database::num_rows($sqlview)) { + + if (Database::num_rows($sqlview)) { $view = Database::fetch_array($resultview, 'ASSOC'); - $lp_view_id = $view['id']; + $lp_view_id = $view['id']; - $sql_delete = "DELETE FROM $lp_item_view_table WHERE c_id = $course_id AND lp_view_id = $lp_view_id "; + $sql_delete = "DELETE FROM $lp_item_view_table WHERE c_id = $course_id AND lp_view_id = $lp_view_id "; $result = Database::query($sql_delete); } - + $sql_delete = "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 "; $result = Database::query($sql_delete); - - $select_all_attempts = "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"; + + $select_all_attempts = "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"; $result = Database::query($select_all_attempts); $exe_list = array(); while ($row = Database::fetch_array($result, 'ASSOC')) { $exe_list[] = $row['exe_id']; - } - - if (!empty($exe_list) && is_array($exe_list) && count($exe_list) > 0) { + } + + if (!empty($exe_list) && is_array($exe_list) && count($exe_list) > 0) { $sql_delete = "DELETE FROM $track_e_exercises WHERE exe_id IN (".implode(',',$exe_list).")"; $result = Database::query($sql_delete); - + $sql_delete = "DELETE FROM $track_attempts WHERE exe_id IN (".implode(',',$exe_list).")"; $result = Database::query($sql_delete); - + $sql_delete = "DELETE FROM $recording_table WHERE exe_id IN (".implode(',',$exe_list).")"; - $result = Database::query($sql_delete); + $result = Database::query($sql_delete); } } /** - * Delete all exercise attempts (included in LP or not) - * + * Delete all exercise attempts (included in LP or not) + * * @param int user id - * @param int exercise id + * @param int exercise id * @param string course code * @param int session id */ @@ -928,8 +932,8 @@ function delete_all_incomplete_attempts($user_id, $exercise_id, $course_code, $s $session_id = intval($session_id); 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' "; - $result = Database::query($sql); - } + $result = Database::query($sql); + } } /** @@ -938,7 +942,7 @@ function delete_all_incomplete_attempts($user_id, $exercise_id, $course_code, $s * @param string course code * @param int session id * @return array with the results - * + * */ function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $load_question_list = true) { $TABLETRACK_EXERCICES = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); @@ -946,13 +950,13 @@ function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $ $course_code = Database::escape_string($course_code); $exercise_id = intval($exercise_id); $session_id = intval($session_id); - - $sql = "SELECT * FROM $TABLETRACK_EXERCICES - 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 $TABLETRACK_EXERCICES + 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"; $res = Database::query($sql); - $list = array(); - while($row = Database::fetch_array($res,'ASSOC')) { - $list[$row['exe_id']] = $row; + $list = array(); + while($row = Database::fetch_array($res,'ASSOC')) { + $list[$row['exe_id']] = $row; if ($load_question_list) { $sql = "SELECT * FROM $TBL_TRACK_ATTEMPT WHERE exe_id = {$row['exe_id']}"; $res_question = Database::query($sql); @@ -970,33 +974,33 @@ function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $ * @param string course code * @param int session id * @return array with the results - * + * */ function get_all_exercise_results_by_course($course_code, $session_id = 0, $get_count = true) { $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $course_code = Database::escape_string($course_code); - + $session_id = intval($session_id); $select = '*'; if ($get_count) { - $select = 'count(*) as count'; - } - $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"; - $res = Database::query($sql); + $select = 'count(*) as count'; + } + $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"; + $res = Database::query($sql); if ($get_count) { - $row = Database::fetch_array($res,'ASSOC'); + $row = Database::fetch_array($res,'ASSOC'); return $row['count']; } else { - $list = array(); - while($row = Database::fetch_array($res,'ASSOC')) { - $list[$row['exe_id']] = $row; + $list = array(); + while($row = Database::fetch_array($res,'ASSOC')) { + $list[$row['exe_id']] = $row; $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}"; $res_question = Database::query($sql); while($row_q = Database::fetch_array($res_question,'ASSOC')) { $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; - } - } + } + } return $list; } } @@ -1022,12 +1026,12 @@ function get_all_exercise_results_by_user($user_id, $course_code, $session_id = $res = Database::query($sql); $list = array(); while($row = Database::fetch_array($res,'ASSOC')) { - $list[$row['exe_id']] = $row; + $list[$row['exe_id']] = $row; $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}"; $res_question = Database::query($sql); while($row_q = Database::fetch_array($res_question,'ASSOC')) { $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; - } + } } //echo '
'; print_r($list);
 	return $list;
@@ -1044,16 +1048,16 @@ function get_all_exercise_results_by_user($user_id,  $course_code, $session_id =
 function get_exercise_results_by_attempt($exe_id) {
 	$table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
 	$table_track_attempt   = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
-	$table_track_attempt_recording   = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING);	
+	$table_track_attempt_recording   = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING);
 	$exe_id 		= intval($exe_id);
-	
-	$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_id = $exe_id";    
+
+	$sql = "SELECT * FROM $table_track_exercises WHERE status = '' AND exe_id = $exe_id";
 
 	$res = Database::query($sql);
 	$list = array();
 	if (Database::num_rows($res)) {
 	 	$row = Database::fetch_array($res,'ASSOC');
-	 	
+
 		//Checking if this attempt was revised by a teacher
 		$sql_revised = 'SELECT exe_id FROM ' . $table_track_attempt_recording . ' WHERE author != "" AND exe_id = '.$exe_id.' LIMIT 1';
 		$res_revised = Database::query($sql_revised);
@@ -1080,9 +1084,9 @@ function get_exercise_results_by_attempt($exe_id) {
  * @param   int     session id
  * @param   int     lp id
  * @param   int     lp item id
- * @param   string 	order asc or desc 
+ * @param   string 	order asc or desc
  * @return  array   with the results
- * 
+ *
  */
 function get_exercise_results_by_user($user_id, $exercise_id, $course_code, $session_id = 0, $lp_id = 0, $lp_item_id = 0, $order = null) {
 	$table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
@@ -1094,38 +1098,38 @@ function get_exercise_results_by_user($user_id, $exercise_id, $course_code, $ses
     $user_id    	= intval($user_id);
     $lp_id			= intval($lp_id);
     $lp_item_id		= intval($lp_item_id);
-    
+
     if (!in_array(strtolower($order), array('asc', 'desc'))) {
-    	$order = 'asc'; 
+    	$order = 'asc';
     }
-    
-    $sql = "SELECT * FROM $table_track_exercises 
-    		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 		= $lp_id AND 
-    				orig_lp_item_id = $lp_item_id 
-    				ORDER by exe_id $order ";    
-    
+
+    $sql = "SELECT * FROM $table_track_exercises
+    		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 		= $lp_id AND
+    				orig_lp_item_id = $lp_item_id
+    				ORDER by exe_id $order ";
+
     $res = Database::query($sql);
-    $list = array();    
-    while($row = Database::fetch_array($res,'ASSOC')) {     
+    $list = array();
+    while($row = Database::fetch_array($res,'ASSOC')) {
     	//Checking if this attempt was revised by a teacher
     	$sql_revised = 'SELECT exe_id FROM ' . $table_track_attempt_recording . ' WHERE author != "" AND exe_id = '.$row['exe_id'].' LIMIT 1';
     	$res_revised = Database::query($sql_revised);
     	$row['attempt_revised'] = 0;
      	if (Database::num_rows($res_revised) > 0) {
 			$row['attempt_revised'] = 1;
-        }    	
-        $list[$row['exe_id']] = $row;       
+        }
+        $list[$row['exe_id']] = $row;
         $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}";
         $res_question = Database::query($sql);
         while ($row_q = Database::fetch_array($res_question,'ASSOC')) {
             $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
-        }       
-    }    
+        }
+    }
     return $list;
 }
 
@@ -1137,7 +1141,7 @@ function get_exercise_results_by_user($user_id, $exercise_id, $course_code, $ses
  * @param   string  course code
  * @param   int     session id
  * @return  array   with the results
- * 
+ *
  */
 function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $session_id = 0) {
 	$TABLETRACK_EXERCICES  = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
@@ -1146,15 +1150,15 @@ function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $
 	$exercise_id           = intval($exercise_id);
 	$session_id            = intval($session_id);
 	$user_id               = intval($user_id);
-	
-	$sql = "SELECT count(*) as count FROM $TABLETRACK_EXERCICES 
+
+	$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";
 	$res = Database::query($sql);
 	$result = 0;
-	if (Database::num_rows($res) > 0 ) {		
+	if (Database::num_rows($res) > 0 ) {
 	    $row = Database::fetch_array($res,'ASSOC');
 	    $result = $row['count'];
-	}	
+	}
 	return $result;
 }
 
@@ -1165,7 +1169,7 @@ function count_exercise_attempts_by_user($user_id, $exercise_id, $course_code, $
  * @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) {
 	$table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
@@ -1173,26 +1177,26 @@ function get_best_exercise_results_by_user($exercise_id, $course_code, $session_
 	$course_code           = Database::escape_string($course_code);
 	$exercise_id           = intval($exercise_id);
 	$session_id            = intval($session_id);
-	
+
 	$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";
-	
+
 	$res = Database::query($sql);
 	$list = array();
-	while($row = Database::fetch_array($res,'ASSOC')) {		
-		$list[$row['exe_id']] = $row;		
+	while($row = Database::fetch_array($res,'ASSOC')) {
+		$list[$row['exe_id']] = $row;
 		$sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}";
 		$res_question = Database::query($sql);
 		while($row_q = Database::fetch_array($res_question,'ASSOC')) {
 			$list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
-		}		
-	}	
-	//Getting the best results of every student	
+		}
+	}
+	//Getting the best results of every student
 	$best_score_return = array();
-	
-	foreach($list as $student_result) {	    
-	    $user_id = $student_result['exe_user_id'];	    
-	    $current_best_score[$user_id] = $student_result['exe_result'];	    
-	    //echo $current_best_score[$user_id].' - '.$best_score_return[$user_id]['exe_result'].'
'; + + foreach($list as $student_result) { + $user_id = $student_result['exe_user_id']; + $current_best_score[$user_id] = $student_result['exe_result']; + //echo $current_best_score[$user_id].' - '.$best_score_return[$user_id]['exe_result'].'
'; if ($current_best_score[$user_id] > $best_score_return[$user_id]['exe_result']) { $best_score_return[$user_id] = $student_result; } @@ -1207,37 +1211,37 @@ function get_best_attempt_exercise_results_per_user($user_id, $exercise_id, $cou $exercise_id = intval($exercise_id); $session_id = intval($session_id); $user_id = intval($user_id); - - $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 + + $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 exe_user_id = $user_id AND - orig_lp_id =0 AND - orig_lp_item_id = 0 + orig_lp_id =0 AND + orig_lp_item_id = 0 ORDER BY exe_id"; - + $res = Database::query($sql); $list = array(); - while($row = Database::fetch_array($res,'ASSOC')) { - $list[$row['exe_id']] = $row; /* + while($row = Database::fetch_array($res,'ASSOC')) { + $list[$row['exe_id']] = $row; /* $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}"; $res_question = Database::query($sql); while($row_q = Database::fetch_array($res_question,'ASSOC')) { $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; } */ - } + } //Getting the best results of every student - $best_score_return = array(); + $best_score_return = array(); $best_score_return['exe_result'] = 0; - + foreach($list as $result) { $current_best_score = $result; if ($current_best_score['exe_result'] > $best_score_return['exe_result']) { $best_score_return = $result; } - } + } if (!isset($best_score_return['exe_weighting'])) { $best_score_return = array(); } @@ -1248,26 +1252,26 @@ function get_best_attempt_exercise_results_per_user($user_id, $exercise_id, $cou function count_exercise_result_not_validated($exercise_id, $course_code, $session_id = 0) { $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); - $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); - $course_code = Database::escape_string($course_code); + $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); + $course_code = Database::escape_string($course_code); $session_id = intval($session_id); $exercise_id = intval($exercise_id); - + $status = Database::escape_string($status); - - $sql = "SELECT count(e.exe_id) as count FROM $table_track_exercises e LEFT JOIN $table_track_attempt a ON e.exe_id = a.exe_id - WHERE exe_exo_id = $exercise_id AND + + $sql = "SELECT count(e.exe_id) as count FROM $table_track_exercises e LEFT JOIN $table_track_attempt a ON e.exe_id = a.exe_id + WHERE exe_exo_id = $exercise_id AND exe_cours_id = '$course_code' AND - e.session_id = $session_id AND + e.session_id = $session_id AND orig_lp_id = 0 AND marks IS NULL AND status = '' AND - orig_lp_item_id = 0 ORDER BY e.exe_id"; + orig_lp_item_id = 0 ORDER BY e.exe_id"; $res = Database::query($sql); $row = Database::fetch_array($res,'ASSOC'); - + return $row['count']; - + } @@ -1277,15 +1281,15 @@ function count_exercise_result_not_validated($exercise_id, $course_code, $sessio * @param string course code * @param int session id * @return array with the results - * + * */ function get_count_exercises_attempted_by_course($course_code, $session_id = 0) { $table_track_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); - $course_code = Database::escape_string($course_code); + $course_code = Database::escape_string($course_code); $session_id = intval($session_id); - - $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 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"; $res = Database::query($sql); $count = 0; if (Database::num_rows($res) > 0) { @@ -1307,19 +1311,19 @@ function get_all_exercise_event_from_lp($exercise_id, $course_code, $session_id $table_track_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $course_code = Database::escape_string($course_code); $exercise_id = intval($exercise_id); - $session_id = intval($session_id); - + $session_id = intval($session_id); + $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"; - + $res = Database::query($sql); - $list = array(); - while($row = Database::fetch_array($res,'ASSOC')) { - $list[$row['exe_id']] = $row; + $list = array(); + while($row = Database::fetch_array($res,'ASSOC')) { + $list[$row['exe_id']] = $row; $sql = "SELECT * FROM $table_track_attempt WHERE exe_id = {$row['exe_id']}"; $res_question = Database::query($sql); while($row_q = Database::fetch_array($res_question,'ASSOC')) { $list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q; - } + } } return $list; } @@ -1331,13 +1335,13 @@ function get_all_exercises_from_lp($lp_id, $course_id) { $lp_id = intval($lp_id); $sql = "SELECT * FROM $lp_item_table WHERE c_id = $course_id AND lp_id = '".$lp_id."' ORDER BY parent_item_id, display_order"; $res = Database::query($sql); - $my_exercise_list = array(); + $my_exercise_list = array(); while($row = Database::fetch_array($res,'ASSOC')) { if ($row['item_type'] == 'quiz') { $my_exercise_list[] = $row; - } + } } - return $my_exercise_list; + return $my_exercise_list; } @@ -1403,19 +1407,19 @@ function delete_attempt_hotspot($exe_id, $user_id, $course_code, $question_id) { */ function event_course_login($course_code, $user_id, $session_id) { global $course_tracking_table; - + //@todo use api_get_utc_datetime $time = api_get_datetime(); - + $course_code = Database::escape_string($course_code); $user_id = Database::escape_string($user_id); $session_id = Database::escape_string($session_id); - - $sql = "INSERT INTO $course_tracking_table(course_code, user_id, login_course_date, logout_course_date, counter, session_id) + + $sql = "INSERT INTO $course_tracking_table(course_code, user_id, login_course_date, logout_course_date, counter, session_id) VALUES('".$course_code."', '".$user_id."', '$time', '$time', '1', '".$session_id."')"; Database::query($sql); - - - //Course catalog stats modifications see #4191 + + + //Course catalog stats modifications see #4191 CourseManager::update_course_ranking(null, null, null, null, true, false); }