diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index e76f7f2fe9..2a5f9e98d5 100644 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.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; + } } diff --git a/main/newscorm/learnpath.class.php b/main/newscorm/learnpath.class.php index 27f0f2f70d..8da2c0765d 100644 --- a/main/newscorm/learnpath.class.php +++ b/main/newscorm/learnpath.class.php @@ -7893,6 +7893,15 @@ class learnpath { //$return .= ''; 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 .= ''; $return .= '
'; $return .= '';