From 2eb63345f1aeb468e0ff2905f2fa87b17dd1fcc5 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 13 Oct 2010 14:43:24 +0200 Subject: [PATCH] Fixing get_db_progress function + improving student reporting to work with exercises + sessions + lps BT#1613 --- main/auth/my_progress.php | 378 ++++++++++++++++-------------- main/inc/lib/course.lib.php | 2 +- main/inc/lib/events.lib.inc.php | 2 +- main/inc/lib/tracking.lib.php | 13 +- main/newscorm/learnpath.class.php | 14 +- main/newscorm/lp_list.php | 6 +- 6 files changed, 223 insertions(+), 192 deletions(-) diff --git a/main/auth/my_progress.php b/main/auth/my_progress.php index 587b6628fe..3f5003ce9e 100755 --- a/main/auth/my_progress.php +++ b/main/auth/my_progress.php @@ -11,6 +11,8 @@ require_once api_get_path(LIBRARY_PATH).'tracking.lib.php'; require_once api_get_path(LIBRARY_PATH).'course.lib.php'; require_once api_get_path(LIBRARY_PATH).'usermanager.lib.php'; require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpath.class.php'; +global $_configuration; + $this_section = SECTION_TRACKING; $nameTools = get_lang('MyProgress'); @@ -33,25 +35,40 @@ $tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN); $tbl_course_lp_item = Database :: get_course_table(TABLE_LP_ITEM); $tbl_course_quiz = Database :: get_course_table(TABLE_QUIZ_TEST); +$tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); +$tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + + // get course list -$sql = 'SELECT course_code FROM '.$tbl_course_user.' WHERE user_id='.intval($_user['user_id']).' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' '; +if ($_configuration['multiple_access_urls']) { + $sql = 'SELECT cu.course_code FROM '.$tbl_course_user.' cu INNER JOIN '.$tbl_access_rel_course.' a ON(a.course_code = cu.course_code) WHERE user_id='.intval($_user['user_id']).' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' AND access_url_id = '.api_get_current_access_url_id().''; +} else { + $sql = 'SELECT course_code FROM '.$tbl_course_user.' WHERE user_id='.intval($_user['user_id']).' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' '; +} + $rs = Database::query($sql); -$courses = array(); +$courses = $course_in_session = array(); + while($row = Database :: fetch_array($rs)) { $courses[$row['course_code']] = CourseManager::get_course_information($row['course_code']); } // get the list of sessions where the user is subscribed as student -$sql = 'SELECT DISTINCT course_code FROM '.Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER).' WHERE id_user='.intval($_user['user_id']); + + +if ($_configuration['multiple_access_urls']) { + $sql = 'SELECT DISTINCT cu.course_code, id_session as session_id FROM '.$tbl_session_course_user.' cu INNER JOIN '.$tbl_access_rel_session.' a ON(a.session_id = cu.id_session) WHERE id_user='.$_user['user_id'].' AND access_url_id = '.api_get_current_access_url_id().''; +} else { + $sql = 'SELECT DISTINCT course_code, id_session as session_id FROM '.$tbl_session_course_user.' WHERE id_user='.intval($_user['user_id']); +} + $rs = Database::query($sql); while($row = Database :: fetch_array($rs)) { - $courses[$row['course_code']] = CourseManager::get_course_information($row['course_code']); + $course_in_session[$row['session_id']][$row['course_code']] = CourseManager::get_course_information($row['course_code']); } - echo '
'; echo $nameTools; echo '
'; -$now = date('Y-m-d'); ?> @@ -67,72 +84,125 @@ $now = date('Y-m-d'); - - -'> - - - - '; + + echo ''; + echo ''; + + echo ' - - + } + echo ''; + + echo ''; + + echo ''; + $i = $i ? 0 : 1; +} +?> +
- - - - - - - '; + echo ''.$enreg['title'].''.$time.''.$progress.'%'; + if (!is_null($percentage_score)) { echo $percentage_score.'%'; } else { echo '0%'; - } - ?> - - - - '; - Display::display_icon('2rightarrow_na.gif', get_lang('Details')); - } else { - echo ''; - Display::display_icon('2rightarrow.gif', get_lang('Details')); - } - echo ''; - ?> - '.$last_connection.''; + if ($enreg['code'] == $_GET['course'] && empty($_GET['session_id'])) { + echo ''; + Display::display_icon('2rightarrow_na.gif', get_lang('Details')); + } else { + echo ''; + Display::display_icon('2rightarrow.gif', get_lang('Details')); + } + echo ''; + echo '
+
+ + + + + + + + + + + + $session) { + + echo ''; + + echo ''; + + foreach ($session as $enreg) { + + + $weighting = 0; + $last_connection = Tracking :: get_last_connection_date_on_the_course($_user['user_id'], $enreg['code'], $enreg['session_id']); + $progress = Tracking :: get_avg_student_progress($_user['user_id'], $enreg['code'],array(), $enreg['session_id']); + $total_time_login = Tracking :: get_time_spent_on_the_course($_user['user_id'], $enreg['code'], $enreg['session_id']); + $time = api_time_to_hms($total_time_login); + $percentage_score = Tracking :: get_avg_student_score ($_user['user_id'], $enreg['code'], array(), $enreg['session_id']); + + echo ''; + + echo ''; + echo ''; + + echo ''; + + echo ''; + + echo ''; + $i = $i ? 0 : 1; + echo ''; + } } ?>
+ +
'absmiddle', 'hspace' => '3px')); ?>
'.api_get_session_name($key).' '.$enreg['title'].' '.$time.''.$progress.'%'; + if (!is_null($percentage_score)) { + echo $percentage_score.'%'; + } else { + echo '0%'; + } + echo ''.$last_connection.''; + if ($enreg['code'] == $_GET['course'] && $_GET['session_id'] == $key) { + echo ''; + Display::display_icon('2rightarrow_na.gif', get_lang('Details')); + } else { + echo ''; + Display::display_icon('2rightarrow.gif', get_lang('Details')); + } + echo ''; + echo '


