From 5f3acd1cbdb925c4e38a04b3908aaa75de5da46c Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 28 Mar 2019 10:25:01 -0500 Subject: [PATCH] QuestionOptionsEvaluation: Fix questions options score according formula - refs BT#15265 --- .../QuestionOptionsEvaluationPlugin.php | 15 ++++++++-- .../questionoptionsevaluation/evaluation.php | 29 ++++--------------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/plugin/questionoptionsevaluation/QuestionOptionsEvaluationPlugin.php b/plugin/questionoptionsevaluation/QuestionOptionsEvaluationPlugin.php index c93fdac6ec..814e0c75ce 100644 --- a/plugin/questionoptionsevaluation/QuestionOptionsEvaluationPlugin.php +++ b/plugin/questionoptionsevaluation/QuestionOptionsEvaluationPlugin.php @@ -87,9 +87,10 @@ class QuestionOptionsEvaluationPlugin extends Plugin } /** + * @param int $formula * @param Exercise $exercise */ - public function recalculateQuestionScore(Exercise $exercise) + private function recalculateQuestionScore($formula, Exercise $exercise) { foreach ($exercise->questionList as $questionId) { $question = Question::read($questionId); @@ -103,7 +104,15 @@ class QuestionOptionsEvaluationPlugin extends Plugin $weighting = []; foreach ($questionAnswers->correct as $i => $correct) { - $weighting[$i] = 1 == $correct ? 1 / $counts[1] : -1 / $counts[0]; + if ($question->selectType() == MULTIPLE_ANSWER || 0 === $formula) { + $weighting[$i] = 1 == $correct ? 1 / $counts[1] : -1 / $counts[0]; + + continue; + } + + if ($question->selectType() == UNIQUE_ANSWER) { + $weighting[$i] = 1 == $correct ? 1 : -1 / $formula; + } } $questionAnswers->new_nbrAnswers = $questionAnswers->nbrAnswers; @@ -135,6 +144,8 @@ class QuestionOptionsEvaluationPlugin extends Plugin */ public function saveFormulaForExercise($formula, Exercise $exercise) { + $this->recalculateQuestionScore($formula, $exercise); + $extraFieldValue = new ExtraFieldValue('quiz'); $extraFieldValue->save( [ diff --git a/plugin/questionoptionsevaluation/evaluation.php b/plugin/questionoptionsevaluation/evaluation.php index ea6da118d6..4c68f63634 100644 --- a/plugin/questionoptionsevaluation/evaluation.php +++ b/plugin/questionoptionsevaluation/evaluation.php @@ -30,33 +30,17 @@ if ($plugin->get('enable') !== 'true') { exit; } -$formRecalculate = new FormValidator('recalculate'); -$formRecalculate->addHidden('exercise', $exerciseId); -$formRecalculate->addButtonUpdate($plugin->get_lang('RecalculateQuestionScores')); - -if ($formRecalculate->validate()) { - $plugin->recalculateQuestionScore($exercise); - - Display::addFlash( - Display::return_message($plugin->get_lang('QuestionsEvaluated'), 'success') - ); - - header( - 'Location: '.api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'.api_get_cidreq()."&exerciseId=$exerciseId" - ); - exit; -} - $formEvaluation = new FormValidator('evaluation'); $formEvaluation ->addRadio( 'formula', $plugin->get_lang('EvaluationFormula'), [ - $plugin->get_lang('NoFormula'), - $plugin->get_lang('Formula1'), - $plugin->get_lang('Formula2'), - $plugin->get_lang('Formula3'), + -1 => $plugin->get_lang('NoFormula'), + 0 => $plugin->get_lang('RecalculateQuestionScores'), + 1 => $plugin->get_lang('Formula1'), + 2 => $plugin->get_lang('Formula2'), + 3 => $plugin->get_lang('Formula3'), ] ) ->setColumnsSize([4, 7, 1]); @@ -88,7 +72,4 @@ echo Display::return_message( $plugin->get_lang('QuizQuestionsScoreRulesTitleConfirm'), 'warning' ); -echo '
'; -$formRecalculate->display(); -echo '
'; $formEvaluation->display();