]> git.mjollnir.org Git - moodle.git/commitdiff
Added grading support for attendance - including settings and database
authorjungwirr <jungwirr>
Thu, 25 Sep 2003 22:47:11 +0000 (22:47 +0000)
committerjungwirr <jungwirr>
Thu, 25 Sep 2003 22:47:11 +0000 (22:47 +0000)
fields.

Cleaned up some function names in lib to proper naming conventions.

lang/en/attendance.php
mod/attendance/add.php
mod/attendance/config.html
mod/attendance/lib.php
mod/attendance/mod.html
mod/attendance/view.php
mod/attendance/viewall.php
mod/attendance/viewweek.php

index 5051720201453b091a9f6d7484101d2f9b45769e..1e57f0e6ecc3bc8af2340d0f2398318f30c3a135 100755 (executable)
@@ -57,8 +57,14 @@ $string['downloadexceltotals'] = "Download Summary Excel Spreadsheet";
 $string['downloadtextfull'] = "Download Full Text Report";
 $string['downloadtexttotals'] = "Download Summary Text Report";
 $string['autoattend'] = "Automatically take attendance based on user activity logs";
+$string['defaultautoattend'] = "Whether to take attendance based on user activity logs by default";
 $string['autoattendmulti'] = "Automatically take attendance for all rolls based on user activity logs";
 $string['auto'] = "auto";
+$string['gradevalue'] = "Make this roll gradeable";
+$string['defaultgrade'] = " Whether to make attendance rolls gradeable by default";
+$string['gradevaluemulti'] = "Make these rolls gradeable";
+$string['maxgradevalue'] = "Maximum grade value for full attendance";
+$string['defaultmaxgrade'] = "What the default maximum grade value for full attendance should be";
 
 
 ?>