0) { // get session name and coach of the session @@ -184,15 +261,18 @@ foreach ($courses as $enreg) { $course_info['tutor_name'] = api_get_person_name($coach_info['firstname'], $coach_info['lastname']); } } - } // end if (api_get_setting('use_session_mode') == 'true') + } // end if (api_get_setting('use_session_mode') == 'true')*/ - $tableTitle = $course_info['title'].' | '.get_lang('Coach').' : '.$course_info['tutor_name'].((!empty($session_name)) ? ' | '.get_lang('Session').' : '.$session_name : ''); + //$tableTitle = $course_info['title'].' | '.get_lang('Coach').' : '.$course_info['tutor_name'].((!empty($session_name)) ? ' | '.get_lang('Session').' : '.$session_name : ''); + + $session_name = api_get_session_name($session_id); + $tableTitle = ((!empty($session_name)) ? ' '.get_lang('Session').' : '.$session_name.' | ' : '').''.$course_info['title']; ?> @@ -202,151 +282,107 @@ foreach ($courses as $enreg) { 0) { while($learnpath = Database::fetch_array($result_learnpath)) { - $progress = learnpath :: get_db_progress($learnpath['id'], $_user['user_id'], '%', $course_info['db_name']); - - // calculates last connection time - $sql = 'SELECT MAX(start_time) - FROM '.$tbl_course_lp_view_item.' AS item_view - INNER JOIN '.$tbl_course_lp_view.' AS view - ON item_view.lp_view_id = view.id - AND view.lp_id = '.$learnpath['id'].' - AND view.user_id = '.$_user['user_id']; - $rs = Database::query($sql); - $start_time = Database::result($rs, 0, 0); - - // calculates time - $sql = 'SELECT SUM(total_time) - FROM '.$tbl_course_lp_view_item.' AS item_view - INNER JOIN '.$tbl_course_lp_view.' AS view - ON item_view.lp_view_id = view.id - AND view.lp_id = '.$learnpath['id'].' - AND view.user_id = '.$_user['user_id']; - $rs = Database::query($sql); - $total_time = Database::result($rs, 0, 0); - - - echo " - - - - - - "; - } - + echo ""; + } } else { - echo ' - - '; + '; } - ?> - - - - - - - - '; - - + if (empty($session_id)) { + $sql_exercices = "SELECT quiz.title,id, results_disabled FROM ".$tbl_course_quiz." AS quiz WHERE active='1' AND session_id = 0"; + } else { + $sql_exercices = "SELECT quiz.title,id, results_disabled FROM ".$tbl_course_quiz." AS quiz WHERE active='1'"; + } + echo ' + + + + + '; $result_exercices = Database::query($sql_exercices); if (Database::num_rows($result_exercices) > 0) { while ($exercices = Database::fetch_array($result_exercices)) { - $sql_essais = " SELECT COUNT(ex.exe_id) as essais - FROM $tbl_stats_exercices AS ex - WHERE ex.exe_user_id='".$_user['user_id']."' AND ex.exe_cours_id = '".$course_info['code']."' - AND ex.exe_exo_id = ".$exercices['id']." - AND orig_lp_id = 0 - AND orig_lp_item_id = 0 " - ; - $result_essais = Database::query($sql_essais); - $essais = Database::fetch_array($result_essais); - - $sql_score = "SELECT exe_id , exe_result,exe_weighting - FROM $tbl_stats_exercices - WHERE exe_user_id = ".$_user['user_id']." - AND exe_cours_id = '".$course_info['code']."' - AND exe_exo_id = ".$exercices['id']." - AND orig_lp_id = 0 - AND orig_lp_item_id = 0 - ORDER BY exe_date DESC LIMIT 1"; - - $result_score = Database::query($sql_score); - $score = 0; - while($current_score = Database::fetch_array($result_score)) { - $score = $score + $current_score['exe_result']; - $weighting = $weighting + $current_score['exe_weighting']; - $exe_id = $current_score['exe_id']; - } - + $score = 0; + $weighting = 0; + $exercise_stats = get_all_exercise_event($exercices['id'],$course_info['code'], $session_id); + $attempts = 0; + foreach($exercise_stats as $exercise_stat) { + if ($exercise_stat['exe_user_id'] == $_user['user_id']) { + $score = $score + $exercise_stat['exe_result']; + $weighting = $weighting + $exercise_stat['exe_weighting']; + $exe_id = $exercise_stat['exe_id']; + $attempts++; + } + } if ($weighting > 0) { // i.e 10.50% $percentage_score = round(($score * 100) / $weighting, 2); } else { $percentage_score = 0; } - - $weighting = 0; - echo ''; - if ($exercices['results_disabled'] == 0) { echo ''; echo ''; } else { @@ -366,12 +402,8 @@ foreach ($courses as $enreg) { } else { echo ''; } - /*} else { - echo ''; - }*/ ?>
- +

- "; - echo stripslashes($learnpath['name']); + //$progress = learnpath :: get_db_progress($learnpath['id'], $_user['user_id'], 'abs', $course_info['db_name'], false, $session_id); + $progress = Tracking::get_avg_student_progress($_user['user_id'], $course, array($learnpath['id']), $session_id); + $last_connection_in_lp = Tracking::get_last_connection_time_in_lp($_user['user_id'], $course, $learnpath['id'], $session_id); + $time_spent_in_lp = Tracking::get_time_spent_in_lp($_user['user_id'], $course, array($learnpath['id']), $session_id); + $time_spent_in_lp = api_time_to_hms($time_spent_in_lp); + + echo "
"; + echo $learnpath['name']; echo " - "; - echo api_time_to_hms($total_time); + "; + echo $time_spent_in_lp; echo " - "; + "; + if (is_numeric($progress)) { + $progress = $progress.'%'; + } echo $progress; echo " - "; - - $last_connection_in_lp = Tracking::get_last_connection_time_in_lp($_user['user_id'], $course, $learnpath['id']); + "; + if (!empty($last_connection_in_lp)) { echo api_get_utc_datetime($last_connection_in_lp); } else { echo '-'; } - echo "
'.get_lang('NoLearnpath').'
'.get_lang('Exercices').''.get_lang('Score').''.get_lang('Attempts').''.get_lang('Details').'
'.get_lang('Exercices').''.get_lang('Score').''.get_lang('Attempts').''.get_lang('LatestAttempt').'
'; echo $exercices['title']; echo ''; - if ($essais['essais'] > 0) { + if ($attempts > 0) { echo $percentage_score.'%'; } else { echo '/'; } echo ''; - echo $essais['essais']; + echo $attempts; echo ' '; - if ($essais['essais'] > 0) { - echo ' '.Display::return_icon('quiz.gif', get_lang('Quiz')).' '; + if ($attempts > 0) { + echo ' '.Display::return_icon('quiz.gif', get_lang('Quiz')).' '; } echo '
'.get_lang('NoEx').'
'.get_lang('NoEx').'
debug > 0) { error_log('New LP - In learnpath::get_db_progress()', 0); } - $session_id = api_get_session_id(); + $session_id = intval($session_id); $session_condition = api_get_session_condition($session_id); $table = Database :: get_course_table(TABLE_LP_VIEW, $course_db); $sql = "SELECT * FROM $table WHERE lp_id = $lp_id AND user_id = $user_id $session_condition"; @@ -1848,7 +1848,7 @@ class learnpath { } else { // Get the number of items completed and the number of items total. $tbl = Database :: get_course_table(TABLE_LP_ITEM, $course_db); - $sql = "SELECT count(*) FROM $tbl WHERE lp_id = " . $lp_id . " + $sql = "SELECT count(*) FROM $tbl WHERE lp_id = " . $lp_id . " AND item_type NOT IN('dokeos_chapter','chapter','dir')"; $res = Database::query($sql); $row = Database :: fetch_array($res); @@ -1863,8 +1863,8 @@ class learnpath { INNER JOIN $tbl_item as item ON item.id = item_view.lp_item_id AND item_type NOT IN('dokeos_chapter','chapter','dir') - WHERE lp_view_id = " . $view_id . " - AND status IN ('passed','completed','succeeded','browsed','failed')"; + WHERE lp_view_id = " . $view_id . " + AND status IN ('passed','completed','succeeded','browsed','failed')"; echo '
'; $res = Database::query($sql); $row = Database :: fetch_array($res); $completed = $row[0]; @@ -1951,8 +1951,8 @@ class learnpath { $is_visible = true; $progress = 0; - if (!empty($prerequisite)) { - $progress = self::get_db_progress($prerequisite,$student_id,'%'); + if (!empty($prerequisite)) { + $progress = self::get_db_progress($prerequisite,$student_id,'%', '', false, api_get_session_id()); $progress = intval($progress); if ($progress < 100) { $is_visible = false; diff --git a/main/newscorm/lp_list.php b/main/newscorm/lp_list.php index c98d1046db..7bf205cadc 100755 --- a/main/newscorm/lp_list.php +++ b/main/newscorm/lp_list.php @@ -219,10 +219,10 @@ if (is_array($flat_list)) { $lp_theme_css = $mystyle; - if ($display_progress_bar) { - $dsp_progress = ''.learnpath::get_progress_bar('%',learnpath::get_db_progress($id, api_get_user_id()), '').''; + if ($display_progress_bar) { + $dsp_progress = ''.learnpath::get_progress_bar('%',learnpath::get_db_progress($id, api_get_user_id(), '%', '', false, api_get_session_id())).''; } else { - $dsp_progress = ''.learnpath::get_db_progress($id, api_get_user_id(), 'both').''; + $dsp_progress = ''.learnpath::get_db_progress($id, api_get_user_id(), 'both','',false, api_get_session_id()).''; } if ($is_allowed_to_edit) {