Fixing exercise/stats.php

skala
Julio Montoya 12 years ago
parent bd04d0ff83
commit aa2d77466d
  1. 15
      main/exercice/exercise.class.php
  2. 62
      main/exercice/stats.php

@ -6349,4 +6349,19 @@ class Exercise
} }
public function getQuestionOrderedListByName()
{
$TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
// Getting question list from the order (question list drag n drop interface ).
$sql = "SELECT e.question_id
FROM $TBL_EXERCICE_QUESTION e INNER JOIN $TBL_QUESTIONS q
ON (e.question_id= q.iid)
WHERE e.c_id = {$this->course_id} AND e.exercice_id = '".Database::escape_string($this->id)."'
ORDER BY q.question";
$result = Database::query($sql);
return $result->fetchAll();
}
} }

@ -20,13 +20,13 @@ if (!$result) {
$session_id = api_get_session_id(); $session_id = api_get_session_id();
if (empty($session_id)) { if (empty($session_id)) {
$students = CourseManager :: get_student_list_from_course_code(api_get_course_int_id(), false); $students = CourseManager::get_student_list_from_course_code(api_get_course_int_id(), false);
} else { } else {
$students = CourseManager :: get_student_list_from_course_code(api_get_course_int_id(), true, $session_id); $students = CourseManager::get_student_list_from_course_code(api_get_course_int_id(), true, $session_id);
} }
$count_students = count($students); $count_students = count($students);
$question_list = $objExercise->getQuestionList(); $question_list = $objExercise->getQuestionOrderedListByName();
$data = array(); $data = array();
//Question title # of students who tool it Lowest score Average Highest score Maximum score //Question title # of students who tool it Lowest score Average Highest score Maximum score
@ -42,20 +42,20 @@ $headers = array(
); );
if (!empty($question_list)) { if (!empty($question_list)) {
foreach ($question_list as $question_id) { foreach ($question_list as $row) {
$question_id = $row['question_id'];
$question_obj = Question::read($question_id); $question_obj = Question::read($question_id);
$exercise_stats = ExerciseLib::get_student_stats_by_question($question_id, $exercise_id, api_get_course_int_id(), api_get_session_id()); $exercise_stats = ExerciseLib::get_student_stats_by_question($question_id, $exercise_id, api_get_course_int_id(), api_get_session_id());
$count_users = ExerciseLib::get_number_students_question_with_answer_count($question_id, $exercise_id, api_get_course_int_id(), api_get_session_id()); $count_users = ExerciseLib::get_number_students_question_with_answer_count($question_id, $exercise_id, api_get_course_int_id(), api_get_session_id());
$data[$question_id]['name'] = Text::cut($question_obj->question, 100); $data[$question_id]['name'] = Text::cut($question_obj->question, 100);
$data[$question_id]['type'] = $question_obj->get_question_type_name(); $data[$question_id]['type'] = $question_obj->get_question_type_name();
//$data[$question_id]['students_who_try_exercise'] = $exercise_stats['users']; $percentage = 0;
$percentange = 0;
if ($count_students) { if ($count_students) {
$percentange = $count_users/$count_students*100; $percentage = $count_users/$count_students*100;
} }
$data[$question_id]['students_who_try_exercise'] = Display::bar_progress($percentange, false, $count_users .' / '.$count_students); $data[$question_id]['students_who_try_exercise'] = Display::bar_progress($percentage, false, $count_users .' / '.$count_students);
$data[$question_id]['lowest_score'] = round($exercise_stats['min'], 2); $data[$question_id]['lowest_score'] = round($exercise_stats['min'], 2);
$data[$question_id]['average_score'] = round($exercise_stats['average'], 2); $data[$question_id]['average_score'] = round($exercise_stats['average'], 2);
@ -85,7 +85,7 @@ foreach ($data as $row_table) {
} }
$content = $table->toHtml(); $content = $table->toHtml();
//Format B // Format B.
$headers = array( $headers = array(
get_lang('Question'), get_lang('Question'),
@ -98,13 +98,15 @@ $data = array();
if (!empty($question_list)) { if (!empty($question_list)) {
$id = 0; $id = 0;
foreach ($question_list as $question_id) { foreach ($question_list as $row) {
$question_id = $row['question_id'];
$question_obj = Question::read($question_id); $question_obj = Question::read($question_id);
$exercise_stats = ExerciseLib::get_student_stats_by_question($question_id, $exercise_id, api_get_course_int_id(), api_get_session_id()); $exercise_stats = ExerciseLib::get_student_stats_by_question($question_id, $exercise_id, api_get_course_int_id(), api_get_session_id());
$answer = new Answer($question_id); $answer = new Answer($question_id);
$answer->read(); $answer->read();
$mainCounter = 1;
$counter = 1;
foreach ($answer->answer as $answer_id => $answer_item) { foreach ($answer->answer as $answer_id => $answer_item) {
$answer_info = $answer->selectAnswer($answer_id); $answer_info = $answer->selectAnswer($answer_id);
$is_correct = $answer->isCorrect($answer_id); $is_correct = $answer->isCorrect($answer_id);
@ -133,11 +135,11 @@ if (!empty($question_list)) {
$count = ExerciseLib::get_number_students_answer_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id(), FILL_IN_BLANKS, $answer_info_db, $answer_item); $count = ExerciseLib::get_number_students_answer_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id(), FILL_IN_BLANKS, $answer_info_db, $answer_item);
$percentange = 0; $percentage = 0;
if (!empty($count_students)) { if (!empty($count_students)) {
$percentange = $count/$count_students*100; $percentage = $count/$count_students*100;
} }
$data[$id]['attempts'] = Display::bar_progress($percentange, false, $count .' / '.$count_students); $data[$id]['attempts'] = Display::bar_progress($percentage, false, $count .' / '.$count_students);
$id++; $id++;
$counter++; $counter++;
@ -145,7 +147,7 @@ if (!empty($question_list)) {
break; break;
case MATCHING: case MATCHING:
if ($is_correct == 0) { if ($is_correct == 0) {
if ($answer_id == 1) { if ($mainCounter == 1) {
$data[$id]['name'] = Text::cut($question_obj->question, 100); $data[$id]['name'] = Text::cut($question_obj->question, 100);
} else { } else {
$data[$id]['name'] = '-'; $data[$id]['name'] = '-';
@ -163,15 +165,15 @@ if (!empty($question_list)) {
$data[$id]['correct'] = $answer_info; $data[$id]['correct'] = $answer_info;
$count = ExerciseLib::get_number_students_answer_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id(), MATCHING); $count = ExerciseLib::get_number_students_answer_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id(), MATCHING);
$percentange = 0; $percentage = 0;
if (!empty($count_students)) { if (!empty($count_students)) {
$percentange = $count/$count_students*100; $percentage = $count/$count_students*100;
} }
$data[$id]['attempts'] = Display::bar_progress($percentange, false, $count .' / '.$count_students); $data[$id]['attempts'] = Display::bar_progress($percentage, false, $count .' / '.$count_students);
} }
break; break;
case HOT_SPOT: case HOT_SPOT:
if ($answer_id == 1) { if ($mainCounter == 1) {
$data[$id]['name'] = Text::cut($question_obj->question, 100); $data[$id]['name'] = Text::cut($question_obj->question, 100);
} else { } else {
$data[$id]['name'] = '-'; $data[$id]['name'] = '-';
@ -180,14 +182,14 @@ if (!empty($question_list)) {
$data[$id]['correct'] = '-'; $data[$id]['correct'] = '-';
$count = ExerciseLib::get_number_students_answer_hotspot_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id()); $count = ExerciseLib::get_number_students_answer_hotspot_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id());
$percentange = 0; $percentage = 0;
if (!empty($count_students)) { if (!empty($count_students)) {
$percentange = $count/$count_students*100; $percentage = $count/$count_students*100;
} }
$data[$id]['attempts'] = Display::bar_progress($percentange, false, $count .' / '.$count_students); $data[$id]['attempts'] = Display::bar_progress($percentage, false, $count .' / '.$count_students);
break; break;
default: default:
if ($answer_id == 1) { if ($mainCounter == 1) {
$data[$id]['name'] = Text::cut($question_obj->question, 100); $data[$id]['name'] = Text::cut($question_obj->question, 100);
} else { } else {
$data[$id]['name'] = '-'; $data[$id]['name'] = '-';
@ -196,17 +198,22 @@ if (!empty($question_list)) {
$data[$id]['correct'] = $correct_answer; $data[$id]['correct'] = $correct_answer;
$count = ExerciseLib::get_number_students_answer_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id()); $count = ExerciseLib::get_number_students_answer_count($answer_id, $question_id, $exercise_id, api_get_course_int_id(), api_get_session_id());
$percentange = 0; $percentage = 0;
if (!empty($count_students)) { if (!empty($count_students)) {
$percentange = $count/$count_students*100; $percentage = $count/$count_students*100;
} }
$data[$id]['attempts'] = Display::bar_progress($percentange, false, $count .' / '.$count_students); $data[$id]['attempts'] = Display::bar_progress($percentage, false, $count .' / '.$count_students);
break;
} }
$id++; $id++;
$mainCounter++;
} }
} }
} }
//Format A table //Format A table
$table = new HTML_Table(array('class' => 'data_table')); $table = new HTML_Table(array('class' => 'data_table'));
$row = 0; $row = 0;
@ -228,9 +235,8 @@ foreach ($data as $row_table) {
} }
$content .= $table->toHtml(); $content .= $table->toHtml();
$interbreadcrumb[] = array ("url" => "exercice.php?gradebook=$gradebook", "name" => get_lang('Exercices')); $interbreadcrumb[] = array ("url" => "exercice.php?gradebook=$gradebook", "name" => get_lang('Exercices'));
$interbreadcrumb[] = array ("url" => "admin.php?exerciseId=$exercise_id","name" => $objExercise->name); $interbreadcrumb[] = array ("url" => "admin.php?exerciseId=$exercise_id", "name" => $objExercise->name);
$app['title'] = get_lang('ReportByQuestion'); $app['title'] = get_lang('ReportByQuestion');
$tpl = $app['template']; $tpl = $app['template'];

Loading…
Cancel
Save