diff --git a/main/exercice/exercice.php b/main/exercice/exercice.php index 69c6a33b1a..992f8a9b21 100755 --- a/main/exercice/exercice.php +++ b/main/exercice/exercice.php @@ -398,13 +398,13 @@ if (!empty ($_POST['export_report']) && $_POST['export_report'] == 'export_repor switch ($_POST['export_format']) { case 'xls' : $export = new ExerciseResult(); - $export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields'], $_POST['export_filter']); + $export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields'], $_POST['export_filter'],$_POST['exercise_id']); exit; break; case 'csv' : default : $export = new ExerciseResult(); - $export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields'], $_POST['export_filter']); + $export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields'], $_POST['export_filter'],$_POST['exercise_id']); exit; break; } @@ -413,9 +413,9 @@ if (!empty ($_POST['export_report']) && $_POST['export_report'] == 'export_repor } } -$htmlHeadXtra[] = ''; +$htmlHeadXtra[] = ''; $htmlHeadXtra[] = ''; //jQuery -$htmlHeadXtra[] = ''; //jQuery +$htmlHeadXtra[] = ''; //jQuery if ($origin != 'learnpath') { @@ -615,7 +615,7 @@ if ($is_allowedToEdit && $origin != 'learnpath') { echo '' . Display :: return_icon('hotpotatoes_s.png', get_lang('ImportHotPotatoesQuiz')) . get_lang('ImportHotPotatoesQuiz') . ''; // link to import qti2 ... echo '' . Display :: return_icon('import_db.png', get_lang('ImportQtiQuiz')) . get_lang('ImportQtiQuiz') . ''; - //echo '' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . ''; + echo '' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . ''; } // the actions for the statistics @@ -635,6 +635,8 @@ if ($is_allowedToEdit && $origin != 'learnpath') { echo '
'; } } @@ -932,8 +935,11 @@ if ($show == 'test') { // if tracking is enabled if ($_configuration['tracking_enabled'] && ($show == 'result')) { - $parameters=array('cidReq'=>Security::remove_XSS($_GET['cidReq']),'show'=>Security::remove_XSS($_GET['show']),'filter' => Security::remove_XSS($_GET['filter']),'gradebook' =>Security::remove_XSS($_GET['gradebook'])); + $exercise_id = intval($_GET['exercise_id']); + if (!empty($exercise_id)) + $parameters['exercise_id'] = $exercise_id; + $table = new SortableTable('quiz_results', 'get_count_exam_results', 'get_exam_results_data'); $table->set_additional_parameters($parameters); $secuence = 2; diff --git a/main/exercice/exercise.lib.php b/main/exercice/exercise.lib.php index 3eb9b2c65b..17b33ba7ab 100755 --- a/main/exercice/exercise.lib.php +++ b/main/exercice/exercise.lib.php @@ -790,7 +790,7 @@ function get_count_exam_results($exercise_id = null) { $hpsql="SELECT ".(api_is_western_name_order() ? "firstname as col0, lastname col1" : "lastname as col0, firstname as col1").", tth.exe_name, tth.exe_result , tth.exe_weighting, tth.exe_date FROM $TBL_TRACK_HOTPOTATOES tth, $TBL_USER tu - WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '" . Database :: escape_string($_cid) . " $user_id_and $exercise_where + WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '" . Database :: escape_string($_cid) . "' $user_id_and $exercise_where ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; @@ -871,7 +871,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction) { $hpsql="SELECT ".(api_is_western_name_order() ? "firstname as col0, lastname col1" : "lastname as col0, firstname as col1").", tth.exe_name, tth.exe_result , tth.exe_weighting, tth.exe_date FROM $TBL_TRACK_HOTPOTATOES tth, $TBL_USER tu - WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '" . Database :: escape_string($_cid)." $user_id_and $exercise_where + WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '" . Database :: escape_string($_cid)."' $user_id_and $exercise_where ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; @@ -933,7 +933,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction) { $filter_by_no_revised = true; $from_gradebook = true; } - $sizeof = sizeof($results); + $sizeof = count($results); $user_list_id = array (); $user_last_name = ''; @@ -945,8 +945,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction) { $more_details_list = ''; for ($i = 0; $i < $sizeof; $i++) { $revised = false; - $sql_exe = 'SELECT exe_id FROM ' . $TBL_TRACK_ATTEMPT_RECORDING . ' - WHERE author != ' . "''" . ' AND exe_id = ' . "'" . Database :: escape_string($results[$i]['exid']) . "'" . ' LIMIT 1'; + $sql_exe = 'SELECT exe_id FROM ' . $TBL_TRACK_ATTEMPT_RECORDING . ' WHERE author != ' . "''" . ' AND exe_id = ' . Database :: escape_string($results[$i]['exid']) .' LIMIT 1'; $query = Database::query($sql_exe); if (Database :: num_rows($query) > 0) { @@ -964,7 +963,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction) { } $users_array_id[] = $results[$i]['col2'] . $results[$i]['col0'] . $results[$i]['col1']; } - + $user_first_name = $results[$i]['col0']; $user_last_name = $results[$i]['col1']; $user_list_id[] = $results[$i]['excruid']; @@ -1052,6 +1051,7 @@ function get_exam_results_data($from, $number_of_items, $column, $direction) { } $more_details_list = $html_link; if ($is_allowedToEdit || $is_tutor) { + $list_info [] = array($user_first_name,$user_last_name,$quiz_name_list,$duration_list,$date_list,$result_list,$more_details_list); } else { $list_info [] = array($quiz_name_list,$duration_list,$date_list,$result_list,$more_details_list); @@ -1059,6 +1059,8 @@ function get_exam_results_data($from, $number_of_items, $column, $direction) { } } } + + // Print HotPotatoes test results. if (is_array($hpresults)) { $has_test_results = true; @@ -1094,7 +1096,7 @@ function show_score($score, $weight, $show_porcentage = true) { $max_note = api_get_setting('exercise_max_score'); $min_note = api_get_setting('exercise_min_score'); if ($max_note != '' && $min_note != '') { - if (!empty($weight)) { + if (!empty($weight) && intval($weight) != 0) { $score = $min_note + ($max_note - $min_note) * $score /$weight; } else { $score = $min_note; diff --git a/main/exercice/exercise_result.class.php b/main/exercice/exercise_result.class.php index 4021517fb1..bf94cd897f 100755 --- a/main/exercice/exercise_result.class.php +++ b/main/exercice/exercise_result.class.php @@ -90,7 +90,7 @@ class ExerciseResult * @param string The document path (for HotPotatoes retrieval) * @param integer User ID. Optional. If no user ID is provided, we take all the results. Defauts to null */ - function _getExercisesReporting($document_path,$user_id=null,$filter=0) { + function _getExercisesReporting($document_path,$user_id=null,$filter=0, $exercise_id = 0) { $return = array(); $TBL_EXERCISES = Database::get_course_table(TABLE_QUIZ_TEST); $TBL_EXERCISE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); @@ -107,6 +107,12 @@ class ExerciseResult $cid = api_get_course_id(); $user_id = intval($user_id); $session_id_and = ' AND te.session_id = ' . api_get_session_id() . ' '; + $exercise_id = intval($exercise_id); + + if (!empty($exercise_id)) { + $session_id_and .= " AND exe_exo_id = $exercise_id "; + } + if (empty($user_id)) { $sql="SELECT ".(api_is_western_name_order() ? "firstname as userpart1, lastname userpart2" : "lastname as userpart1, firstname as userpart2").", ce.title as extitle, te.exe_result as exresult , te.exe_weighting as exweight, te.exe_date as exdate, te.exe_id as exid, email as exemail, te.start_date as exstart, steps_counter as exstep, exe_user_id as excruid,te.exe_duration as exduration @@ -115,7 +121,7 @@ class ExerciseResult $hpsql="SELECT ".(api_is_western_name_order() ? "firstname as userpart1, lastname userpart2" : "lastname as userpart1, firstname as userpart2").", tth.exe_name, tth.exe_result , tth.exe_weighting, tth.exe_date FROM $TBL_TRACK_HOTPOTATOES tth, $TBL_USER tu - WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '" . Database :: escape_string($cid) . " $user_id_and ' + WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '" . Database :: escape_string($cid) . "' ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; @@ -234,10 +240,10 @@ class ExerciseResult * @param boolean Whether to include user fields or not * @return boolean False on error */ - public function exportCompleteReportCSV($document_path='',$user_id=null, $export_user_fields = array(), $export_filter = 0) + public function exportCompleteReportCSV($document_path='',$user_id=null, $export_user_fields = array(), $export_filter = 0, $exercise_id = 0) { global $charset; - $this->_getExercisesReporting($document_path,$user_id,$export_filter); + $this->_getExercisesReporting($document_path,$user_id,$export_filter, $exercise_id); $filename = 'exercise_results_'.date('YmdGis').'.csv'; if(!empty($user_id)) { $filename = 'exercise_results_user_'.$user_id.'_'.date('YmdGis').'.csv'; @@ -314,9 +320,9 @@ class ExerciseResult * Exports the complete report as an XLS file * @return boolean False on error */ - public function exportCompleteReportXLS($document_path='',$user_id=null, $export_user_fields=array(), $export_filter = 0) { + public function exportCompleteReportXLS($document_path='',$user_id=null, $export_user_fields=array(), $export_filter = 0, $exercise_id=0) { global $charset; - $this->_getExercisesReporting($document_path,$user_id,$export_filter); + $this->_getExercisesReporting($document_path,$user_id,$export_filter, $exercise_id); $filename = 'exercise_results_'.date('YmdGis').'.xls'; if(!empty($user_id)) {