index c53c5b8301378aa0c30969aace5f2a3ca955d37e..d26774944c51b3caf9027d30340bfead4d4e08ba 100644 (file)
@@ -142,60 +142,6 @@ if (isset($_POST["course"]))  {
 
     unset($SESSION->modform); // Clear any old ones that may be hanging around.
 
-
-
-
-/*    optional_variable($id);    // Course Module ID, or
-    optional_variable($a);     // attendance ID
-
-/// populate the appropriate objects
-    if ($id) {
-        if (! $course = get_record("course", "id", $id)) {
-            error("Course is misconfigured");
-        }
-        if (! $attendance = get_record("attendance", "course", $id)) {
-            error("Course module is incorrect");
-        }
-        if (! $cm = get_coursemodule_from_instance("attendance", $attendance->id, $id)) {
-            error("Course Module ID was incorrect");
-        }
-        if (! $attendances = get_records("attendance", "course", $cm->course)) {
-            error("Course module is incorrect");
-        }
-
-    } else {
-        if (! $attendance = get_record("attendance", "id", $a)) {
-            error("Course module is incorrect");
-        }
-        if (! $course = get_record("course", "id", $attendance->course)) {
-            error("Course is misconfigured");
-        }
-        if (! $cm = get_coursemodule_from_instance("attendance", $attendance->id, $course->id)) {
-            error("Course Module ID was incorrect");
-        }
-        if (! $attendances = get_records("attendance", "course", $cm->course)) {
-            error("Course module is incorrect");
-        }
-    }
-
-    require_login($course->id);
-
-    add_to_log($course->id, "attendance", "add", "add.php?id=$course->id");
-
-/// Print the page header
-    if ($course->category) {
-        $navigation = "<A HREF=\"../../course/view.php?id=$course->id\">$course->shortname</A> ->";
-    }
-
-    $strattendances = get_string("modulenameplural", "attendance");
-    $strattendance  = get_string("modulename", "attendance");
-    $straddmultiple  = get_string("addmultiple", "attendance");
-    
-    print_header("$course->shortname: $straddmultiple", "$course->fullname",
-                 "$navigation <A HREF=index.php?id=$course->id>$strattendances</A> -> $straddmultiple", 
-                  "", "", true, "&nbsp;", 
-                  navmenu($course));
-*/
  
 /// Print the main part of the page
 
@@ -204,6 +150,13 @@ if (isset($_POST["course"]))  {
     //require_once("lib.php")
 // determine the end date for the course based on the number of sections and the start date
 $course->enddate = $course->startdate + $course->numsections * 604800;
+
+if (isset($CFG->attendance_dynsection) && ($CFG->attendance_dynsection == "1")) { $form->dynsection = 1; }
+if (isset($CFG->attendance_autoattend) && ($CFG->attendance_autoattend == "1")) { $form->autoattend = 1; }
+if (isset($CFG->attendance_grade) && ($CFG->attendance_grade == "1")) { $form->grade = 1; }
+$form->maxgrade = isset($CFG->attendance_maxgrade)?$CFG->attendance_maxgrade:0;
+$form->hours = isset($CFG->attendance_default_hours)?$CFG->attendance_default_hours:1;
+
 ?>
 <FORM name="form" method="post" action="<?=$ME ?>">
 <CENTER>
@@ -246,12 +199,33 @@ $course->enddate = $course->startdate + $course->numsections * 604800;
       <input type="checkbox" name="dynsection" <?php echo !empty($form->dynsection) ? 'checked' : '' ?> >
     </TD>
 </tr>
+<tr valign=top>
+    <TD align="right"><P><B><?php print_string("autoattendmulti", "attendance") ?>:</B></P></TD>
+    <TD align="left">
+      <input type="checkbox" name="autoattend" <?php echo !empty($form->autoattend) ? 'checked' : '' ?> >
+    </TD>
+</tr>
 <?php // starting with 2 to allow for the nothing value in choose_from_menu to be the default of 1
 for ($i=2;$i<=24;$i++){ $opt[$i] = $i; } ?>
 <TR valign=top>
     <TD align=right><P><B><?php print_string("hoursineachclass", "attendance") ?>:</B></P></TD>
-    <TD  colspan="3" align="left"><?php choose_from_menu($opt, "hours", $CFG->attendance_default_hours, "1","","1") ?></td>
+    <TD  colspan="3" align="left"><?php choose_from_menu($opt, "hours", $form->hours, "1","","1") ?></td>
 </tr>
+
+<tr valign=top>
+    <TD align="right"><P><B><?php print_string("gradevaluemulti", "attendance") ?>:</B></P></TD>
+    <TD align="left">
+      <input type="checkbox" name="grade" <?php echo !empty($form->grade) ? 'checked' : '' ?> >
+    </TD>
+</tr>
+<?php // starting with 2 to allow for the nothing value in choose_from_menu to be the default of 1
+for ($i=0;$i<=100;$i++){ $opt2[$i] = $i; } ?>
+<TR valign=top>
+    <TD align=right><P><B><?php print_string("maxgradevalue", "attendance") ?>:</B></P></TD>
+    <TD  colspan="3" align="left"><?php choose_from_menu($opt2, "maxgrade", $form->maxgrade, "0","","0") ?></td>
+</tr>
+
+
 </TABLE>
 <!-- These hidden variables are always the same -->
 <INPUT type="hidden" name=course        value="<?php p($form->course) ?>">
index f77b389d7be4139b4c51d88a368decfa1518ab73..ddf557e8dac4789d23e41e2e5d91ed1c4bc0ffb2 100644 (file)
@@ -4,8 +4,9 @@
 <tr valign=top>
        <td align=right><p>attendance_dynsection:</td>
        <td>
-       <input type="checkbox" name="attendance_dynsection" value="1" <? echo !empty($CFG->attendance_dynsection) ? 'checked' : '' ?> >
-    </td>
+               <? $optds[0] = "No";$optds[1] = "Yes";
+               choose_from_menu($optds, "attendance_dynsection", $CFG->attendance_dynsection, ""); ?>
+  </td>
     <td>
                <? p(get_string("defaultdynamicsection","attendance")) ?>
        </td>
     </td>
 </tr>
 
+<tr valign=top>
+       <td align=right><p>attendance_autoattend:</td>
+       <td>
+               <? $optaa[0] = "No";$optaa[1] = "Yes";
+               choose_from_menu($optaa, "attendance_autoattend", $CFG->attendance_autoattend, ""); ?>
+    </td>
+    <td>
+               <? p(get_string("defaultautoattend","attendance")) ?>
+       </td>
+</tr>
+
+<tr valign=top>
+       <td align=right><p>attendance_grade:</td>
+       <td>
+               <? $optgr[0] = "No";$optgr[1] = "Yes";
+               choose_from_menu($optgr, "attendance_grade", $CFG->attendance_grade, ""); ?>
+    </td>
+    <td>
+               <? p(get_string("defaultgrade","attendance")) ?>
+       </td>
+</tr>
+
+<tr valign=top>
+       <td align=right><p>attendance_maxgrade:</td>
+       <td>
+               <? for ($i=0;$i<=100;$i++){ $opt4[$i] = $i; }
+               choose_from_menu($opt4, "attendance_maxgrade", $CFG->attendance_maxgrade, ""); ?>
+    </td>
+    <td>
+       <?php p(get_string("defaultmaxgrade","attendance")) ?>
+    </td>
+</tr>
+
+
 <tr>
     <td colspan=3 align=center>
        <input type="submit" value="<?php print_string("savechanges") ?>"></td>
index 603e7f42cb1aabd1c3ed604e5f86fe85f8f00888..54ab5f3d160c0d4d0e70428051762cc9eeb24fc7 100755 (executable)
@@ -35,6 +35,7 @@ function attendance_add_instance($attendance) {
      $attendance->timemodified = time();
      $attendance->dynsection = !empty($attendance->dynsection) ? 1 : 0;
     $attendance->autoattend = !empty($attendance->autoattend) ? 1 : 0;
+    $attendance->grade = !empty($attendance->grade) ? 1 : 0;
      if (empty($attendance->day)) {
        $attendance->day = make_timestamp($attendance->theyear, 
                           $attendance->themonth, $attendance->theday);
@@ -73,6 +74,7 @@ function attendance_update_instance($attendance) {
     $attendance->id = $attendance->instance;
     $attendance->dynsection = !empty($attendance->dynsection) ? 1 : 0;
     $attendance->autoattend = !empty($attendance->autoattend) ? 1 : 0;
+    $attendance->grade = !empty($attendance->grade) ? 1 : 0;
 
      $attendance->day = make_timestamp($attendance->theyear, 
                        $attendance->themonth, $attendance->theday); 
@@ -260,12 +262,15 @@ function attendance_cron () {
 /// This function searches for things that need to be done, such 
 /// as sending out mail, toggling flags etc ... 
     global $CFG;
+   echo "Attendance: Performing automatic attendance logging\n";
 // look for all attendance instances set to autoattend
        $attendances = get_records("attendance", "autoattend", 1, "course ASC");
        $td = attendance_find_today(time());
        $tm = attendance_find_tomorrow(time());
        foreach($attendances as $attendance) {
     if (($attendance->day >=$td ) && ($attendance->day < $tm)) {
+    echo "Attendance: Taking attendance for $attendance->name\n";
+
                        if(!isset($courses[$attendance->course]->students)) {
                          $courses[$attendance->course]->students = 
                            attendance_get_course_students($attendance->course, "u.lastname ASC");
@@ -298,10 +303,29 @@ function attendance_cron () {
 function attendance_grades($attendanceid) {
 /// Must return an array of grades for a given instance of this module, 
 /// indexed by user.  It also returns a maximum allowed grade.
-/// NOT IMPLEMENTED AT THIS TIME - WILL DO GRADING BY ATTENDANCE STUFF IN A LATER VERSION
-    $return->grades = NULL;
-    $return->maxgrade = NULL;
-
+    $attendance = get_record("attendance", "id", $attendanceid);
+    if ($attendance->grade == "1") {
+      $students = get_course_students($attendance->course);
+      foreach ($students as $student) {
+       $rolls = attendance_get_records("attendance_roll", 
+          "dayid",$attendance->id,
+          "userid",$student->id);
+        $abs=$tar=0;
+        if ($rolls) {
+          foreach ($rolls as $roll) { 
+            if ($roll->status == 1) {$tar++;}
+               elseif ($roll->status == 2) {$abs++;}
+                 }
+                 $total = $attendance->hours - attendance_tally_overall_absences_decimal($abs, $tar);
+                 $percent = ($total != 0)?$total/$attendance->hours:0;
+                 $return->grades[$student->id] = ($percent == 0)?0.0:$attendance->maxgrade * $percent;
+               } else  { $return->grades[$student->id] = $attendance->maxgrade; }
+      } // foreach student
+      $return->maxgrade = $attendance->maxgrade;
+    } else {  // if attendance->grade == "1"
+      $return->grades = NULL;
+      $return->maxgrade = NULL;
+    }// else for if attendance->grade == "1"
     return $return;
 }
 
@@ -345,7 +369,7 @@ function attendance_get_course_students($courseid, $sort="u.lastaccess DESC") {
 * @param       int     $tardies        the total number of tardies for a span of time
 * @return      float   the number of absences it adds up to - may be a decimal!
 */
-function tally_overall_absences_decimal($absences, $tardies) {
+function attendance_tally_overall_absences_decimal($absences, $tardies) {
     global $CFG;
        if (isset($CFG->attendance_tardies_per_absence) && ($CFG->attendance_tardies_per_absence>0)) {
          return $absences + ($tardies/$CFG->attendance_tardies_per_absence);
@@ -363,7 +387,7 @@ function tally_overall_absences_decimal($absences, $tardies) {
 * @param       int     $tardies        the total number of tardies for a span of time
 * @return      string  the number of absences it adds up to - may have a fractional component!
 */
-function tally_overall_absences_fraction($absences, $tardies) {
+function attendance_tally_overall_absences_fraction($absences, $tardies) {
     global $CFG;
        if (isset($CFG->attendance_tardies_per_absence) && ($CFG->attendance_tardies_per_absence>0)) {
          $whole = floor($tardies/$CFG->attendance_tardies_per_absence);
index 806dafbc637015ac98871eaacc1cfc8a664fa95c..b40ae258a88e35b07fbf717dc56aa206c3190d37 100755 (executable)
@@ -3,8 +3,20 @@
 
 <!-- RJJ I'm using inline CSS styles for some stuff in this page because I want to centralize -->
 <!-- the logic and styles in a single directory -->
-  <?php @include_once("$CFG->dirroot/mod/attendance/lib.php")
+<?php @include_once("$CFG->dirroot/mod/attendance/lib.php");
     //require_once("lib.php")
+
+// error_reporting(E_ALL);
+ // if we're adding a new instance
+if (empty($form->id)) {
+       if (isset($CFG->attendance_dynsection) && ($CFG->attendance_dynsection == "1")) { $form->dynsection = 1; }
+       if (isset($CFG->attendance_autoattend) && ($CFG->attendance_autoattend == "1")) { $form->autoattend = 1; }
+       if (isset($CFG->attendance_grade) && ($CFG->attendance_grade == "1")) { $form->grade = 1; }
+       $form->maxgrade = isset($CFG->attendance_maxgrade)?$CFG->attendance_maxgrade:0;
+       $form->hours = isset($CFG->attendance_default_hours)?$CFG->attendance_default_hours:1;
+       $form->day = time();
+       $form->notes = "";
+}
     ?>
 <FORM name="form" method="post" action="<?=$ME ?>">
 <CENTER>
       <input type="checkbox" name="dynsection" <?php echo !empty($form->dynsection) ? 'checked' : '' ?> >
     </TD>
 </tr>
+<tr valign=top>
+    <TD align="right"><P><B><?php print_string("autoattend", "attendance") ?>:</B></P></TD>
+    <TD align="left">
+      <input type="checkbox" name="autoattend" <?php echo !empty($form->autoattend) ? 'checked' : '' ?> >
+    </TD>
+</tr>
 <?php // starting with 2 to allow for the nothing value in choose_from_menu to be the default of 1
 for ($i=2;$i<=24;$i++){ $opt[$i] = $i; } ?>
 <TR valign=top>
     <TD align=right><P><B><?php print_string("hoursinclass", "attendance") ?>:</B></P></TD>
     <TD  colspan="3" align="left"><?php choose_from_menu($opt, "hours", $form->hours, "1","","1") ?></td>
 </tr>
+ <tr valign=top>
+    <TD align="right"><P><B><?php print_string("gradevalue", "attendance") ?>:</B></P></TD>
+    <TD align="left">
+      <input type="checkbox" name="grade" <?php echo !empty($form->grade) ? 'checked' : '' ?> >
+    </TD>
+</tr>
+<?php // starting with 2 to allow for the nothing value in choose_from_menu to be the default of 1
+for ($i=0;$i<=100;$i++){ $opt2[$i] = $i; } ?>
+<TR valign=top>
+    <TD align=right><P><B><?php print_string("maxgradevalue", "attendance") ?>:</B></P></TD>
+    <TD  colspan="3" align="left"><?php choose_from_menu($opt2, "maxgrade", $form->maxgrade, "0","","0") ?></td>
+</tr>
+
 <tr valign=top>
     <td align=right><p><b><?php print_string("notes", "attendance") ?>:</b></p></td>
     <td colspan="3">
-        <input type="text" name="notes" size=60 value="<?php p($form->notes) ?>">
+        <input type="text" name="notes" size=60 value="<?php p($form->notes)?>">
     </td>
 </tr>
 </TABLE>
@@ -45,7 +76,7 @@ for ($i=2;$i<=24;$i++){ $opt[$i] = $i; } ?>
 
 <?php  // if we're modifying an existing instance of attendance instead 
     //   of creating a new one
- if ($form->id) {
+ if (isset($form->id)) {
    // get the list of attendance records for all hours of the given day and 
    // put it in the array for use in the attendance table
    $rolls = get_records("attendance_roll", "dayid", $form->id);
@@ -106,7 +137,8 @@ if ($form->hours >1) {
        for($j=1;$j<=$form->hours;$j++) {
       // set the attendance defaults for each student
          $r1c=$r2c=$r3c=" ";
-    $rollstatus = (($form->edited==0)?$CFG->attendance_default_student_status:$sroll[$student->id][$j]->status);
+    $rollstatus = (($form->edited==0)?$CFG->attendance_default_student_status:
+      ((isset($sroll[$student->id][$j]->status)?$sroll[$student->id][$j]->status:0)));
     if ($rollstatus==1) {$r2c="checked";}
     elseif ($rollstatus==2) {$r3c="checked";}
     else {$r1c="checked";}
index 8a94c7d24480e4779f0d6cbec816988f26ed04ba..ff8318fe9395ff878ea8ae3c0a4f61266c5c38e3 100644 (file)
       echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-left: 1px dotted; border-top: 1px solid;\">".$status."</td>\n";
          } /// for loop
     if ($form->hours > 1) {
-           $tot=tally_overall_absences_fraction($abs,$tar);
+           $tot=attendance_tally_overall_absences_fraction($abs,$tar);
       echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-left: 1px dotted; border-top: 1px solid;\">".$tot."</td></tr>\n";
     }
   }
index 0574b52221192add2647d4c835adec26f8a88ed0..d8a66d57e2452f150d06149da27e595c53b77ded 100644 (file)
@@ -148,7 +148,7 @@ if ($dlsub== "all") {
                    elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {;$abs++;}
                  } /// for loop
          } // outer for for each day of attendance
-    $tot=tally_overall_absences_decimal($abs,$tar);
+    $tot=attendance_tally_overall_absences_decimal($abs,$tar);
     $myxls->write_number($row,$pos,$tot);
                $row++;
   }
@@ -212,7 +212,7 @@ if ($dlsub== "all") {
                    elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {;$abs++;}
                  } /// for loop
          } // outer for for each day of attendance
-    $tot=tally_overall_absences_decimal($abs,$tar);
+    $tot=attendance_tally_overall_absences_decimal($abs,$tar);
     echo "\t".$tot."\n";
                $row++;
   }
@@ -422,7 +422,7 @@ while (($multipage || $onepage) && (!$endonepage)) {
                    elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {;$abs++;}
                  } /// for loop
            } // outer for for each day of attendance
-      $tot=tally_overall_absences_fraction($abs,$tar);
+      $tot=attendance_tally_overall_absences_fraction($abs,$tar);
       echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-left: 1px dotted; border-top: 1px solid;\">".$tot."</td></tr>\n";
     }
   }  // foreach
index a58ede777fd111dcc5bcbf5e0f419b9d772ef87e..875f1d5a5dbc77342cdbd31bc244dd2e0ae8a7d7 100644 (file)
@@ -149,7 +149,7 @@ if ($dlsub== "all") {
                    elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {;$abs++;}
                  } /// for loop
          } // outer for for each day of attendance
-    $tot=tally_overall_absences_decimal($abs,$tar);
+    $tot=attendance_tally_overall_absences_decimal($abs,$tar);
     $myxls->write_number($row,$pos,$tot);
                $row++;
   }
@@ -212,7 +212,7 @@ if ($dlsub== "all") {
                    elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {;$abs++;}
                  } /// for loop
          } // outer for for each day of attendance
-    $tot=tally_overall_absences_decimal($abs,$tar);
+    $tot=attendance_tally_overall_absences_decimal($abs,$tar);
     echo "\t".$tot."\n";
                $row++;
   }
@@ -429,7 +429,7 @@ while (($multipage || $onepage) && (!$endonepage)) {
                    elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {;$abs++;}
                  } /// for loop
            } // outer for for each day of attendance
-      $tot=tally_overall_absences_fraction($abs,$tar);
+      $tot=attendance_tally_overall_absences_fraction($abs,$tar);
       echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-left: 1px dotted; border-top: 1px solid;\">".$tot."</td></tr>\n";
     }
   }  // foreach