@ -30,7 +30,7 @@ $pageparams = new mod_attendance_sessions_page_params();
// Check that the required parameters are present.
// Check that the required parameters are present.
$id = required_param('sessid', PARAM_INT);
$id = required_param('sessid', PARAM_INT);
$password = optional_param('studentpassword ', '', PARAM_TEXT);
$qrpass = optional_param('qrpass ', '', PARAM_TEXT);
$attforsession = $DB->get_record('attendance_sessions', array('id' => $id), '*', MUST_EXIST);
$attforsession = $DB->get_record('attendance_sessions', array('id' => $id), '*', MUST_EXIST);
$attendance = $DB->get_record('attendance', array('id' => $attforsession->attendanceid), '*', MUST_EXIST);
$attendance = $DB->get_record('attendance', array('id' => $attforsession->attendanceid), '*', MUST_EXIST);
@ -56,8 +56,14 @@ if (!empty($attforsession->subnet) && !address_in_subnet(getremoteaddr(), $attfo
$pageparams->sessionid = $id;
$pageparams->sessionid = $id;
$att = new mod_attendance_structure($attendance, $cm, $course, $PAGE->context, $pageparams);
$att = new mod_attendance_structure($attendance, $cm, $course, $PAGE->context, $pageparams);
// Require that a session key is passed to this page.
if (empty($attforsession->includeqrcode)) {
// require_sesskey();
$qrpass = ''; // Override qrpass if set, as it is not allowed.
}
if (empty($qrpass)) {
// Sesskey is required on this page when QR code not in use.
require_sesskey();
}
// Check to see if autoassignstatus is in use and no password required.
// Check to see if autoassignstatus is in use and no password required.
if ($attforsession->autoassignstatus & & empty($attforsession->studentpassword)) {
if ($attforsession->autoassignstatus & & empty($attforsession->studentpassword)) {
@ -79,22 +85,20 @@ if ($attforsession->autoassignstatus && empty($attforsession->studentpassword))
}
}
}
}
// Create the form.
// Check to see if autoassignstatus is in use and if qrcode is being used.
$mform = new mod_attendance_student_attendance_form(null,
if (!empty($qrpass) & & !empty($attforsession->autoassignstatus)) {
array('course' => $course, 'cm' => $cm, 'modcontext' => $PAGE->context, 'session' => $attforsession, 'attendance' => $att));
$fromform = new stdClass();
if ($password !== '') {
$fromform = $mform->get_data();
// Check if password required and if set correctly.
// Check if password required and if set correctly.
if (!empty($attforsession->studentpassword) & &
if (!empty($attforsession->studentpassword) & &
$attforsession->studentpassword !== $password ) {
$attforsession->studentpassword !== $qr pass) {
$url = new moodle_url('/mod/attendance/attendance.php', array('sessid' => $id, 'sesskey' => sesskey()));
$url = new moodle_url('/mod/attendance/attendance.php', array('sessid' => $id, 'sesskey' => sesskey()));
redirect($url, get_string('incorrectpassword', 'mod_attendance'), null, \core\output\notification::NOTIFY_ERROR);
redirect($url, get_string('incorrectpassword', 'mod_attendance'), null, \core\output\notification::NOTIFY_ERROR);
}
}
// Set the password and session id in the form, because they are saved in the attendance log.
// Set the password and session id in the form, because they are saved in the attendance log.
$fromform->studentpassword = $password ;
$fromform->studentpassword = $qr pass;
$fromform->sessid = $attforsession->id;
$fromform->sessid = $attforsession->id;
$fromform->status = attendance_session_get_highest_status($att, $attforsession);
$fromform->status = attendance_session_get_highest_status($att, $attforsession);
@ -114,52 +118,57 @@ if ($password !== '') {
print_error('attendance_already_submitted', 'mod_attendance', $url);
print_error('attendance_already_submitted', 'mod_attendance', $url);
}
}
}
}
} else {
}
$PAGE->set_url($att->url_sessions());
if ($mform->is_cancelled()) {
$PAGE->set_url($att->url_sessions());
// The user cancelled the form, so redirect them to the view page.
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
// Create the form.
redirect($url);
$mform = new mod_attendance_student_attendance_form(null,
} else if ($fromform = $mform->get_data()) {
array('course' => $course, 'cm' => $cm, 'modcontext' => $PAGE->context, 'session' => $attforsession,
// Check if password required and if set correctly.
'attendance' => $att, 'password' => $qrpass));
if (!empty($attforsession->studentpassword) & &
$attforsession->studentpassword !== $fromform->studentpassword) {
$url = new moodle_url('/mod/attendance/attendance.php', array('sessid' => $id, 'sesskey' => sesskey()));
redirect($url, get_string('incorrectpassword', 'mod_attendance'), null, \core\output\notification::NOTIFY_ERROR);
}
if ($attforsession->autoassignstatus) {
$fromform->status = attendance_session_get_highest_status($att, $attforsession);
if (empty($fromform->status)) {
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
print_error('attendance_no_status', 'mod_attendance', $url);
}
}
if (!empty($fromform->status)) {
if ($mform->is_cancelled()) {
$success = $att->take_from_student($fromform);
// The user cancelled the form, so redirect them to the view page.
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
redirect($url);
} else if ($fromform = $mform->get_data()) {
// Check if password required and if set correctly.
if (!empty($attforsession->studentpassword) & &
$attforsession->studentpassword !== $fromform->studentpassword) {
$url = new moodle_url('/mod/attendance/attendance.php', array('sessid' => $id, 'sesskey' => sesskey()));
redirect($url, get_string('incorrectpassword', 'mod_attendance'), null, \core\output\notification::NOTIFY_ERROR);
}
if ($attforsession->autoassignstatus) {
$fromform->status = attendance_session_get_highest_status($att, $attforsession);
if (empty($fromform->status)) {
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
if ($success) {
print_error('attendance_no_status', 'mod_attendance', $url);
// Redirect back to the view page.
redirect($url, get_string('studentmarked', 'attendance'));
} else {
print_error('attendance_already_submitted', 'mod_attendance', $url);
}
}
}
// The form did not validate correctly so we will set it to display the data they submitted.
$mform->set_data($fromform);
}
}
$PAGE->set_title($course->shortname. ": ".$att->name);
if (!empty($fromform->status)) {
$PAGE->set_heading($course->fullname);
$success = $att->take_from_student($fromform);
$PAGE->set_cacheable(true);
$PAGE->navbar->add($att->name);
$output = $PAGE->get_renderer('mod_attendance');
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
echo $output->header();
if ($success) {
$mform->display();
// Redirect back to the view page.
echo $output->footer();
redirect($url, get_string('studentmarked', 'attendance'));
} else {
print_error('attendance_already_submitted', 'mod_attendance', $url);
}
}
// The form did not validate correctly so we will set it to display the data they submitted.
$mform->set_data($fromform);
}
}
$PAGE->set_title($course->shortname. ": ".$att->name);
$PAGE->set_heading($course->fullname);
$PAGE->set_cacheable(true);
$PAGE->navbar->add($att->name);
$output = $PAGE->get_renderer('mod_attendance');
echo $output->header();
$mform->display();
echo $output->footer();