}
 // Maybe old errors have been fixed.
 $scannedpage->status = 'ok';
 $DB->set_field('offlinequiz_scanned_pages', 'status', 'ok', array('id' => $scannedpage->id));
 $scannedpage->error = '';
 $DB->set_field('offlinequiz_scanned_pages', 'error', '', array('id' => $scannedpage->id));
 $groupnumber = required_param('groupnumber', PARAM_TEXT);
 $groupnumber = intval($groupnumber);
 // Old code  if (!property_exists($scannedpage, 'groupnumber') || $scannedpage->groupnumber == 0) {.
 $scanner->set_group($groupnumber);
 $scannedpage->groupnumber = $groupnumber;
 // O=======================================================.
 // O Adjust the maxanswers of the scanner according to the offlinequiz group
 // O=======================================================.
 if ($newgroup = $DB->get_record('offlinequiz_groups', array('offlinequizid' => $offlinequiz->id, 'number' => $groupnumber))) {
     $maxanswers = offlinequiz_get_maxanswers($offlinequiz, array($newgroup));
     $scannedpage = $scanner->set_maxanswers($maxanswers, $scannedpage);
 }
 $usernumber = required_param('usernumber', PARAM_TEXT);
 $xes = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
 // If we have only X's then we ignore the input.
 $userkey = $offlinequizconfig->ID_prefix . $usernumber . $offlinequizconfig->ID_postfix;
 if ($usernumber == substr($xes, 0, $offlinequizconfig->ID_digits)) {
     $scannedpage->userkey = null;
     $DB->set_field('offlinequiz_scanned_pages', 'userkey', null, array('id' => $scannedpage->id));
 } else {
     $scannedpage->userkey = $userkey;
 }
 // Now we check the scanned page with potentially updated information.
 // Removed $scannedpage = offlinequiz_check_for_changed_groupnumber($offlinequiz, $scanner, $scannedpage,
 //   $coursecontext, $questionsperpage, $offlinequizconfig);.
     }
 }
 echo $OUTPUT->box_end();
 // O============================================================.
 // O Show/create the answer forms for all offline groups.
 // O============================================================.
 echo $OUTPUT->box_start('generalbox linkbox docsbox');
 echo $OUTPUT->notification(get_string('marginwarning', 'offlinequiz'));
 echo '<br/>';
 foreach ($groups as $group) {
     $groupletter = $letterstr[$group->number - 1];
     if (!($templateusage = offlinequiz_get_group_template_usage($offlinequiz, $group, $context))) {
         print_error("Missing data for group " . $groupletter, "createquiz.php?q={$offlinequiz->id}&amp;mode=preview&amp;sesskey=" . sesskey());
     }
     if (!$offlinequiz->docscreated) {
         $answerpdffile = offlinequiz_create_pdf_answer(offlinequiz_get_maxanswers($offlinequiz, array($group)), $templateusage, $offlinequiz, $group, $course->id, $context);
     } else {
         $sqllike = $DB->sql_like('filename', ':filename');
         $sql = "SELECT filename\n                          FROM {files}\n                         WHERE contextid = :contextid\n                           AND component = 'mod_offlinequiz'\n                           AND filearea = 'pdfs'\n                           AND itemid = 0\n                           AND filepath = '/'\n                           AND " . $sqllike;
         $params = array('contextid' => $context->id, 'filename' => 'answer-' . strtolower($groupletter) . '%.pdf');
         $filename = $DB->get_field_sql($sql, $params);
         $answerpdffile = $fs->get_file($context->id, 'mod_offlinequiz', 'pdfs', 0, '/', $filename);
     }
     if ($answerpdffile) {
         $url = "{$CFG->wwwroot}/pluginfile.php/" . $answerpdffile->get_contextid() . '/' . $answerpdffile->get_component() . '/' . $answerpdffile->get_filearea() . '/' . $answerpdffile->get_itemid() . '/' . $answerpdffile->get_filename() . '?forcedownload=1';
         echo $OUTPUT->action_link($url, get_string('answerformforgroup', 'offlinequiz', $groupletter));
         echo '<br />&nbsp;<br />';
         @flush();
         @ob_flush();
     } else {
         echo $OUTPUT->notification(get_string('createpdferror', 'offlinequiz', $groupletter));
/**
 * Calculate the characteristic numbers for an offlinequiz, i.e. maximum number of questions, maximum number of answers,
 * number of columns on the answer form and the maximum number of questions on each page.
 *
 * @param unknown_type $offlinequiz
 * @param unknown_type $groups
 */
function offlinequiz_get_question_numbers($offlinequiz, $groups)
{
    $maxquestions = offlinequiz_get_maxquestions($offlinequiz, $groups);
    $maxanswers = offlinequiz_get_maxanswers($offlinequiz, $groups);
    // Determine the form type (number of columns).
    $formtype = 4;
    if ($maxanswers > 5) {
        $formtype = 3;
    }
    if ($maxanswers > 7) {
        $formtype = 2;
    }
    if ($maxanswers > 12) {
        $formtype = 1;
    }
    // Determine how many questions are on a full page.
    $questionsperpage = 96;
    if ($maxanswers > 5) {
        $questionsperpage = 72;
    }
    if ($maxanswers > 7) {
        $questionsperpage = 48;
    }
    if ($maxanswers > 12) {
        $questionsperpage = 24;
    }
    return array($maxquestions, $maxanswers, $formtype, $questionsperpage);
}