Random questions quizzes in learnpath prerequisites show with max score - ref #6624

1.9.x
Hubert Borderiou 11 years ago
parent 6cfeb02188
commit 6eea2df50f
  1. 75
      main/exercice/exercise.class.php
  2. 9
      main/newscorm/learnpath.class.php

@ -376,7 +376,7 @@ class Exercise {
/**
* returns random answers status.
*
* @author - Juan Carlos Ra�a
* @author - Juan Carlos Rana
*/
function selectRandomAnswers() {
return $this->random_answers;
@ -634,7 +634,7 @@ class Exercise {
/**
* sets to 0 if answers are not selected randomly
* if answers are selected randomly
* @author - Juan Carlos Ra�a
* @author - Juan Carlos Rana
* @param - integer $random_answers - random answers
*/
function updateRandomAnswers($random_answers) {
@ -1264,6 +1264,7 @@ class Exercise {
$this->random_answers=0;
}
$this->save($type);
}
function search_engine_save() {
@ -1540,7 +1541,7 @@ class Exercise {
$lp_id = 0;
}
if (empty($lp_item_id)) {
$lp_item_id = 0;
$lp_item_id = 0;
}
if (empty($lp_item_view_id)) {
$lp_item_view_id = 0;
@ -3681,16 +3682,16 @@ class Exercise {
$questionList = array();
$tabCategoryQuestions = Testcategory::getQuestionsByCat($this->id);
$isRandomByCategory = $this->selectRandomByCat();
// on tri les categories en fonction du terme entre [] en tête de la description de la catégorie
// on tri les categories en fonction du terme entre [] en tete de la description de la categorie
/*
* ex de catégories :
* [biologie] Maîtriser les mécanismes de base de la génétique
* [biologie] Relier les moyens de défenses et les agents infectieux
* [biologie] Savoir où est produite l'énergie dans les cellules et sous quelle forme
* [chimie] Classer les molécules suivant leur pouvoir oxydant ou réducteur
* [chimie] Connaître la définition de la théorie acide/base selon Brönsted
* [chimie] Connaître les charges des particules
* On veut dans l'ordre des groupes définis par le terme entre crochet au début du titre de la catégorie
* [biologie] Maitriser les m袡nismes de base de la g诩tique
* [biologie] Relier les moyens de depenses et les agents infectieux
* [biologie] Savoir ou est produite l'enrgie dans les cellules et sous quelle forme
* [chimie] Classer les molles suivant leur pouvoir oxydant ou reacteur
* [chimie] Connaître la denition de la theoie acide/base selon Brönsted
* [chimie] Connaître les charges des particules
* On veut dans l'ordre des groupes definis par le terme entre crochet au debut du titre de la categorie
*/
// If test option is Grouped By Categories
if ($isRandomByCategory == 2) {
@ -3897,4 +3898,56 @@ class Exercise {
}
return $list;
}
/**
* Calculate the max_score of the quiz, depending of question inside, and quiz advanced option
*/
public function get_max_score() {
$out_max_score = 0;
$tab_question_list = $this->selectQuestionList(true); // list of question's id !!! the array key start at 1 !!!
// test is randomQuestions - see field random of test
if ($this->random > 0 && $this->randomByCat == 0) {
$nb_random_questions = $this->random;
$tab_questions_score = array();
for ($i=1; $i <= count($tab_question_list); $i++) {
$tmpobj_question = Question::read($tab_question_list[$i]);
$tab_questions_score[] = $tmpobj_question->weighting;
}
rsort($tab_questions_score);
// add the first $nb_random_questions value of score array to get max_score
for ($i=0; $i < min($nb_random_questions, count($tab_questions_score)); $i++) {
$out_max_score += $tab_questions_score[$i];
}
}
// test is random by category
// get the $nb_random_questions best score question of each category
else if ($this->random > 0 && $this->randomByCat > 0) {
$nb_random_questions = $this->random;
$tab_categories_scores = array();
for ($i=1; $i <= count($tab_question_list); $i++) {
$question_category_id = Testcategory::getCategoryForQuestion($tab_question_list[$i]);
if (!is_array($tab_categories_scores[$question_category_id])) {
$tab_categories_scores[$question_category_id] = array();
}
$tmpobj_question = Question::read($tab_question_list[$i]);
$tab_categories_scores[$question_category_id][] = $tmpobj_question->weighting;
}
// here we've got an array with first key, the category_id, second key, score of question for this cat
while (list($key, $tab_scores) = each($tab_categories_scores)) {
rsort($tab_scores);
for ($i=0; $i < min($nb_random_questions, count($tab_scores)); $i++) {
$out_max_score += $tab_scores[$i];
}
}
}
// standart test, just add each question score
else {
for ($i=1; $i <= count($tab_question_list); $i++) {
$tmpobj_question = Question::read($tab_question_list[$i]);
$out_max_score += $tmpobj_question->weighting;
}
}
return $out_max_score;
}
}

@ -7893,6 +7893,15 @@ class learnpath {
//$return .= '<td class="radio"' . (($arrLP[$i]['item_type'] != TOOL_HOTPOTATOES) ? ' colspan="3"' : '') . ' />';
if ($arrLP[$i]['item_type'] == TOOL_QUIZ) {
// lets update max_score Quiz information depending of the Quiz Advanced properties
require_once api_get_path(LIBRARY_PATH)."lp_item.lib.php";
$tmp_obj_lp_item = new LpItem($course_id, $arrLP[$i]['id']);
$tmp_obj_exercice = new Exercise();
$tmp_obj_exercice->read($tmp_obj_lp_item->path);
$tmp_obj_lp_item->max_score = $tmp_obj_exercice->get_max_score();
$tmp_obj_lp_item->update_in_bdd();
$arrLP[$i]['max_score'] = $tmp_obj_lp_item->max_score;
$return .= '<td class="exercise" style="border:1px solid #ccc;">';
$return .= '<center><input size="4" maxlength="3" name="min_' . $arrLP[$i]['id'] . '" type="text" value="' . (($arrLP[$i]['id'] == $preq_id) ? $preq_mastery : 0) . '" /></center>';
$return .= '</td>';

Loading…
Cancel
Save