Feature: Prevent students from sharing device while self-marking.
[moodle-mod_attendance.git] / classes / structure.php
index 5aa9b74..7a29187 100644 (file)
@@ -493,6 +493,14 @@ class mod_attendance_structure {
                 $sess->subnet = '';
             }
 
+            if (!isset($sess->preventsharedip)) {
+                $sess->preventsharedip = 0;
+            }
+
+            if (!isset($sess->preventsharediptime)) {
+                $sess->preventsharediptime = '';
+            }
+
             $event->add_record_snapshot('attendance_sessions', $sess);
             $event->trigger();
         }
@@ -529,6 +537,8 @@ class mod_attendance_structure {
         $sess->subnet = '';
         $sess->automark = 0;
         $sess->automarkcompleted = 0;
+        $sess->preventsharedip = 0;
+        $sess->preventsharediptime = '';
         if (!empty(get_config('attendance', 'enablewarnings'))) {
             $sess->absenteereport = empty($formdata->absenteereport) ? 0 : 1;
         }
@@ -549,6 +559,13 @@ class mod_attendance_structure {
             if (!empty($formdata->automark)) {
                 $sess->automark = $formdata->automark;
             }
+            if (!empty($formdata->preventsharedip)) {
+                $sess->preventsharedip = $formdata->preventsharedip;
+            }
+            if (!empty($formdata->preventsharediptime)) {
+                $sess->preventsharediptime = $formdata->preventsharediptime;
+            }
+
         }
 
         $sess->timemodified = time();
@@ -592,6 +609,7 @@ class mod_attendance_structure {
         $record->sessionid = $mformdata->sessid;
         $record->timetaken = $now;
         $record->takenby = $USER->id;
+        $record->ipaddress = getremoteaddr(null);
 
         $dbsesslog = $this->get_session_log($mformdata->sessid);
         if (array_key_exists($record->studentid, $dbsesslog)) {
@@ -1018,7 +1036,8 @@ class mod_attendance_structure {
             $where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate";
         }
         if ($this->get_group_mode()) {
-            $sql = "SELECT ats.id, ats.sessdate, ats.groupid, al.statusid, al.remarks
+            $sql = "SELECT ats.id, ats.sessdate, ats.groupid, al.statusid, al.remarks,
+                           ats.preventsharediptime, ats.preventsharedip
                   FROM {attendance_sessions} ats
                   JOIN {attendance_log} al ON ats.id = al.sessionid AND al.studentid = :uid
                   LEFT JOIN {groups_members} gm ON gm.userid = al.studentid AND gm.groupid = ats.groupid
@@ -1033,7 +1052,8 @@ class mod_attendance_structure {
                 'edate'     => $this->pageparams->enddate);
 
         } else {
-            $sql = "SELECT ats.id, ats.sessdate, ats.groupid, al.statusid, al.remarks
+            $sql = "SELECT ats.id, ats.sessdate, ats.groupid, al.statusid, al.remarks,
+                           ats.preventsharediptime, ats.preventsharedip
                   FROM {attendance_sessions} ats
                   JOIN {attendance_log} al
                     ON ats.id = al.sessionid AND al.studentid = :uid
@@ -1075,7 +1095,8 @@ class mod_attendance_structure {
         $id = $DB->sql_concat(':value', 'ats.id');
         if ($this->get_group_mode()) {
             $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description,
-                           al.statusid, al.remarks, ats.studentscanmark, ats.autoassignstatus
+                           al.statusid, al.remarks, ats.studentscanmark, ats.autoassignstatus,
+                           ats.preventsharedip, ats.preventsharediptime
                       FROM {attendance_sessions} ats
                 RIGHT JOIN {attendance_log} al
                         ON ats.id = al.sessionid AND al.studentid = :uid
@@ -1084,7 +1105,8 @@ class mod_attendance_structure {
                   ORDER BY ats.sessdate ASC";
         } else {
             $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, ats.statusset,
-                           al.statusid, al.remarks, ats.studentscanmark, ats.autoassignstatus
+                           al.statusid, al.remarks, ats.studentscanmark, ats.autoassignstatus,
+                           ats.preventsharedip, ats.preventsharediptime
                       FROM {attendance_sessions} ats
                 RIGHT JOIN {attendance_log} al
                         ON ats.id = al.sessionid AND al.studentid = :uid
@@ -1114,7 +1136,8 @@ class mod_attendance_structure {
             $where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND ats.groupid $gsql";
         }
         $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, ats.statusset,
-                       al.statusid, al.remarks, ats.studentscanmark, ats.autoassignstatus
+                       al.statusid, al.remarks, ats.studentscanmark, ats.autoassignstatus,
+                       ats.preventsharedip, ats.preventsharediptime
                   FROM {attendance_sessions} ats
              LEFT JOIN {attendance_log} al
                     ON ats.id = al.sessionid AND al.studentid = :uid