moodle/mod/attendance/viewall.php
jungwirr 5dc088851c viewweek.php:
Added a report to view attendance rolls by week instead of all or one -

Updated view.php and viewall.php to reflect these options as well.
2003-09-18 21:23:41 +00:00

319 lines
13 KiB
PHP

<? // $Id$
/// This page prints all instances of attendance in a given course
require_once("../../config.php");
require_once("lib.php" );
/// @include_once("$CFG->dirroot/mod/attendance/lib.php");
/// error_reporting(E_ALL);
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 (! $attendances = get_records("attendance", "course", $id, "day ASC ")) {
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", "viewall", "viewall.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");
$strallattendance = get_string("allmodulename", "attendance");
print_header("$course->shortname: $strallattendance", "$course->fullname",
"$navigation <A HREF=index.php?id=$course->id>$strattendances</A> -> $strallattendance",
"", "", true, "&nbsp;",
navmenu($course, $cm));
/// Print the main part of the page
if ($attendances) {
if ( !(isteacher($course->id) || isstudent($course->id)) ) {
notice(get_string("noviews", "attendance"));
print_footer($course); exit;
}
/// create an array of all the attendance objects for the entire course
$numatt=0;
$numhours=0;
foreach ($attendances as $attendance){
// store the raw attendance object
$atts[$numatt]->attendance=$attendance;
// tally the hours for possible paging of the report
$numhours=$numhours+$attendance->hours;
// 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
if (isstudent($course->id)) {
$rolls = get_records("attendance_roll", "dayid", $form->id, "userid", $USER->id);
} else { // must be a teacher
$rolls = get_records("attendance_roll", "dayid", $attendance->id);
}
if ($rolls) {
foreach ($rolls as $roll) {
$atts[$numatt]->sroll[$roll->userid][$roll->hour]->status=$roll->status;
$atts[$numatt]->sroll[$roll->userid][$roll->hour]->notes=$roll->notes;
}
}
$numatt++;
}
// A LOOP FOR CREATING SINGLE-USER VERSION OF THE REPORT OR A ONE-PAGE REPORT
if (isstudent($course->id)) {
$onepage=true;
$multipage=false;
} else if (!(isset($onepage))){
$onepage=false;
$multipage=true;
} else if ($onepage) {
$multipage=false;
} else { // if onepage is set to false
$multilpage=true;
}
// adjust the width for the report for students
if (($onetable) || ($CFG->attendance_hours_in_full_report == 0)) {
$hoursinreport = 100+$numhours;
} else if (isstudent($course->id)) {
$hoursinreport = $CFG->attendance_hours_in_full_report + 15;
} else {
$hoursinreport = $CFG->attendance_hours_in_full_report;
}
while (($multipage || $onepage) && (!$endonepage)) {
// this makes for a one iteration loop for multipage
$multipage = false;
if ($numhours>=$hoursinreport) {
if (!isset($pagereport)) {
// $pagereport is used to determine whether the report needs to be paged at all
$pagereport=true;
$endatt=0;
$page=1;
}
// find the last hour to have on this page of the report
// go to the next (or first) page
// $endatt++;
// $startatt=$endatt;
$curpage=1;
$endatt=0;
for($curpage=1;true;$curpage++) { // the for loop is broken from the inside
$pagehours=$atts[$endatt]->attendance->hours;
$startatt=$endatt;
while(($pagehours<$hoursinreport)) {
if ($endatt>=$numatt) { break 2; } // end the page number calculations and trigger the end of a multi-page report!
$endatt++;
$pagehours=$pagehours+$atts[$endatt]->attendance->hours;
}
// if this is the page we're on, save the info
if ($curpage == $page) {$endatt_target = $endatt; $startatt_target = $startatt; }
} // hopefully at this point, startatt and endatt are set correctly for the current page
if ($curpage == $page) {$endatt_target = $endatt; $startatt_target = $startatt; } else {
$endatt=$endatt_target; $startatt=$startatt_target; }
$maxpages = $curpage;
} else {$pagereport=false;}
$minatt=($pagereport ? $startatt : 0);
$maxatt=($pagereport ? $endatt : $numatt);
if ((!$pagereport) || ($page == $maxpages)) {$endonepage = true;} // end a one page display
//
//
// ALL PRELIMINARY STUFF DONE - MAKE THE MEAT OF THE PAGE
//
//
// print other links at top of page
$strviewone = get_string("viewone", "attendance");
$strviewtable = get_string("viewtable", "attendance");
$strviewmulti = get_string("viewmulti", "attendance");
$strviewweek = get_string("viewweek", "attendance");
if ($onepage) { // one page for all tables
echo "<p align=\"right\"><a href=\"viewall.php?id=".$course->id."\">";
echo "$strviewmulti</a><br />";
echo "<a href=\"viewall.php?id=".$course->id."&onetable=1\">";
echo "$strviewtable</a><br />";
echo "<a href=\"viewweek.php?scope=week&id=".$atts[$minatt]->attendance->id."\">";
echo "$strviewweek</a></p>";
} else if ($onetable) { // one table for all
echo "<p align=\"right\"><a href=\"viewall.php?id=".$course->id."\">";
echo "$strviewmulti</a><br />";
echo "<a href=\"viewall.php?id=".$course->id."&onepage=1\">";
echo "$strviewone</a><br />";
echo "<a href=\"viewweek.php?scope=week&id=".$atts[$minatt]->attendance->id."\">";
echo "$strviewweek</a></p>";
} else { // multiple pages
echo "<p align=\"right\"><a href=\"viewall.php?id=".$course->id."&onepage=1\">";
echo "$strviewone</a><br />";
echo "<a href=\"viewall.php?id=".$course->id."&onetable=1\">";
echo "$strviewtable</a><br />";
echo "<a href=\"viewweek.php?scope=week&id=".$atts[$minatt]->attendance->id."\">";
echo "$strviewweek</a></p>";
}
if (!$onepage) {
attendance_print_pagenav();
}
// build the table for attendance roll
// this is the wrapper table
echo "<table align=\"center\" width=\"80\" class=\"generalbox\"".
"border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>".
"<td bgcolor=\"#ffffff\" class=\"generalboxcontent\">";
// this is the main table
echo "<table width=\"100%\" border=\"0\" valign=\"top\" align=\"center\" ".
"cellpadding=\"5\" cellspacing=\"1\" class=\"generaltable\">";
if (isteacher($course->id)) {
echo "<tr><th valign=\"top\" align=\"right\" colspan=\"3\" nowrap class=\"generaltableheader\">".
"&nbsp;</th>\n";
}
// $minpage=0;$maxpage=$numatt;
// print the date headings at the top of the table
// for each day of attendance
for($k=$minatt;$k<$maxatt;$k++) {
// put notes for the date in the date heading
$notes = ($atts[$k]->attendance->notes != "") ? ":<br />".$atts[$k]->attendance->notes : "";
echo "<th valign=\"top\" align=\"left\" colspan=\"" .$atts[$k]->attendance->hours. "\" nowrap class=\"generaltableheader\">".
userdate($atts[$k]->attendance->day,"%m/%0d").$notes."</th>\n";
}
// if we're at the end of the report
if ($maxatt==$numatt || !$pagereport) {
echo "<th valign=\"top\" align=\"left\" nowrap class=\"generaltableheader\">&nbsp;</th>\n";
}
echo "</tr>\n";
// print the second level headings with name and possibly hour numbers
if (isteacher($course->id)) {
echo "<tr><th valign=\"top\" align=\"left\" nowrap class=\"generaltableheader\">Last Name</th>\n";
echo "<th valign=\"top\" align=\"left\" nowrap class=\"generaltableheader\">First Name</th>\n";
echo "<th valign=\"top\" align=\"left\" nowrap class=\"generaltableheader\">ID</th>\n";
}
// generate the headers for the attendance hours
for($k=$minatt;$k<$maxatt;$k++) {
if ($atts[$k]->attendance->hours > 1) {
for($i=1;$i<=$atts[$k]->attendance->hours;$i++) {
echo "<th valign=\"top\" align=\"center\" nowrap class=\"generaltableheader\">".$i."</th>\n";
}
} else { echo "<th valign=\"top\" align=\"center\" nowrap class=\"generaltableheader\">&nbsp;</th>\n"; }
}
// if we're at the end of the report
if ($maxatt==$numatt || !$pagereport) {
echo "<th valign=\"top\" align=\"center\" nowrap class=\"generaltableheader\">total</th>";
}
echo "</tr>\n";
// get the list of students along with student ID field
// get back array of stdclass objects in sorted order, with members:
// id, username,firstname,lastname,maildisplay,mailformat,email,city,country,
// lastaccess,lastlogin,picture (picture is null, 0, or 1), idnumber
if (isstudent($course->id)) {
$students[0] = get_user_info_from_db("id", $USER->id);
} else { // must be a teacher
$students = attendance_get_course_students($attendance->course, "u.lastname ASC");
}
$i=0;
$A = get_string("absentshort","attendance");
$T = get_string("tardyshort","attendance");
$P = get_string("presentshort","attendance");
foreach ($students as $student) {
if (isteacher($course->id)) {
echo "<tr><td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-top: 1px solid;\">".$student->lastname."</td>\n";
echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-top: 1px solid;\">".$student->firstname."</td>\n";
$studentid=(($student->idnumber != "") ? $student->idnumber : "&nbsp");
echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-top: 1px solid;\">".$studentid."</td>\n";
}
for($k=$minatt;$k<$maxatt;$k++) { // for eacj day of attendance for the student
for($j=1;$j<=$atts[$k]->attendance->hours;$j++) {
// set the attendance defaults for each student
if ($atts[$k]->sroll[$student->id][$j]->status == 1) {$status=$T;}
elseif ($atts[$k]->sroll[$student->id][$j]->status == 2) {$status=$A;}
else {$status=$P;}
echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-left: 1px dotted; border-top: 1px solid;\">".$status."</td>\n";
} /// for loop
}
if ($maxatt==$numatt || !$pagereport) {
// tally total attendances for the students
$abs=$tar=0;
for($k=0;$k<$numatt;$k++) { // for eacj day of attendance for the student
for($j=1;$j<=$atts[$k]->attendance->hours;$j++) {
// set the attendance defaults for each student
if ($atts[$k]->sroll[$student->id][$j]->status == 1) {;$tar++;}
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);
echo "<td align=\"left\" nowrap class=\"generaltablecell\" style=\"border-left: 1px dotted; border-top: 1px solid;\">".$tot."</td></tr>\n";
}
} // foreach
/// doing the table manually now
/// print_table($table);
/// ending for the table
echo "</table></td></tr></table>\n";
if ($onepage) {$page++; echo "<br /> <br />\n"; }
} // while loop for multipage/one page printing
if (!$onepage) { attendance_print_pagenav(); }
} else { error("There are no attendance rolls in this course.");} // for no attendance rolls
/// Finish the page
print_footer($course);
function attendance_print_pagenav() {
global $pagereport, $minatt, $maxatt, $course, $page, $numatt, $maxpages;
if ($pagereport) {
$of = get_string('of','attendance');
$pg = get_string('page');
$next = get_string('next');
$prev = get_string('previous', 'attendance');
echo "<center><table align=\"center\" width=\"80\" class=\"generalbox\"".
"border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>".
"<td bgcolor=\"#ffffff\" class=\"generalboxcontent\">";
// this is the main table
echo "<table width=\"100%\" border=\"0\" valign=\"top\" align=\"center\" ".
"cellpadding=\"5\" cellspacing=\"1\" class=\"generaltable\">";
echo "<tr>";
if ($minatt!=0) {
echo "<th valign=\"top\" align=\"right\" nowrap class=\"generaltableheader\">".
"<a href=\"viewall.php?id=".$course->id ."&pagereport=1&page=".($page-1)."\">$prev $pg</a></th>\n";
}
echo "<th valign=\"top\" align=\"right\" nowrap class=\"generaltableheader\">".
"$pg $page $of $maxpages</th>\n";
if ($maxatt!=$numatt) {
echo "<th valign=\"top\" align=\"right\" nowrap class=\"generaltableheader\">".
"<a href=\"viewall.php?id=".$course->id ."&pagereport=1&page=". ($page+1)."\">$next $pg</a></th>";
}
echo "</tr></table></td></tr></table></center>\n";
}
}
?>