Bläddra i källkod

When showing score stats in the reporting now we take also the scorm + a fix when showing exercise score stats see BT#2752

Julio Montoya 13 år sedan
förälder
incheckning
b6a2bc9f44
4 ändrade filer med 75 tillägg och 57 borttagningar
  1. 67 48
      main/inc/lib/tracking.lib.php
  2. 4 4
      main/mySpace/index.php
  3. 1 3
      main/mySpace/myspace.lib.php
  4. 3 2
      main/tracking/courseLog.php

+ 67 - 48
main/inc/lib/tracking.lib.php

@@ -314,12 +314,13 @@ class Tracking {
     }
 
     /**
-     * This function gets the score average from all tests in a course by student
-     * @param     int|array     Student(s) id
-     * @param     string         Course code
-     * @param    int            Exercise id (optional), filtered by exercise
-     * @param    int            Session id (optional), if param $session_id is null it'll return results including sessions, 0 = session is not filtered
-     * @return     string         value (number %) Which represents a round integer about the score average.
+     * Gets the score average from all tests in a course by student
+     * 
+     * @param    mixed		Student(s) id
+     * @param    string 	Course code
+     * @param    int    	Exercise id (optional), filtered by exercise
+     * @param    int    	Session id (optional), if param $session_id is null it'll return results including sessions, 0 = session is not filtered
+     * @return   string 	value (number %) Which represents a round integer about the score average.
      */
     public static function get_avg_student_exercise_score($student_id, $course_code, $exercise_id = 0, $session_id = null) {
 
@@ -379,17 +380,21 @@ class Tracking {
                         AND orig_lp_id = 0
                         AND exe_cours_id = '$course_code'
                         AND orig_lp_item_id = 0 $condition_session
-                        ORDER BY exe_date DESC";                     
-                        $res = Database::query($sql);
-                        $row = Database::fetch_array($res);
-                        $quiz_avg_score = 0;
-                        if (!empty($row['avg_score'])) {
-                            $quiz_avg_score = round($row['avg_score'],2);
-                        }
-                        if(!empty($row['num_attempts'])) {
-                            $quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2);
-                        }
-                        return $quiz_avg_score;
+                        ORDER BY exe_date DESC";
+                                    
+				$res = Database::query($sql);
+                $row = Database::fetch_array($res);
+                $quiz_avg_score = 0;
+                if (!empty($row['avg_score'])) {
+                	$quiz_avg_score = round($row['avg_score'],2);
+				}
+                if(!empty($row['num_attempts'])) {
+                	$quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2);
+                }         
+                if (is_array($student_id)) {        
+                	$quiz_avg_score = round($quiz_avg_score / count($student_id), 2);
+                } 
+                return $quiz_avg_score;
             }
         }
         return null;
