add ability to restrict by IP
authorLihi Dor <lihi@tauex.tau.ac.il>
Thu, 10 Nov 2016 12:35:13 +0000 (14:35 +0200)
committerDan Marsden <dan@danmarsden.com>
Mon, 21 Nov 2016 01:28:44 +0000 (14:28 +1300)
attendance.php
classes/structure.php
db/install.xml
db/upgrade.php
lang/en/attendance.php
mod_form.php
version.php

index 8b9bda8..d4c071a 100644 (file)
@@ -83,5 +83,15 @@ $PAGE->navbar->add($att->name);
 
 $output = $PAGE->get_renderer('mod_attendance');
 echo $output->header();
-$mform->display();
+if (!empty ($attendance->subnet)) {
+    if (!address_in_subnet(getremoteaddr(), $attendance->subnet)) {
+        $wrongip = html_writer::tag('p', get_string('subnetwrong', 'attendance'));
+        $button = html_writer::tag('p', $output->continue_button($CFG->wwwroot . '/course/view.php?id=' . $course->id));
+        echo $output->box($wrongip ."\n\n".$button."\n", 'generalbox', 'notice');
+        } else {
+            $mform->display();
+    } else {
+        $mform->display();
+}
+
 echo $output->footer();
index 772a021..99f5e96 100644 (file)
@@ -58,6 +58,8 @@ class mod_attendance_structure {
     /** current page parameters */
     public $pageparams;
 
+    public $subnet;
+
     private $groupmode;
 
     private $statuses;
@@ -1058,4 +1060,4 @@ class mod_attendance_structure {
 
         return null;
     }
-}
+}
\ No newline at end of file
index 5259382..ac9f7a0 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/attendance/db" VERSION="20160829" COMMENT="XMLDB file for Moodle mod/attendance"
+<XMLDB PATH="mod/attendance/db" VERSION="20161107" COMMENT="XMLDB file for Moodle mod/attendance"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
         >
@@ -11,6 +11,7 @@
         <FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false"/>
         <FIELD NAME="grade" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="100" SEQUENCE="false" COMMENT="This is maximum grade for instance"/>
         <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="The time the settings for this attendance instance were last modified."/>
+        <FIELD NAME="subnet" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" COMMENT="add ability to restrict by IP."/>
       </FIELDS>
       <KEYS>
         <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for attendance"/>
       </INDEXES>
     </TABLE>
   </TABLES>
-</XMLDB>
\ No newline at end of file
+</XMLDB>
index 3485f7f..8bf2f4a 100644 (file)
@@ -191,6 +191,14 @@ function xmldb_attendance_upgrade($oldversion=0) {
         // Attendance savepoint reached.
         upgrade_mod_savepoint(true, 2016082900, 'attendance');
     }
+    if ($oldversion < 201611071400) {
+        $table = new xmldb_table('attendance');
+        $newfield = $table->add_field('subnet', XMLDB_TYPE_CHAR, '255', null, null, null, null);
+        if (!$dbman->field_exists($table, $newfield)) {
+            $dbman->add_field($table, $newfield);
+        }
+        upgrade_mod_savepoint(true, 201611071400, 'attendance');
+    }
 
     return $result;
-}
+}
\ No newline at end of file
index 6e04022..dc6b702 100644 (file)
@@ -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['configrequiresubnet'] = '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
index 6cd15f7..682a90e 100644 (file)
@@ -42,6 +42,7 @@ class mod_attendance_mod_form extends moodleform_mod {
      * @return void
      */
     public function definition() {
+        $attendanceconfig = get_config('attendance');
         $mform    =& $this->_form;
 
         $mform->addElement('header', 'general', get_string('general', 'form'));
@@ -55,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
index 39e624d..15fd1c2 100644 (file)
@@ -22,9 +22,9 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$plugin->version  = 2016082900;
+$plugin->version  = 2016110714;
 $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