The Elearning Community • Test feedback not behaving as expected
Page 1 of 1

Test feedback not behaving as expected

Posted: Tue Sep 15, 2020 2:00 pm
by jamesd
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?

Re: Test feedback not behaving as expected

Posted: Tue Sep 15, 2020 3:01 pm
by alfa24
In /appLms/lib/lib.assessment_rule.php

find:

Code: Select all

function  __construct($test_id) {
		$this->test_id =(int)$test_id;
		$this->db =DbConn::getInstance();
	}
replace with:

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();
	}
find:

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']."')";
		}
replace with:

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']."')";

Re: Test feedback not behaving as expected

Posted: Tue Sep 15, 2020 5:04 pm
by jamesd
Yay! That worked perfectly. Thank you.

Re: Test feedback not behaving as expected

Posted: Tue Jun 27, 2023 5:16 pm
by g.nucifora
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 :

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,
  ),
)
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

Code: Select all

'appLms/modules/test/do.test.php
' in particular before the function 'setRulesFromScore' is called on line 1276 approximately.

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;
        }
    }
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.

This site uses cookies.

Some of the cookies we use are essential for parts of the site to operate and have already been set. We also use Google Analytics scripts, which all use cookies.
You may delete or block all cookies from this site in your browser options.