@@ -532,7 +537,9 @@ class Tracking {
          */
         public static function get_avg_student_score($student_id, $course_code, $lp_ids = array(), $session_id = null, $return_array = false, $get_only_latest_attempt_results = false) {
             $debug = false;
-            if ($debug) echo '<h1>get_avg_student_score</h1>';
+            if (empty($lp_ids)) { $debug = false; }
+            
+            if ($debug) echo '<h1>Tracking::get_avg_student_score</h1>';
             // get global tables names
             $course_table               = Database :: get_main_table(TABLE_MAIN_COURSE);
             $course_user_table          = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
@@ -541,7 +548,7 @@ class Tracking {
             $tbl_stats_attempts         = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
 
             $course = CourseManager :: get_course_information($course_code);
-
+            
             if (!empty($course['db_name'])) {
 
                 // get course tables names
@@ -586,7 +593,7 @@ class Tracking {
                     $use_max_score[$row_lp['id']]  = $row_lp['use_max_score'];
                 }     
 
-                if ($debug) var_dump($use_max_score);
+                if ($debug) { echo 'Use max score or not list '; var_dump($use_max_score);}
 
                 // Init local variables that will be used through the calculation                
                 $progress = 0;
@@ -595,8 +602,8 @@ class Tracking {
                 $condition_user1 = "";
                 
                 if (is_array($student_id)) {
-                    array_walk($student_id,'intval');
-                    $condition_user1 =" AND user_id IN (".implode(',',$student_id).") ";
+                    array_walk($student_id, 'intval');
+                    $condition_user1 =" AND user_id IN (".implode(',', $student_id).") ";
                 } else {
                     $condition_user1 =" AND user_id = $student_id ";
                 }
@@ -607,7 +614,7 @@ class Tracking {
                     //@todo problem when a  course have more than 1500 users
                     $sql = "SELECT MAX(view_count) as vc, id, progress, lp_id, user_id  FROM $lp_view_table
                             WHERE lp_id IN (".implode(',',$lp_list).") $condition_user1 AND session_id = $session_id GROUP BY lp_id, user_id";
-                    if ($debug) var_dump($sql);
+                    if ($debug) echo $sql;
                     $rs_last_lp_view_id = Database::query($sql);
                     
                     $global_result = 0;
@@ -624,7 +631,7 @@ class Tracking {
                             $progress   = $row_lp_view['progress'];
                             $lp_id      = $row_lp_view['lp_id'];
                             $user_id    = $row_lp_view['user_id'];
-                            if ($debug) echo '<h2>'.$lp_id.'</h2>';
+                            if ($debug) echo '<h2>LP id '.$lp_id.'</h2>';
                             
                             if ($get_only_latest_attempt_results) {
                             //if (1) {
@@ -670,7 +677,7 @@ class Tracking {
                                 $max_score_item_view    = $row_max_score['max_score_item_view']; //Came from the lp_item_view
                                 $score                  = $row_max_score['score'];
                                 
-                                if ($debug) var_dump($row_max_score['item_type']);
+                                if ($debug) echo '<h3>Item Type: ' .$row_max_score['item_type'].'</h3>';
                                 
                                 if ($row_max_score['item_type'] == 'sco') {
                                     //var_dump($row_max_score);
@@ -687,9 +694,9 @@ class Tracking {
                                     }
                                     //Avoid division by zero errors
                                     if (!empty($max_score)) {
-                                        //$lp_partial_total += $score/$max_score;                                                                                
-                                    }                      
-                                    if ($debug) echo '<b>'.$lp_partial_total.' '.$score.' '.$max_score.'</b><br />';
+                                        $lp_partial_total += $score/$max_score;                                                                                
+                                    }
+                                    if ($debug) echo '<b>$lp_partial_total, $score, $max_score '.$lp_partial_total.' '.$score.' '.$max_score.'</b><br />';
                                 } else {
                                     // Case of a TOOL_QUIZ element
                                     $item_id    = $row_max_score['iid'];
@@ -733,12 +740,11 @@ class Tracking {
                                         if (!empty($max_score)) {
                                             $lp_partial_total            += $score/$max_score;                                            
                                         }
-                                        if ($debug) echo '<b>'.$lp_partial_total.' '.$score.' '.$max_score.'</b><br />';
+                                        if ($debug) echo '$lp_partial_total, $score, $max_score <b>'.$lp_partial_total.' '.$score.' '.$max_score.'</b><br />';
                                     }
                                 }
                                 
-                                if ($row_max_score['item_type'] == 'quiz') {
-                                
+                                if (in_array($row_max_score['item_type'], array('quiz','sco'))) {                                
                                     // Normal way
                                     if ($use_max_score[$lp_id]) {
                                         $count_items++;
@@ -749,26 +755,24 @@ class Tracking {
                                     }
                                     if ($debug) echo '$count_items: '.$count_items;
                                 }
-                                
-
                             } //end for
+                            
                             $score_of_scorm_calculate += $count_items?(($lp_partial_total/$count_items)*100):0;
-                             
+                            
+                            if ($debug) echo '<h3>$count_items '.$count_items.'</h3>';
                             if ($debug) echo '<h3>$score_of_scorm_calculate '.$score_of_scorm_calculate.'</h3>';                            
                            
                             // var_dump($score_of_scorm_calculate);
                             $global_result += $score_of_scorm_calculate;
-                            if ($debug) echo '<h3>$$global_result '.$global_result.'</h3>';
+                            if ($debug) echo '<h3>$global_result '.$global_result.'</h3>';
                         } // end while                        
                     }
 
                     $lp_with_quiz = 0;
-                    $total_lp = 0;
                     if ($debug) var_dump($lp_list);
                     foreach($lp_list as $lp_id) {
-                        //check if LP have a score
-                        // OR item_type = 'sco'
-                        $sql = "SELECT count(id) as count FROM $lp_item_table WHERE item_type = 'quiz' AND lp_id = ".$lp_id;
+                        //Check if LP have a score we asume that all SCO have an score
+                        $sql = "SELECT count(id) as count FROM $lp_item_table WHERE (item_type = 'quiz' OR item_type = 'sco') AND lp_id = ".$lp_id;                        
                         if ($debug) echo $sql;
                         $result_have_quiz = Database::query($sql);
 
@@ -777,16 +781,20 @@ class Tracking {
                             if (is_numeric($row['count']) && $row['count'] != 0) {
                                 $lp_with_quiz ++;
                             }
-                        }
-                        $total_lp ++;
+                        }                        
                     }
-                    if ($debug) var_dump($lp_with_quiz);
+                    
+                    if ($debug) echo '<h3>$lp_with_quiz '.$lp_with_quiz.' </h3>';                    
+                    if ($debug) echo '<h3>Final return</h3>';
                     
                     if ($lp_with_quiz != 0 ) {                        
                         if (!$return_array) {
-                            //var_dump($global_result,$lp_with_quiz );
                             $score_of_scorm_calculate = round(($global_result/$lp_with_quiz),2);
-                            //var_dump($global_result, $lp_with_quiz);
+                            if ($debug) var_dump($score_of_scorm_calculate);
+                            if (empty($lp_ids)) {                            	
+                            	//$score_of_scorm_calculate = round($score_of_scorm_calculate/count($lp_list),2);
+                            	if ($debug) echo '<h2>All lps fix: '.$score_of_scorm_calculate.'</h2>';
+                            }
                             return $score_of_scorm_calculate;
                         } else {
                             if ($debug) var_dump($global_result, $lp_with_quiz);
@@ -2234,9 +2242,10 @@ class Tracking {
                 $session_name = api_get_session_name($session_id);
                 $html .= Display::tag('h2', $course_info['title']);
                 $html .='<table class="data_table" width="100%">';
-                $html .= Display::tag('th', get_lang('Learnpaths'),     array('class'=>'head', 'style'=>'color:#000'));
+                $html .= Display::tag('th', get_lang('Learnpaths'),    array('class'=>'head', 'style'=>'color:#000'));
                 $html .= Display::tag('th', get_lang('Time'),          array('class'=>'head', 'style'=>'color:#000'));
                 $html .= Display::tag('th', get_lang('Progress'),      array('class'=>'head', 'style'=>'color:#000'));
+                $html .= Display::tag('th', get_lang('Score'),         array('class'=>'head', 'style'=>'color:#000'));                
                 $html .= Display::tag('th', get_lang('LastConnexion'), array('class'=>'head', 'style'=>'color:#000'));
                 $html .= '</tr>';
 
@@ -2252,6 +2261,13 @@ class Tracking {
                         $progress               = Tracking::get_avg_student_progress($user_id, $course, array($learnpath['id']), $session_id);
                         $last_connection_in_lp  = Tracking::get_last_connection_time_in_lp($user_id, $course, $learnpath['id'], $session_id);
                         $time_spent_in_lp       = Tracking::get_time_spent_in_lp($user_id, $course, array($learnpath['id']), $session_id);
+						$percentage_score 		= Tracking::get_avg_student_score($user_id, $course, array($learnpath['id']), $session_id);
+						if (is_numeric($percentage_score)) {
+							$percentage_score = $percentage_score.'%';
+						} else {
+							$percentage_score = '0%';
+						}
+												
                         $time_spent_in_lp       = api_time_to_hms($time_spent_in_lp);
 
                         $html .= '<tr class="row_even">';
@@ -2259,8 +2275,10 @@ class Tracking {
                         $html .= Display::tag('td', $time_spent_in_lp, array('align'=>'center'));
                         if (is_numeric($progress)) {
                             $progress = $progress.'%';
-                        }
+                        }                        
                         $html .= Display::tag('td', $progress, array('align'=>'center'));
+                        $html .= Display::tag('td', $percentage_score);
+                                                
                         $last_connection = '-';
                         if (!empty($last_connection_in_lp)) {
                             $last_connection = api_convert_and_format_date($last_connection_in_lp, DATE_TIME_FORMAT_LONG);
@@ -2398,7 +2416,7 @@ class Tracking {
             require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php';
             require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php';
             require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php';
-            //var_dump($names, $my_results, $average);
+
             $cache = new pCache();
 
             // Dataset definition
@@ -3247,7 +3265,8 @@ class TrackingCourseLog {
                     }           
                     $user['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $course_code, $session_id));
 
-                    $avg_student_score      = Tracking::get_avg_student_score($user['user_id'], $course_code, array(), $session_id);                                
+                    $avg_student_score      = Tracking::get_avg_student_score($user['user_id'], $course_code, array(), $session_id);
+                                                                        
                     $avg_student_progress   = Tracking::get_avg_student_progress($user['user_id'], $course_code, array(), $session_id);
                     if (empty($avg_student_progress)) { $avg_student_progress=0; }
                     $user['average_progress'] = $avg_student_progress.'%';

+ 4 - 4
main/mySpace/index.php

@@ -291,10 +291,10 @@ if ($view == 'coach' || $view == 'drh') {
 		foreach ($courses as $course_code) {
 			if (CourseManager :: is_user_subscribed_in_course($student_id, $course_code, true)) {
 				$nb_courses_student++;
-				$nb_posts += Tracking :: count_student_messages($student_id, $course_code);
-				$nb_assignments += Tracking :: count_student_assignments($student_id, $course_code);
-				$avg_student_progress += Tracking :: get_avg_student_progress($student_id, $course_code);
-				$myavg_temp = Tracking :: get_avg_student_score($student_id, $course_code);
+				$nb_posts 			   += Tracking :: count_student_messages($student_id, $course_code);
+				$nb_assignments 	   += Tracking :: count_student_assignments($student_id, $course_code);
+				$avg_student_progress  += Tracking :: get_avg_student_progress($student_id, $course_code);
+				$myavg_temp 			= Tracking :: get_avg_student_score($student_id, $course_code);
 
 				 if (is_numeric($myavg_temp))
 				 	$avg_student_score += $myavg_temp;

+ 1 - 3
main/mySpace/myspace.lib.php

@@ -8,8 +8,6 @@ require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php';
 
 class MySpace {
 
-	/* For licensing terms, see /dokeos_license.txt */
-
 	/**
 	 * This function serves exporting data in CSV format.
 	 * @param array $header			The header labels.
@@ -1277,7 +1275,7 @@ class MySpace {
 				$avg_progress_in_course     = Tracking::get_avg_student_progress($users, $course_code, array(), $session_id);
 				$avg_score_in_course        = Tracking::get_avg_student_score($users, $course_code, array(), $session_id);
 				$avg_score_in_exercise      = Tracking::get_avg_student_exercise_score($users, $course_code, 0, $session_id);
-                
+				                
 				$avg_time_spent_in_course   = Tracking::get_time_spent_on_the_course($users, $course_code, $session_id);
 
 				$avg_progress_in_course = round($avg_progress_in_course / $nb_students_in_course, 2);

+ 3 - 2
main/tracking/courseLog.php

@@ -218,13 +218,14 @@ if ($_GET['studentlist'] == 'false') {
         $csv_content[] = array('', '');
         $csv_content[] = $temp;
     }
-
+    
     if (count($flat_list) > 0) {
         foreach ($flat_list as $lp_id => $lp) {
             $lp_avg_progress = 0;
             foreach ($a_students as $student_id => $student) {
                 // get the progress in learning pathes
                 $lp_avg_progress += Tracking::get_avg_student_progress($student_id, $course_code, array($lp_id), $session_id);
+                
             }
             if ($nbStudents > 0) {
                 $lp_avg_progress = $lp_avg_progress / $nbStudents;
@@ -275,7 +276,7 @@ if ($_GET['studentlist'] == 'false') {
             $quiz_avg_score = 0;
             if ($count_students > 0) {
                 foreach ($student_ids as $student_id) {
-                    $avg_student_score = Tracking::get_avg_student_exercise_score($student_id, $course_code, $quiz['id'], $session_id);
+                    $avg_student_score = Tracking::get_avg_student_exercise_score($student_id, $course_code, $quiz['id'], $session_id);                    
                     $quiz_avg_score += $avg_student_score;
                 }
             }