Browse Source

Improve auto-marking when no password.

also fix some coding guideline issues.
MOODLE_33_STABLE
Dan Marsden 7 years ago
parent
commit
670f592217
  1. 3
      add_form.php
  2. 51
      attendance.php
  3. 4
      lang/en/attendance.php
  4. 39
      locallib.php
  5. 1
      sessions.php
  6. 2
      student_attendance_form.php
  7. 2
      update_form.php

3
add_form.php

@ -211,8 +211,11 @@ class mod_attendance_add_form extends moodleform {
$mform->disabledif('studentpassword', 'randompassword', 'checked'); $mform->disabledif('studentpassword', 'randompassword', 'checked');
$mform->disabledif('studentpassword', 'automark', 'eq', ATTENDANCE_AUTOMARK_ALL); $mform->disabledif('studentpassword', 'automark', 'eq', ATTENDANCE_AUTOMARK_ALL);
$mform->disabledif('randompassword', 'automark', 'eq', ATTENDANCE_AUTOMARK_ALL); $mform->disabledif('randompassword', 'automark', 'eq', ATTENDANCE_AUTOMARK_ALL);
$mform->addElement('checkbox', 'autoassignstatus', '', get_string('autoassignstatus', 'attendance')); $mform->addElement('checkbox', 'autoassignstatus', '', get_string('autoassignstatus', 'attendance'));
$mform->addHelpButton('autoassignstatus', 'autoassignstatus', 'attendance'); $mform->addHelpButton('autoassignstatus', 'autoassignstatus', 'attendance');
$mform->disabledif('autoassignstatus', 'studentscanmark', 'notchecked');
if (isset($pluginconfig->autoassignstatus)) { if (isset($pluginconfig->autoassignstatus)) {
$mform->setDefault('autoassignstatus', $pluginconfig->autoassignstatus); $mform->setDefault('autoassignstatus', $pluginconfig->autoassignstatus);
} }

51
attendance.php

@ -57,6 +57,26 @@ $att = new mod_attendance_structure($attendance, $cm, $course, $PAGE->context, $
// Require that a session key is passed to this page. // Require that a session key is passed to this page.
require_sesskey(); require_sesskey();
// Check to see if autoassignstatus is in use and no password required.
if ($attforsession->autoassignstatus && empty($attforsession->studentpassword)) {
$statusid = attendance_session_get_highest_status($att, $attforsession);
$url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
if (empty($statusid)) {
print_error('attendance_no_status', 'mod_attendance', $url);
}
$take = new stdClass();
$take->status = $statusid;
$take->sessid = $attforsession->id;
$success = $att->take_from_student($take);
if ($success) {
// Redirect back to the view page.
redirect($url, get_string('studentmarked', 'attendance'));
} else {
print_error('attendance_already_submitted', 'mod_attendance', $url);
}
}
// Create the form. // Create the form.
$mform = new mod_attendance_student_attendance_form(null, $mform = new mod_attendance_student_attendance_form(null,
array('course' => $course, 'cm' => $cm, 'modcontext' => $PAGE->context, 'session' => $attforsession, 'attendance' => $att)); array('course' => $course, 'cm' => $cm, 'modcontext' => $PAGE->context, 'session' => $attforsession, 'attendance' => $att));
@ -76,29 +96,11 @@ if ($mform->is_cancelled()) {
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);
} }
if ($attforsession->autoassignstatus) { if ($attforsession->autoassignstatus) {
// Find the status to set here. $fromform->status = attendance_session_get_highest_status($att, $attforsession);
$statuses = $att->get_statuses(); if (empty($fromform->status)) {
$highestavailablegrade = 0; $url = new moodle_url('/mod/attendance/view.php', array('id' => $cm->id));
$highestavailablestatus; print_error('attendance_no_status', 'mod_attendance', $url);
foreach ($statuses as $status) {
if ($status->studentavailability === '0') {
// This status is never available to students.
continue;
}
if (!empty($status->studentavailability)) {
$toolateforstatus = (($attforsession->sessdate + ($status->studentavailability * 60)) < time());
if ($toolateforstatus) {
continue;
}
}
// This status is available to the student.
if ($status->grade > $highestavailablegrade) {
// This is the most favourable grade so far; save it.
$highestavailablegrade = $status->grade;
$highestavailablestatus = $status;
}
} }
$fromform->status = $highestavailablestatus->id;
} }
if (!empty($fromform->status)) { if (!empty($fromform->status)) {
@ -106,8 +108,8 @@ if ($mform->is_cancelled()) {
$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) { if ($success) {
// Redirect back to the view page for the block. // Redirect back to the view page.
redirect($url); redirect($url, get_string('studentmarked', 'attendance'));
} else { } else {
print_error('attendance_already_submitted', 'mod_attendance', $url); print_error('attendance_already_submitted', 'mod_attendance', $url);
} }
@ -126,3 +128,4 @@ $output = $PAGE->get_renderer('mod_attendance');
echo $output->header(); echo $output->header();
$mform->display(); $mform->display();
echo $output->footer(); echo $output->footer();

4
lang/en/attendance.php

@ -501,4 +501,6 @@ $string['week'] = 'week(s)';
$string['weeks'] = 'Weeks'; $string['weeks'] = 'Weeks';
$string['youcantdo'] = 'You can\'t do anything'; $string['youcantdo'] = 'You can\'t do anything';
$string['includeabsentee'] = 'Include session when calculating absentee report'; $string['includeabsentee'] = 'Include session when calculating absentee report';
$string['includeabsentee_help'] = 'If checked this session will be included in the absentee report calculations.'; $string['includeabsentee_help'] = 'If checked this session will be included in the absentee report calculations.';
$string['attendance_no_status'] = 'No valid status was available - you may be too late to record attendance.';
$string['studentmarked'] = 'Your attendance in this session has been recorded.';

39
locallib.php

@ -539,9 +539,6 @@ function attendance_construct_sessions_data_for_add($formdata, mod_attendance_st
if (empty(get_config('attendance', 'studentscanmark'))) { if (empty(get_config('attendance', 'studentscanmark'))) {
$formdata->studentscanmark = 0; $formdata->studentscanmark = 0;
} }
if (empty(get_config('attendance', 'autoassignstatus'))) {
$formdata->autoassignstatus = 0;
}
$sessions = array(); $sessions = array();
if (isset($formdata->addmultiply)) { if (isset($formdata->addmultiply)) {
@ -833,4 +830,40 @@ function attendance_template_variables($record) {
$record->$field = preg_replace($patterns, $replacements, $record->$field); $record->$field = preg_replace($patterns, $replacements, $record->$field);
} }
return $record; return $record;
}
/**
* Find highest available status for a user.
*
* @param mod_attendance_structure $att attendance structure
* @param stdclass $attforsession attendance_session record.
* @return bool/int
*/
function attendance_session_get_highest_status(mod_attendance_structure $att, $attforsession) {
// Find the status to set here.
$statuses = $att->get_statuses();
$highestavailablegrade = 0;
$highestavailablestatus = new stdClass();
foreach ($statuses as $status) {
if ($status->studentavailability === '0') {
// This status is never available to students.
continue;
}
if (!empty($status->studentavailability)) {
$toolateforstatus = (($attforsession->sessdate + ($status->studentavailability * 60)) < time());
if ($toolateforstatus) {
continue;
}
}
// This status is available to the student.
if ($status->grade > $highestavailablegrade) {
// This is the most favourable grade so far; save it.
$highestavailablegrade = $status->grade;
$highestavailablestatus = $status;
}
}
if (empty($highestavailablestatus)) {
return false;
}
return $highestavailablestatus->id;
} }

1
sessions.php

@ -99,7 +99,6 @@ switch ($att->pageparams->action) {
} }
if ($formdata = $mform->get_data()) { if ($formdata = $mform->get_data()) {
error_log(var_export($formdata, true));
if (empty($formdata->autoassignstatus)) { if (empty($formdata->autoassignstatus)) {
$formdata->autoassignstatus = 0; $formdata->autoassignstatus = 0;
} }

2
student_attendance_form.php

@ -93,7 +93,7 @@ class mod_attendance_student_attendance_form extends moodleform {
if ($disabledduetotime) { if ($disabledduetotime) {
$warning = html_writer::span(get_string('somedisabledstatus', 'attendance'), 'somedisabledstatus'); $warning = html_writer::span(get_string('somedisabledstatus', 'attendance'), 'somedisabledstatus');
$radioarray[] =& $mform->createElement('static', '', '', $warning); $radioarray[] =& $mform->createElement('static', '', '', $warning);
} }
// Add the radio buttons as a control with the user's name in front. // Add the radio buttons as a control with the user's name in front.
$radiogroup = $mform->addGroup($radioarray, 'statusarray', $USER->firstname.' '.$USER->lastname.':', array(''), false); $radiogroup = $mform->addGroup($radioarray, 'statusarray', $USER->firstname.' '.$USER->lastname.':', array(''), false);
$radiogroup->setAttributes(array('class' => 'statusgroup')); $radiogroup->setAttributes(array('class' => 'statusgroup'));

2
update_form.php

@ -130,6 +130,8 @@ class mod_attendance_update_form extends moodleform {
$mform->disabledif('randompassword', 'automark', 'eq', ATTENDANCE_AUTOMARK_ALL); $mform->disabledif('randompassword', 'automark', 'eq', ATTENDANCE_AUTOMARK_ALL);
$mform->addElement('checkbox', 'autoassignstatus', '', get_string('autoassignstatus', 'attendance')); $mform->addElement('checkbox', 'autoassignstatus', '', get_string('autoassignstatus', 'attendance'));
$mform->addHelpButton('autoassignstatus', 'autoassignstatus', 'attendance'); $mform->addHelpButton('autoassignstatus', 'autoassignstatus', 'attendance');
$mform->disabledif('autoassignstatus', 'studentscanmark', 'notchecked');
$mgroup = array(); $mgroup = array();
$mgroup[] = & $mform->createElement('text', 'subnet', get_string('requiresubnet', 'attendance')); $mgroup[] = & $mform->createElement('text', 'subnet', get_string('requiresubnet', 'attendance'));
$mform->setDefault('subnet', $this->_customdata['att']->subnet); $mform->setDefault('subnet', $this->_customdata['att']->subnet);

Loading…
Cancel
Save