Hi there,
With the help of a colleague I have modified the moodle/mod/quiz/review.php file to allow for this feature. It would be nice if this could be implemented as a core functionality but we do not know how to do this.
For the moment it works by checking the name of the quiz and if it contains a specific string (here 'paused quiz number') then the code activates and transfers unused time from one quiz to the next one until it reaches the last quiz in the sequence.
// Paused quiz modification; code goes at the end of moodle/mod/quiz/review.php
$str = $attemptobj->get_quiz_name();
// Quiz naming structure:
// Module #### paused quiz number ##; question ##/##;
if (strpos($str, 'paused quiz number') !== false) {
// load database
global $DB;
// calculate remaining time for subsequent quizzes
$attemptmm = $attemptobj->get_attempt();
$quizmm = $attemptobj ->get_quiz();
$quiztimeremaining = $quizmm->timelimit - ($attemptmm->timefinish - $attemptmm->timestart);
// get module number, quiz number, question number and number of questions from quiz title string
preg_match_all('!\d+!', $str, $matches);
// check if not last question in quiz group (defined by module number and quiz number)
if ($matches[0][2] < $matches[0][3]) {
// get id number for next quiz by searching database table for correct string (mdl_quiz)
$nextquiz = 'Module '.$matches[0][0]. ' paused quiz number '.$matches[0][1].'; question '.(1+$matches[0][2]).'/'.$matches[0][3].';';
$nextquizrecord = $DB->get_record('quiz', array('name'=>$nextquiz));
$nextquizid = $nextquizrecord->id;
// get user id
$quizuserid = $attemptmm->userid;
// create/modify the user's override record for next question in the group
$overriderecord = new stdClass();
$overriderecord->quiz=$nextquizid;
$overriderecord->userid=$quizuserid;
$overriderecord->timelimit=$quiztimeremaining;
$norecords = $DB->count_records('quiz_overrides',array('quiz'=>$nextquizid,'userid'=>$quizuserid));
if ($norecords ==0){
$DB->insert_record('quiz_overrides',$overriderecord,false);
} else {
$DB->set_field('quiz_overrides','timelimit',$quiztimeremaining,array('quiz'=>$nextquizid,'userid'=>$quizuserid));
}
}
}
For this to work as expected, the quizzes that belong together need to be named as a sequence. For example:
- Module 1000 paused quiz number 1; question 1/5;
- Module 1000 paused quiz number 1; question 2/5;
- Module 1000 paused quiz number 1; question 3/5;
- Module 1000 paused quiz number 1; question 4/5;
- Module 1000 paused quiz number 1; question 5/5;
Each quiz needs to allow only one attempt and the time limit in the first quiz needs to be set to the overall time limit.
I hope this helps. I appreciate any comments and help with correct implementation.
Thank you, Michael