Julio Montoya 13 years ago
parent
commit
a7a7c25b92

+ 3 - 4
main/exercice/exercise.lib.php

@@ -1258,8 +1258,8 @@ function get_all_exercises($course_info = null, $session_id = 0, $check_dates =
 	$TBL_EXERCICES              = Database :: get_course_table(TABLE_QUIZ_TEST);
 	$course_id = api_get_course_int_id();
 	
-    if (!empty($course_info) && !empty($course_info['id'])) {
-    	$course_id = $course_info['id'];
+    if (!empty($course_info) && !empty($course_info['real_id'])) {
+    	$course_id = $course_info['real_id'];
     }    
     
     if ($session_id == -1) {
@@ -1270,8 +1270,7 @@ function get_all_exercises($course_info = null, $session_id = 0, $check_dates =
     } else {
         //All exercises
     	$conditions = array('where'=>array('active = ? AND  (session_id = 0 OR session_id = ? ) AND c_id = ? ' => array('1', $session_id, $course_id)), 'order'=>'title');
-    }
-    //var_dump($conditions);
+    }    
     return Database::select('*',$TBL_EXERCICES, $conditions);
 }
 

+ 76 - 30
main/inc/lib/tracking.lib.php

@@ -241,6 +241,7 @@ class Tracking {
 				//345600 = 7 days in seconds
 				if ($currentTimestamp - $timestamp > 604800) {
 					if ($convert_date) {
+					    //@todo this is so bad ...
 						return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . (api_is_allowed_to_edit()?' <a href="'.api_get_path(REL_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'" title="'.get_lang('RemindInactiveUser').'"><img align="middle" src="'.api_get_path(WEB_IMG_PATH).'messagebox_warning.gif" /></a>':'').'</span>';
 					} else {
 						return $last_login_date;
@@ -412,7 +413,7 @@ class Tracking {
 
 	/**
 	 * Get count student's exercise attempts
-	 * @param     int     Student id
+	 * @param    int     Student id
 	 * @param    string    Course code
 	 * @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.
@@ -420,36 +421,70 @@ class Tracking {
 	 * @return  int     count of attempts
 	 */
 	public function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0) {
-
 		$course_code = Database::escape_string($course_code);
-		$course_info = CourseManager :: get_course_information($course_code);
 		$student_id  = intval($student_id);
 		$exercise_id = intval($exercise_id);
-		$session_id = intval($session_id);
+		$session_id  = intval($session_id);
 		$count_attempts = 0;
 
 		if (!empty($lp_id)) $lp_id = intval($lp_id);
 		if (!empty($lp_item_id)) $lp_id = intval($lp_item_id);
 
-		if (!empty($course_info['db_name'])) {
-			$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES, $course_info['db_name']);
-
-			$sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex
-                    WHERE  ex.exe_cours_id = '$course_code'
-                    AND ex.exe_exo_id = $exercise_id
-                    AND orig_lp_id = $lp_id
-                    AND orig_lp_item_id = $lp_item_id
-                    AND exe_user_id= $student_id 
-                    AND session_id = $session_id ";
-			
-			$rs = Database::query($sql);
-			$row = Database::fetch_row($rs);
-			$count_attempts = $row[0];
-		}
+		
+		$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
+
+		$sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex
+                WHERE  ex.exe_cours_id = '$course_code'
+                AND ex.exe_exo_id = $exercise_id
+                AND orig_lp_id = $lp_id
+                AND orig_lp_item_id = $lp_item_id
+                AND exe_user_id= $student_id 
+                AND session_id = $session_id ";
+		
+		$rs = Database::query($sql);
+		$row = Database::fetch_row($rs);
+		$count_attempts = $row[0];
+		
 		return $count_attempts;
-
 	}
 
+    /**
+     * Get count student's exercise progress
+     * @param    int       user id
+     * @param    string    course code
+     * @param    int       session id
+    */
+   
+    function get_exercise_student_progress($exercise_list, $user_id, $course_code, $session_id) {
+        $course_code    = Database::escape_string($course_code);
+        $user_id        = intval($user_id);
+        $session_id     = intval($session_id);  
+          
+        if (empty($exercise_list)) {
+            return '0%';
+        }    
+        $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
+        $exercise_list = array_keys($exercise_list);
+        
+        array_map('intval', $exercise_list);
+                
+        $exercise_list = implode("' ,'", $exercise_list);
+        
+        $sql = "SELECT COUNT(ex.exe_exo_id) FROM $tbl_stats_exercices AS ex
+                    WHERE   ex.exe_cours_id = '$course_code' AND
+                            ex.session_id  = $session_id AND
+                            ex.exe_user_id = $user_id AND ex.exe_exo_id IN ('$exercise_list') ";
+                                                                
+        $rs = Database::query($sql);
+        $count = 0;
+        if ($rs) {
+            $row = Database::fetch_row($rs);
+            $count = $row[0];
+        }        
+        $count = ($count != 0 ) ? 100*round(intval($count)/count($exercise_list), 2) .'%' : '0%';
+        return $count;
+    }
+
 	/**
 	 * Returns the average student progress in the learning paths of the given
 	 * course.
@@ -3538,15 +3573,17 @@ class TrackingCourseLog {
 		$sql .= " ORDER BY col$column $direction ";
 		$sql .= " LIMIT $from,$number_of_items";
 
-		$res = Database::query($sql);
-		$users = array ();
-		$t = time();
-		$row = array();
+		$res      = Database::query($sql);
+		$users    = array ();
+		$t        = time();
+		$row      = array();
         
         $course_info = api_get_course_info($course_code);
         
         $total_surveys = 0;
         
+        $total_exercises = get_all_exercises($course_info, $session_id);
+                
         if (empty($session_id)) {
             $survey_user_list = array();
             $survey_list = survey_manager::get_surveys($course_code, $session_id);
@@ -3563,7 +3600,6 @@ class TrackingCourseLog {
         }
         
 		while ($user = Database::fetch_array($res, 'ASSOC')) {
-			//$user['user_id'] = $user['user_id']
 			$user['official_code']  = $user['col0'];
 			if ($is_western_name_order) {
 				$user['lastname']       = $user['col2'];
@@ -3581,12 +3617,18 @@ class TrackingCourseLog {
 				$avg_student_progress=0;
 			}
 			$user['average_progress']   = $avg_student_progress.'%';
+            
+            $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $course_code, $session_id);
+            
+            $user['exercise_progress']  = $total_user_exercise; 
+            
 
 			if (is_numeric($avg_student_score)) {
 				$user['student_score']  = $avg_student_score.'%';
 			} else {
 				$user['student_score']  = $avg_student_score;
 			}
+            
 			$user['count_assignments']  = Tracking::count_student_assignments($user['user_id'], $course_code, $session_id);
 			$user['count_messages']     = Tracking::count_student_messages($user['user_id'], $course_code, $session_id);
 			$user['first_connection']   = Tracking::get_first_connection_date_on_the_course($user['user_id'], $course_code, $session_id);
@@ -3622,7 +3664,11 @@ class TrackingCourseLog {
                 $user_row[]= $user['lastname'];
             }
             $user_row[]= $user['time'];
+            
             $user_row[]= $user['average_progress'];
+            
+            $user_row[]= $user['exercise_progress'];
+            
             $user_row[]= $user['student_score'];
             $user_row[]= $user['count_assignments'];
             $user_row[]= $user['count_messages'];
@@ -3633,21 +3679,21 @@ class TrackingCourseLog {
             
             $user_row[]= $user['first_connection'];
             $user_row[]= $user['last_connection'];
-            $user_row[]= $user['additional'];
-            
+            $user_row[]= $user['additional'];            
           
             $user_row[]= $user['link'];
      
             $users[] = $user_row;
-            
+         
 			if ($export_csv) {
 			    if (empty($session_id)) {
-				    unset($user_row[12]);
 				    unset($user_row[13]);
+				    unset($user_row[14]);
                 } else {
-                    unset($user_row[11]);
                     unset($user_row[12]);
+                    unset($user_row[13]);
                 }
+            
 				$csv_content[] = $user_row;
 			}
 		}

+ 1 - 1
main/mySpace/myStudents.php

@@ -868,7 +868,7 @@ if (empty($_GET['details'])) {
 			while ($exercices = Database :: fetch_array($result_exercices)) {					
 				$exercise_id = intval($exercices['id']);
 				
-				$count_attempts   = Tracking::count_student_exercise_attempts($student_id, $course_code, $exercise_id, 0, 0, $session_id);				
+				$count_attempts   = Tracking::count_student_exercise_attempts($student_id, $course_code, $exercise_id, 0, 0, $session_id);                				
 				$score_percentage = Tracking::get_avg_student_exercise_score($student_id, $course_code, $exercise_id, $session_id);                
 
 				$csv_content[] = array (

+ 14 - 13
main/tracking/courseLog.php

@@ -10,10 +10,7 @@
 $pathopen = isset($_REQUEST['pathopen']) ? $_REQUEST['pathopen'] : null;
 
 // Language files that need to be included.
-$language_file[] = 'admin';
-$language_file[] = 'tracking';
-$language_file[] = 'scorm';
-//$cidReset = true; //TODO: Delete this line bug 457.
+$language_file = array('admin', 'tracking','scorm');
 
 // Including the global initialization file.
 require_once '../inc/global.inc.php';
@@ -49,6 +46,7 @@ require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php';
 require_once api_get_path(LIBRARY_PATH).'statsUtils.lib.inc.php';
 require_once api_get_path(SYS_CODE_PATH).'resourcelinker/resourcelinker.inc.php';
 require_once api_get_path(SYS_CODE_PATH).'survey/survey.lib.php';
+require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php';
 
 
 // Starting the output buffering when we are exporting the information.
@@ -522,21 +520,23 @@ if ($_GET['studentlist'] == 'false') {
         }
         $table->set_header(3, get_lang('TrainingTime'), false);
         $table->set_header(4, get_lang('CourseProgress').'&nbsp;'.Display::return_icon('info3.gif', get_lang('ScormAndLPProgressTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), false, array('style' => 'width:110px;'));
-        $table->set_header(5, get_lang('Score').'&nbsp;'.Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), false, array('style' => 'width:110px;'));
-        $table->set_header(6, get_lang('Student_publication'), false);
-        $table->set_header(7, get_lang('Messages'), false);
+        
+        $table->set_header(5, get_lang('ExerciseProgress'));
+        $table->set_header(6, get_lang('Score').'&nbsp;'.Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), false, array('style' => 'width:110px;'));
+        $table->set_header(7, get_lang('Student_publication'), false);
+        $table->set_header(8, get_lang('Messages'), false);
         
         if (empty($session_id)) {
-            $table->set_header(8, get_lang('Survey'), false);
+            $table->set_header(9, get_lang('Survey'), false);
+            $table->set_header(10, get_lang('FirstLogin'), false, 'align="center"');
+            $table->set_header(11, get_lang('LatestLogin'), false, 'align="center"');
+            $table->set_header(12, get_lang('AdditionalProfileField'), false);
+            $table->set_header(13, get_lang('Details'), false);
+        } else {
             $table->set_header(9, get_lang('FirstLogin'), false, 'align="center"');
             $table->set_header(10, get_lang('LatestLogin'), false, 'align="center"');
             $table->set_header(11, get_lang('AdditionalProfileField'), false);
             $table->set_header(12, get_lang('Details'), false);
-        } else {
-            $table->set_header(8, get_lang('FirstLogin'), false, 'align="center"');
-            $table->set_header(9, get_lang('LatestLogin'), false, 'align="center"');
-            $table->set_header(10, get_lang('AdditionalProfileField'), false);
-            $table->set_header(11, get_lang('Details'), false);
          }
 
         $table->display();
@@ -559,6 +559,7 @@ if ($_GET['studentlist'] == 'false') {
         }
         $csv_headers[] = get_lang('TrainingTime', '');
         $csv_headers[] = get_lang('CourseProgress', '');
+        $csv_headers[] = get_lang('ExerciseProgress','');
         $csv_headers[] = get_lang('Score', '');
         $csv_headers[] = get_lang('Student_publication', '');
         $csv_headers[] = get_lang('Messages', '');