From: jungwirr Date: Thu, 25 Sep 2003 22:47:11 +0000 (+0000) Subject: Added grading support for attendance - including settings and database X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=29bd1e46c511cec3229c27228e1364256ce3c3cb;p=moodle.git Added grading support for attendance - including settings and database fields. Cleaned up some function names in lib to proper naming conventions. --- diff --git a/lang/en/attendance.php b/lang/en/attendance.php index 5051720201..1e57f0e6ec 100755 --- a/lang/en/attendance.php +++ b/lang/en/attendance.php @@ -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"; ?> diff --git a/mod/attendance/add.php b/mod/attendance/add.php index c53c5b8301..d26774944c 100644 --- a/mod/attendance/add.php +++ b/mod/attendance/add.php @@ -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 = "id\">$course->shortname ->"; - } - - $strattendances = get_string("modulenameplural", "attendance"); - $strattendance = get_string("modulename", "attendance"); - $straddmultiple = get_string("addmultiple", "attendance"); - - print_header("$course->shortname: $straddmultiple", "$course->fullname", - "$navigation id>$strattendances -> $straddmultiple", - "", "", true, " ", - 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; + ?>
@@ -246,12 +199,33 @@ $course->enddate = $course->startdate + $course->numsections * 604800; dynsection) ? 'checked' : '' ?> > + +

:

+ + autoattend) ? 'checked' : '' ?> > + +

:

- attendance_default_hours, "1","","1") ?> + hours, "1","","1") ?> + + +

:

+ + grade) ? 'checked' : '' ?> > + + + + +

:

+ maxgrade, "0","","0") ?> + + + diff --git a/mod/attendance/config.html b/mod/attendance/config.html index f77b389d7b..ddf557e8da 100644 --- a/mod/attendance/config.html +++ b/mod/attendance/config.html @@ -4,8 +4,9 @@

attendance_dynsection: - attendance_dynsection) ? 'checked' : '' ?> > - + attendance_dynsection, ""); ?> + @@ -72,6 +73,40 @@ + +

attendance_autoattend: + + attendance_autoattend, ""); ?> + + + + + + + +

attendance_grade: + + attendance_grade, ""); ?> + + + + + + + +

attendance_maxgrade: + + attendance_maxgrade, ""); ?> + + + + + + + "> diff --git a/mod/attendance/lib.php b/mod/attendance/lib.php index 603e7f42cb..54ab5f3d16 100755 --- a/mod/attendance/lib.php +++ b/mod/attendance/lib.php @@ -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); diff --git a/mod/attendance/mod.html b/mod/attendance/mod.html index 806dafbc63..b40ae258a8 100755 --- a/mod/attendance/mod.html +++ b/mod/attendance/mod.html @@ -3,8 +3,20 @@ - dirroot/mod/attendance/lib.php") +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 = ""; +} ?>

@@ -28,16 +40,35 @@ dynsection) ? 'checked' : '' ?> > + +

:

+ + autoattend) ? 'checked' : '' ?> > + +

:

hours, "1","","1") ?> + +

:

+ + grade) ? 'checked' : '' ?> > + + + + +

:

+ maxgrade, "0","","0") ?> + +

:

- + @@ -45,7 +76,7 @@ for ($i=2;$i<=24;$i++){ $opt[$i] = $i; } ?> 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";} diff --git a/mod/attendance/view.php b/mod/attendance/view.php index 8a94c7d244..ff8318fe93 100644 --- a/mod/attendance/view.php +++ b/mod/attendance/view.php @@ -136,7 +136,7 @@ echo "".$status."\n"; } /// for loop if ($form->hours > 1) { - $tot=tally_overall_absences_fraction($abs,$tar); + $tot=attendance_tally_overall_absences_fraction($abs,$tar); echo "".$tot."\n"; } } diff --git a/mod/attendance/viewall.php b/mod/attendance/viewall.php index 0574b52221..d8a66d57e2 100644 --- a/mod/attendance/viewall.php +++ b/mod/attendance/viewall.php @@ -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 "".$tot."\n"; } } // foreach diff --git a/mod/attendance/viewweek.php b/mod/attendance/viewweek.php index a58ede777f..875f1d5a5d 100644 --- a/mod/attendance/viewweek.php +++ b/mod/attendance/viewweek.php @@ -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 "".$tot."\n"; } } // foreach