Hi, this is the last thing that i'm confused about right now hopefully the community have seen it before or can help?
On a test I can configure Feedback in Feedback management.
We've set up messages for the following scores: 0-30, 31-49 and 50-100 and the test is set to express the score as a percentage.
When someone finishes the test they are shown the appropriate message but for some reason they are also always shown the message for 0-30 as well (see second attachment).
Any ideas anyone?
Test feedback not behaving as expected
Re: Test feedback not behaving as expected
In /appLms/lib/lib.assessment_rule.php
find:
replace with:
find:
replace with:
find:
Code: Select all
function __construct($test_id) {
$this->test_id =(int)$test_id;
$this->db =DbConn::getInstance();
}
Code: Select all
function __construct($test_id) {
$this->test_id =(int)$test_id;
require_once(_lms_.'/lib/lib.test.php' );
$test_man = new TestManagement($this->test_id);
$this->test_info = $test_man->getTestAllInfo();
$this->db =DbConn::getInstance();
}
Code: Select all
public function setRulesFromScore($score_arr) {
require_once(_base_.'/lib/lib.json.php');
require_once(_lms_.'/lib/lib.subscribe.php');
$res =true;
$where_score_arr =array();
foreach($score_arr as $val) {
$where_score_arr[]="(category_id = '".(int)$val['category_id']."' ".
"AND from_score <= '".(int)$val['score']."' AND to_score >= '".(int)$val['score']."')";
}
Code: Select all
public function setRulesFromScore($score_arr) {
require_once(_base_.'/lib/lib.json.php');
require_once(_lms_.'/lib/lib.subscribe.php');
$res =true;
$where_score_arr =array();
$where_score_arr[]="(category_id = '".(int)$score_arr[$this->test_info['point_type']]['category_id']."' ".
"AND from_score <= '".(int)$score_arr[$this->test_info['point_type']]['score']."' AND to_score >= '".(int)$score_arr[$this->test_info['point_type']]['score']."')";
Per supporto GRATUITO contattatemi in privato qui
Re: Test feedback not behaving as expected
Yay! That worked perfectly. Thank you.
-
- Newbie
- Posts: 3
- Joined: Fri Dec 17, 2021 3:49 pm
Re: Test feedback not behaving as expected
Hi everyone,
the applied fix is actually not correct becasue it does not take the calculation rules related to the categories.
If you have 3 categories for questions "$score_arr" has this values :
and you take $score_arr[$test_info['point_type']] to calculate the where clausule the result is not correct because possible values for $test_info['point_type'] are only 0 and 1.
The problem is upstream of that function and precisely in the file with path' in particular before the function 'setRulesFromScore' is called on line 1276 approximately.
find :
and replace with :
This allow to use and calculate feedback based on question category values if point_type is numerical and in perc if point_type is in percentage.
the applied fix is actually not correct becasue it does not take the calculation rules related to the categories.
If you have 3 categories for questions "$score_arr" has this values :
Code: Select all
array (
0 =>
array (
'score' => 100.0,
'category_id' => 0,
),
1 =>
array (
'score' => 100.0,
'category_id' => 1,
),
2 =>
array (
'score' => 100.0,
'category_id' => 3,
),
3 =>
array (
'score' => 100.0,
'category_id' => 5,
),
)
The problem is upstream of that function and precisely in the file with path
Code: Select all
'appLms/modules/test/do.test.php
find :
Code: Select all
foreach ($point_do_cat as $cat_id => $score) {
$score_arr[$i]['score'] = $score;
$score_arr[$i]['category_id'] = $cat_id;
++$i;
}
// final score:
$score_arr[$i]['score'] = $point_do;
$score_arr[$i]['category_id'] = 0;
and replace with :
Code: Select all
if ($test_info['point_type'] == '1') {
$score_arr[$i]['score'] = $point_do;
$score_arr[$i]['category_id'] = 0;
} else {
foreach ($point_do_cat as $cat_id => $score) {
$score_arr[$i]['score'] = $score;
$score_arr[$i]['category_id'] = $cat_id;
++$i;
}
}