$uly = $upperleft->y; $urx = $upperright->x; $ury = $upperright->y; $llx = $lowerleft->x; $lly = $lowerleft->y; $lrx = $lowerright->x; $lry = $lowerright->y; $scannedpage->status = 'ok'; $scannedpage->error = ''; $scannedpage->listnumber = 0; $offlinequizconfig->papergray = $offlinequiz->papergray; if ($newfile = $scanner->rotate_180()) { $scannedpage->filename = $newfile->get_filename(); $DB->update_record('offlinequiz_scanned_p_pages', $scannedpage); // Create a completely new scanner. $scanner = new offlinequiz_participants_scanner($offlinequiz, $context->id, 0, 0); // Load the stored picture file. $sheetloaded = $scanner->load_stored_image($scannedpage->filename, array($upperleft, $upperright, $lowerleft, $lowerright)); // The following calibrates the scanner. $scanner->get_list(); $participants = $scanner->get_participants(); } } else { if ($action == 'setpage') { if (!confirm_sesskey()) { print_error('invalidsesskey'); echo "<input class=\"imagebutton\" type=\"submit\" value=\"" . get_string('cancel') . "\" name=\"submitbutton4\"\nonClick=\"self.close(); return false;\"><br />"; die; } $listid = required_param('listid', PARAM_INT); if (!$listid) {
} $a = new stdClass(); $a->from = $first + 1; $a->to = $last + 1; $a->total = $numpages; echo $OUTPUT->box_start(); print_string('importfromto', 'offlinequiz', $a); echo "<br />"; echo $OUTPUT->box_end(); echo $OUTPUT->box_start(); $offlinequizconfig->papergray = $offlinequiz->papergray; for ($j = $first; $j <= $last; $j++) { $file = $files[$j]; $filename = $tempdir . '/' . $file; set_time_limit(120); $scanner = new offlinequiz_participants_scanner($offlinequiz, $context->id, 0, 0); if ($scannedpage = $scanner->load_image($filename)) { if ($scannedpage->status == 'ok') { list($scanner, $scannedpage) = offlinequiz_check_scanned_participants_page($offlinequiz, $scanner, $scannedpage, $USER->id, $coursecontext, true); } if ($scannedpage->status == 'ok') { $scannedpage = offlinequiz_process_scanned_participants_page($offlinequiz, $scanner, $scannedpage, $USER->id, $coursecontext); } if ($scannedpage->status == 'ok') { $choicesdata = $DB->get_records('offlinequiz_p_choices', array('scannedppageid' => $scannedpage->id)); $scannedpage = $scannedpage = offlinequiz_submit_scanned_participants_page($offlinequiz, $scannedpage, $choicesdata); if ($scannedpage->status == 'submitted') { echo get_string('pagenumberimported', 'offlinequiz', $j) . "<br /><br />"; } } } else {
/** * Processes the markings on a scanned list of paritipants page * * @param unknown_type $offlinequiz * @param offlinequiz_participants_scanner $scanner * @param unknown_type $scannedpage * @param unknown_type $teacherid * @param unknown_type $coursecontext * @return unknown */ function offlinequiz_process_scanned_participants_page($offlinequiz, offlinequiz_participants_scanner $scanner, $scannedpage, $teacherid, $coursecontext) { global $DB; // Check the participants entries. $participants = $scanner->get_participants(); if (!property_exists($scannedpage, 'participants') || empty($scannedpage->participants)) { $scannedpage->participants = $participants; } $insecuremarkings = false; if (!empty($participants)) { foreach ($participants as $participant) { $choice = new StdClass(); $choice->scannedppageid = $scannedpage->id; $choice->userid = $participant->userid; if ($participant->value == 'unknown' || $participant->userid == 0) { $choice->value = -1; $insecuremarkings = true; } else { if ($participant->value == 'marked') { $choice->value = 1; } else { $choice->value = 0; } } if (is_string($participant->userid) && ($intuserid = intval($participant->userid))) { $participant->userid = $intuserid; } if ($participant->userid != false) { $choice->userid = $participant->userid; } else { $choice->userid = 0; } // We really want to save every single choice in the database. if ($choice->userid) { if (!($oldchoice = $DB->get_record('offlinequiz_p_choices', array('scannedppageid' => $scannedpage->id, 'userid' => $choice->userid)))) { $choice->id = $DB->insert_record('offlinequiz_p_choices', $choice); } else { $DB->set_field('offlinequiz_p_choices', 'value', $choice->value, array('id' => $oldchoice->id)); } } } } if ($scannedpage->status == 'ok' && $insecuremarkings) { $scannedpage->status = 'error'; $scannedpage->error = 'insecuremarkings'; $scannedpage->time = time(); $DB->update_record('offlinequiz_scanned_p_pages', $scannedpage); } // Check if all users are in the offlinequiz_p_list. if ($scannedpage->status == 'ok') { $list = $DB->get_record('offlinequiz_p_lists', array('offlinequizid' => $offlinequiz->id, 'number' => $scannedpage->listnumber)); $userdata = $DB->get_records('offlinequiz_participants', array('listid' => $list->id)); // Index the user data by userid. $users = array(); foreach ($userdata as $user) { $users[$user->userid] = $user->userid; } foreach ($participants as $participant) { if ($participant->userid > 0 && empty($users[$participant->userid])) { $scannedpage->status = 'error'; $scannedpage->error = 'usernotinlist'; $DB->update_record('offlinequiz_scanned_p_pages', $scannedpage); } } } return $scannedpage; }