diff --git a/classes/output/mobile.php b/classes/output/mobile.php index e788d54..4412c48 100644 --- a/classes/output/mobile.php +++ b/classes/output/mobile.php @@ -47,8 +47,8 @@ class mobile { $cmid = $args->cmid; $courseid = $args->courseid; $takenstatus = empty($args->status) ? '' : $args->status; - $sessid = $args->sessid; - $groupid = empty($args->group) ? 0 : $args->group; // By default, group 0. + $sessid = empty($args->sessid) ? '' : $args->sessid; + $password = empty($args->studentpass) ? '' : $args->studentpass; // Capabilities check. $cm = get_coursemodule_from_id('attendance', $cmid); @@ -123,11 +123,13 @@ class mobile { if (!$isteacher) { if (!empty($sess->subnet) && !address_in_subnet(getremoteaddr(), $sess->subnet)) { + $data['showmessage'] = true; $data['messages'][]['string'] = 'subnetwrong'; // Lang string to show as a message. $html['sessid'] = null; // Unset sessid as we cannot record session on this ip. } else if ($sess->autoassignstatus && empty($sess->studentpassword)) { $statusid = attendance_session_get_highest_status($att, $sess); if (empty($statusid)) { + $data['showmessage'] = true; $data['messages'][]['string'] = 'attendance_no_status'; } $take = new \stdClass(); @@ -139,32 +141,44 @@ class mobile { $html['currentstatus'] = $userdata->statuses[$statusid]->description; $html['sessid'] = null; // Unset sessid as we have recorded session. } - } else if (!empty($takenstatus)) { - $statuses = $att->get_statuses(); - // Check if user has access to all statuses. - foreach ($statuses as $status) { - if ($status->studentavailability === '0') { - unset($statuses[$status->id]); - continue; + } else if ($sess->id == $sessid) { + if (!empty($sess->studentpassword) && $password != $sess->studentpassword) { + // Password incorrect. + $data['showmessage'] = true; + $data['messages'][]['string'] = 'incorrectpasswordshort'; + } else { + $statuses = $att->get_statuses(); + // Check if user has access to all statuses. + foreach ($statuses as $status) { + if ($status->studentavailability === '0') { + unset($statuses[$status->id]); + continue; + } + if (!empty($status->studentavailability) && + time() > $sess->sessdate + ($status->studentavailability * 60)) { + unset($statuses[$status->id]); + continue; + } } - if (!empty($status->studentavailability) && - time() > $sess->sessdate + ($status->studentavailability * 60)) { - unset($statuses[$status->id]); - continue; + if ($sess->autoassignstatus) { + // If this is an auto-assign, get the highest status available. + $takenstatus = attendance_session_get_highest_status($att, $sess); } - } - if (empty($statuses[$takenstatus])) { - // This status has probably expired and is not available - they need to choose a new one. - $data['messages'][]['string'] = 'invalidstatus'; - } else { - $take = new \stdClass(); - $take->status = $takenstatus; - $take->sessid = $sess->id; - $success = $att->take_from_student($take); - - if ($success) { - $html['currentstatus'] = $userdata->statuses[$takenstatus]->description; - $html['sessid'] = null; // Unset sessid as we have recorded session. + + if (empty($statuses[$takenstatus])) { + // This status has probably expired and is not available - they need to choose a new one. + $data['showmessage'] = true; + $data['messages'][]['string'] = 'invalidstatus'; + } else { + $take = new \stdClass(); + $take->status = $takenstatus; + $take->sessid = $sess->id; + $success = $att->take_from_student($take); + + if ($success) { + $html['currentstatus'] = $userdata->statuses[$takenstatus]->description; + $html['sessid'] = null; // Unset sessid as we have recorded session. + } } } } @@ -231,6 +245,7 @@ class mobile { $data['messages'] = array(); $data['showmessage'] = false; $data['showstatuses'] = true; + $data['showpassword'] = false; $data['statuses'] = array(); $data['disabledduetotime'] = false; @@ -266,6 +281,12 @@ class mobile { if (empty($data['statuses'])) { $data['messages'][]['string'] = 'attendance_no_status'; $data['showstatuses'] = false; // Hide all statuses. + } else if (!empty($attforsession->studentpassword)) { + $data['showpassword'] = true; + if ($attforsession->autoassignstatus) { + // If this is an auto status - don't show the statuses, but show the form. + $data['statuses'] = array(); + } } } if (!empty($data['messages'])) { diff --git a/db/mobile.php b/db/mobile.php index 22c6815..9fb7ae4 100644 --- a/db/mobile.php +++ b/db/mobile.php @@ -56,7 +56,9 @@ $addons = [ ['invalidstatus', 'attendance'], ['preventsharederror', 'attendance'], ['closed', 'attendance'], - ['subnetwrong', 'attendance'] + ['subnetwrong', 'attendance'], + ['enterpassword', 'attendance'], + ['incorrectpasswordshort', 'attendance'] ] ] ]; \ No newline at end of file diff --git a/lang/en/attendance.php b/lang/en/attendance.php index 594e332..6f46e81 100644 --- a/lang/en/attendance.php +++ b/lang/en/attendance.php @@ -243,6 +243,7 @@ $string['includenottaken'] = 'Include not taken sessions'; $string['includeqrcode'] = 'Include QR code'; $string['includeremarks'] = 'Include remarks'; $string['incorrectpassword'] = 'You have entered an incorrect password and your attendance has not been recorded, please enter the correct password.'; +$string['incorrectpasswordshort'] = 'Incorrect password, attendance not recorded.'; $string['indetail'] = 'In detail...'; $string['invalidaction'] = 'You must select an action'; $string['invalidemails'] = 'You must specify addresses of existing user accounts, could not find: {$a}'; @@ -324,6 +325,7 @@ $string['oversessionstaken_help'] = 'Shows statistics for sessions where attenda '; $string['participant'] = 'Participant'; $string['password'] = 'Password'; +$string['enterpassword'] = 'Enter password'; $string['passwordgrp'] = 'Student password'; $string['passwordgrp_help'] = 'If set students will be required to enter this password before they can set their own attendance status for the session. If empty, no password is required.'; $string['passwordrequired'] = 'You must enter the session password before you can submit your attendance'; diff --git a/templates/mobile_user_form.mustache b/templates/mobile_user_form.mustache index 86f6ee5..7268ee9 100644 --- a/templates/mobile_user_form.mustache +++ b/templates/mobile_user_form.mustache @@ -51,6 +51,14 @@ <%/messages%> <%/showmessage%> + <%#showpassword%> + + + {{ 'plugin.mod_attendance.enterpassword' | translate }}: + + + + <%/showpassword%> <%#showstatuses%> <%#statuses%> @@ -60,7 +68,7 @@ <%/statuses%> - <%/showstatuses%>