diff --git a/attendance.php b/attendance.php index 8b9bda8..f702fbf 100644 --- a/attendance.php +++ b/attendance.php @@ -43,6 +43,13 @@ if (empty(get_config('attendance', 'studentscanmark')) || empty($attforsession-> redirect(new moodle_url('/mod/attendance/view.php', array('id' => $cm->id))); exit; } + +// Check if subnet is set and if the user is in the allowed range. +if (!empty($attendance->subnet) && !address_in_subnet(getremoteaddr(), $attendance->subnet)) { + notice(get_string('subnetwrong', 'attendance')); + exit; // Notice calls this anyway. +} + $pageparams->sessionid = $id; $att = new mod_attendance_structure($attendance, $cm, $course, $PAGE->context, $pageparams); diff --git a/classes/structure.php b/classes/structure.php index d4d591c..df7d823 100644 --- a/classes/structure.php +++ b/classes/structure.php @@ -59,6 +59,8 @@ class mod_attendance_structure { /** current page parameters */ public $pageparams; + public $subnet; + private $groupmode; private $statuses; @@ -1063,4 +1065,4 @@ class mod_attendance_structure { return null; } -} +} \ No newline at end of file diff --git a/db/install.xml b/db/install.xml index 5259382..0704227 100644 --- a/db/install.xml +++ b/db/install.xml @@ -1,5 +1,5 @@ - @@ -11,6 +11,7 @@ + @@ -103,4 +104,4 @@ - \ No newline at end of file + diff --git a/db/upgrade.php b/db/upgrade.php index 4f32399..ce819a3 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -192,6 +192,14 @@ function xmldb_attendance_upgrade($oldversion=0) { // Attendance savepoint reached. upgrade_mod_savepoint(true, 2016082900, 'attendance'); } + if ($oldversion < 2016112100) { + $table = new xmldb_table('attendance'); + $newfield = $table->add_field('subnet', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'timemodified'); + if (!$dbman->field_exists($table, $newfield)) { + $dbman->add_field($table, $newfield); + } + upgrade_mod_savepoint(true, 2016112100, 'attendance'); + } return $result; -} +} \ No newline at end of file diff --git a/lang/en/attendance.php b/lang/en/attendance.php index 6e04022..d0dc440 100644 --- a/lang/en/attendance.php +++ b/lang/en/attendance.php @@ -332,4 +332,7 @@ $string['repeatuntil'] = 'Repeat until'; $string['repeaton'] = 'Repeat on'; $string['invalidsessionendtime'] = 'The end time must be greater than start time'; $string['deletedgroup'] = 'The group associated with this session has been deleted'; -$string['search:activity'] = 'Attendance - activity information'; \ No newline at end of file +$string['extrarestrictions'] = 'Extra restrictions'; +$string['requiresubnet'] = 'Students can only record own attendance from these computers.'; +$string['subnetwrong'] = 'Attendance can only be recorded from certain locations, and this computer is not on the allowed list.'; +$string['requiresubnet_help'] = 'Attendance recording may be restricted to particular subnets by specifying a comma-separated list of partial or full IP addresses.'; \ No newline at end of file diff --git a/mod_form.php b/mod_form.php index 133bc87..7ad84d0 100644 --- a/mod_form.php +++ b/mod_form.php @@ -39,6 +39,10 @@ class mod_attendance_mod_form extends moodleform_mod { * @return void */ public function definition() { + $attendanceconfig = get_config('attendance'); + if (!isset($attendanceconfig->subnet)) { + $attendanceconfig->subnet = ''; + } $mform =& $this->_form; $mform->addElement('header', 'general', get_string('general', 'form')); @@ -52,6 +56,14 @@ class mod_attendance_mod_form extends moodleform_mod { $this->standard_grading_coursemodule_elements(); $this->standard_coursemodule_elements(true); + + $mform->addElement('header', 'security', get_string('extrarestrictions', 'attendance')); + // IP address. + $mform->addElement('text', 'subnet', get_string('requiresubnet', 'attendance'), array('size' => '164')); + $mform->setType('subnet', PARAM_TEXT); + $mform->addHelpButton('subnet', 'requiresubnet', 'attendance'); + $mform->setDefault('subnet', $attendanceconfig->subnet); + $this->add_action_buttons(); } -} +} \ No newline at end of file diff --git a/version.php b/version.php index c726334..7a0efad 100644 --- a/version.php +++ b/version.php @@ -23,9 +23,9 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016082900; +$plugin->version = 2016112100; $plugin->requires = 2016052300; $plugin->release = '3.1.1.1'; $plugin->maturity = MATURITY_STABLE; $plugin->cron = 0; -$plugin->component = 'mod_attendance'; +$plugin->component = 'mod_attendance'; \ No newline at end of file