Browse Source

Fixes #225 Add columns to show users taken sessions by acronym

MOODLE_32_STABLE
Antonio C. Mariani 8 years ago
committed by Dan Marsden
parent
commit
d5d7369af1
  1. 70
      classes/summary.php
  2. 92
      renderer.php
  3. 10
      styles.css

70
classes/summary.php

@ -41,6 +41,9 @@ class mod_attendance_summary {
/** @var array pointsbygroup (groupid, numsessions, maxpoints) */ /** @var array pointsbygroup (groupid, numsessions, maxpoints) */
private $maxpointsbygroupsessions; private $maxpointsbygroupsessions;
/** @var array userstakensessionsbyacronym */
private $userstakensessionsbyacronym;
/** /**
* Initializes the class * Initializes the class
* *
@ -53,6 +56,7 @@ class mod_attendance_summary {
$this->attendanceid = $attendanceid; $this->attendanceid = $attendanceid;
$this->compute_users_points($userids, $startdate, $enddate); $this->compute_users_points($userids, $startdate, $enddate);
$this->compute_users_taken_sessions_by_acronym($userids, $startdate, $enddate);
} }
/** /**
@ -119,6 +123,11 @@ class mod_attendance_summary {
} }
$usersummary->takensessionspercentage = attendance_calc_fraction($usersummary->takensessionspoints, $usersummary->takensessionspercentage = attendance_calc_fraction($usersummary->takensessionspoints,
$usersummary->takensessionsmaxpoints); $usersummary->takensessionsmaxpoints);
if (isset($this->userstakensessionsbyacronym[$userid])) {
$usersummary->userstakensessionsbyacronym = $this->userstakensessionsbyacronym[$userid];
} else {
$usersummary->userstakensessionsbyacronym = array();
}
return $usersummary; return $usersummary;
} }
@ -224,6 +233,67 @@ class mod_attendance_summary {
$this->userspoints = $DB->get_records_sql($sql, $params); $this->userspoints = $DB->get_records_sql($sql, $params);
} }
/**
* Computes the summary of taken sessions by acronym
*
* @param array userids user instances identifier
* @param int $startdate Attendance sessions startdate
* @param int $enddate Attendance sessions enddate
* @return null
*/
private function compute_users_taken_sessions_by_acronym($userids=array(), $startdate = '', $enddate = '') {
global $DB;
list($this->course, $cm) = get_course_and_cm_from_instance($this->attendanceid, 'attendance');
$this->groupmode = $cm->effectivegroupmode;
$params = array(
'attid' => $this->attendanceid,
'cstartdate' => $this->course->startdate,
);
$where = '';
if (!empty($userids)) {
list($insql, $inparams) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED);
$where .= ' AND atl.studentid ' . $insql;
$params = array_merge($params, $inparams);
}
if (!empty($startdate)) {
$where .= ' AND ats.sessdate >= :startdate';
$params['startdate'] = $startdate;
}
if (!empty($enddate)) {
$where .= ' AND ats.sessdate < :enddate ';
$params['enddate'] = $enddate;
}
if ($this->with_groups()) {
$joingroup = 'LEFT JOIN {groups_members} gm ON (gm.userid = atl.studentid AND gm.groupid = ats.groupid)';
$where .= ' AND (ats.groupid = 0 or gm.id is NOT NULL)';
} else {
$joingroup = '';
$where .= ' AND ats.groupid = 0';
}
$sql = "SELECT atl.studentid AS userid, sts.setnumber, sts.acronym, COUNT(*) AS numtakensessions
FROM {attendance_sessions} ats
JOIN {attendance_log} atl ON (atl.sessionid = ats.id)
JOIN {attendance_statuses} sts
ON (sts.attendanceid = ats.attendanceid AND
sts.id = atl.statusid AND
sts.deleted = 0 AND sts.visible = 1)
{$joingroup}
WHERE ats.attendanceid = :attid
AND ats.sessdate >= :cstartdate
AND ats.lasttakenby != 0
{$where}
GROUP BY atl.studentid, sts.setnumber, sts.acronym";
$this->userstakensessionsbyacronym = array();
foreach ($DB->get_recordset_sql($sql, $params) AS $rec) {
$this->userstakensessionsbyacronym[$rec->userid][$rec->setnumber][$rec->acronym] = $rec->numtakensessions;
}
}
/** /**
* Computes and store the maximum points possible for each group session * Computes and store the maximum points possible for each group session
* *

92
renderer.php

@ -856,14 +856,18 @@ class mod_attendance_renderer extends plugin_renderer_base {
$table->attributes['class'] .= ' summaryreport'; $table->attributes['class'] .= ' summaryreport';
} }
$colclass = null;
// User picture. // User picture.
$table->head[] = ''; $table->head[] = '';
$table->align[] = 'left'; $table->align[] = 'left';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
$table->head[] = $this->construct_fullname_head($reportdata); $table->head[] = $this->construct_fullname_head($reportdata);
$table->align[] = 'left'; $table->align[] = 'left';
$table->size[] = ''; $table->size[] = '';
$table->colclasses[] = $colclass;
$sessionstats = array(); $sessionstats = array();
foreach ($reportdata->sessions as $sess) { foreach ($reportdata->sessions as $sess) {
@ -892,40 +896,65 @@ class mod_attendance_renderer extends plugin_renderer_base {
$table->head[] = $sesstext; $table->head[] = $sesstext;
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
}
$setnumber = -1;
foreach ($reportdata->statuses AS $sts) {
if ($sts->setnumber != $setnumber) {
$colclass = empty($colclass) ? 'columncontrast' : null;
$setnumber = $sts->setnumber;
}
$table->head[] = $sts->acronym;
$table->align[] = 'center';
$table->size[] = '1px';
$table->colclasses[] = $colclass;
} }
$table->head[] = get_string('takensessions', 'attendance'); $table->head[] = get_string('takensessions', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$colclass = empty($colclass) ? 'columncontrast' : null;
$table->colclasses[] = $colclass;
$table->head[] = get_string('points', 'attendance'); $table->head[] = get_string('points', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
$table->head[] = get_string('percentage', 'attendance'); $table->head[] = get_string('percentage', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
if ($reportdata->pageparams->view == ATT_VIEW_SUMMARY) { if ($reportdata->pageparams->view == ATT_VIEW_SUMMARY) {
$table->head[] = get_string('sessionstotal', 'attendance'); $table->head[] = get_string('sessionstotal', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$colclass = empty($colclass) ? 'columncontrast' : null;
$table->colclasses[] = $colclass;
$table->head[] = get_string('pointsallsessions', 'attendance'); $table->head[] = get_string('pointsallsessions', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
$table->head[] = get_string('percentageallsessions', 'attendance'); $table->head[] = get_string('percentageallsessions', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
$table->head[] = get_string('maxpossiblepoints', 'attendance'); $table->head[] = get_string('maxpossiblepoints', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$colclass = empty($colclass) ? 'columncontrast' : null;
$table->colclasses[] = $colclass;
$table->head[] = get_string('maxpossiblepercentage', 'attendance'); $table->head[] = get_string('maxpossiblepercentage', 'attendance');
$table->align[] = 'center'; $table->align[] = 'center';
$table->size[] = '1px'; $table->size[] = '1px';
$table->colclasses[] = $colclass;
} }
if ($bulkmessagecapability) { // Display the table header for bulk messaging. if ($bulkmessagecapability) { // Display the table header for bulk messaging.
@ -948,6 +977,12 @@ class mod_attendance_renderer extends plugin_renderer_base {
} else { } else {
$usersummary = $reportdata->summary->get_taken_sessions_summary_for($user->id); $usersummary = $reportdata->summary->get_taken_sessions_summary_for($user->id);
} }
foreach ($reportdata->statuses AS $sts) {
$row->cells[] = isset($usersummary->userstakensessionsbyacronym[$sts->setnumber][$sts->acronym]) ?
$usersummary->userstakensessionsbyacronym[$sts->setnumber][$sts->acronym] : 0;
}
$row->cells[] = $usersummary->numtakensessions; $row->cells[] = $usersummary->numtakensessions;
$row->cells[] = format_float($usersummary->takensessionspoints, 1, true, true) . ' / ' . $row->cells[] = format_float($usersummary->takensessionspoints, 1, true, true) . ' / ' .
format_float($usersummary->takensessionsmaxpoints, 1, true, true); format_float($usersummary->takensessionsmaxpoints, 1, true, true);
@ -972,37 +1007,46 @@ class mod_attendance_renderer extends plugin_renderer_base {
$table->data[] = $row; $table->data[] = $row;
} }
// Calculate the sum of statuses for each user. if ($reportdata->pageparams->view != ATT_VIEW_SUMMARY) {
$statrow = new html_table_row(); // Calculate the sum of statuses for each user.
$statrow->cells[] = ''; $statrow = new html_table_row();
$statrow->cells[] = get_string('summary'); $statrow->cells[] = '';
foreach ($reportdata->sessions as $sess) { $statrow->cells[] = get_string('summary');
$sessionstats = array(); foreach ($reportdata->sessions as $sess) {
foreach ($reportdata->statuses as $status) { $sessionstats = array();
if ($status->setnumber == $sess->statusset) { foreach ($reportdata->statuses as $status) {
$status->count = 0; if ($status->setnumber == $sess->statusset) {
$sessionstats[$status->id] = $status; $status->count = 0;
$sessionstats[$status->id] = $status;
}
} }
}
foreach ($reportdata->users as $user) { foreach ($reportdata->users as $user) {
if (!empty($reportdata->sessionslog[$user->id][$sess->id])) { if (!empty($reportdata->sessionslog[$user->id][$sess->id])) {
$statusid = $reportdata->sessionslog[$user->id][$sess->id]->statusid; $statusid = $reportdata->sessionslog[$user->id][$sess->id]->statusid;
if (isset($sessionstats[$statusid]->count)) { if (isset($sessionstats[$statusid]->count)) {
$sessionstats[$statusid]->count++; $sessionstats[$statusid]->count++;
}
} }
} }
}
$statsoutput = '<br/>'; $statsoutput = '';
foreach ($sessionstats as $status) { foreach ($sessionstats as $status) {
$statsoutput .= "$status->description: {$status->count}<br/>"; $statsoutput .= "$status->description: {$status->count}<br/>";
}
$cell = new html_table_cell($statsoutput);
$cell->style = 'white-space:nowrap;';
$statrow->cells[] = $cell;
}
foreach ($reportdata->statuses AS $sts) {
$statrow->cells[] = '';
} }
$cell = new html_table_cell($statsoutput); $statrow->cells[] = '';
$cell->style = 'white-space:nowrap;'; $statrow->cells[] = '';
$statrow->cells[] = $cell; $statrow->cells[] = '';
$statrow->cells[] = '';
$table->data[] = $statrow;
} }
$table->data[] = $statrow;
if ($bulkmessagecapability) { // Require that the user can bulk message users. if ($bulkmessagecapability) { // Require that the user can bulk message users.
// Display check boxes that will allow the user to send a message to the students that have been checked. // Display check boxes that will allow the user to send a message to the students that have been checked.

10
styles.css

@ -163,14 +163,6 @@
color: red; color: red;
} }
.path-mod-attendance .summaryreport .c5 { .path-mod-attendance .columncontrast {
background-color: #EAEAEA;
}
.path-mod-attendance .summaryreport .c6 {
background-color: #EAEAEA;
}
.path-mod-attendance .summaryreport .c7 {
background-color: #EAEAEA; background-color: #EAEAEA;
} }

Loading…
Cancel
Save