diff --git a/absentee.php b/absentee.php index db8b7f3..e270883 100644 --- a/absentee.php +++ b/absentee.php @@ -83,14 +83,28 @@ if (!$table->is_downloading($download, $exportfilename)) { } } - -$table->define_columns(array('coursename', 'aname', 'userid', 'numtakensessions', 'percent', 'timesent')); -$table->define_headers(array(get_string('course'), +$columns = array('coursename', 'aname', 'userid'); +$headers = array(get_string('course'), get_string('pluginname', 'attendance'), - get_string('user'), + get_string('user')); + +$extrafields = array(); +if (!empty($CFG->showuseridentity) && has_capability('moodle/site:viewuseridentity', $context)) { + $extrafields = explode(',', $CFG->showuseridentity); + foreach ($extrafields as $field) { + $columns[] = $field; + $headers[] = get_string($field); + } +} +$columns = array_merge($columns, array('numtakensessions', 'percent', 'timesent')); +$headers = array_merge($headers, array( get_string('takensessions', 'attendance'), get_string('averageattendance', 'attendance'), get_string('triggered', 'attendance'))); + +$table->define_columns($columns); +$table->define_headers($headers); + $table->sortable(true); $table->set_attribute('cellspacing', '0'); $table->set_attribute('class', 'generaltable generalbox'); @@ -119,28 +133,37 @@ if (!empty($sort)) { $records = attendance_get_users_to_notify($courses, $orderby); foreach ($records as $record) { + $row = array(); if (!$table->is_downloading($download, $exportfilename)) { $url = new moodle_url('/mod/attendance/index.php', array('id' => $record->courseid)); - $name = html_writer::link($url, $record->coursename); + $row[] = html_writer::link($url, $record->coursename); $url = new moodle_url('/mod/attendance/view.php', array('studentid' => $record->userid, 'id' => $record->cmid, 'view' => ATT_VIEW_ALL)); - $attendancename = html_writer::link($url, $record->aname); + $row[] = html_writer::link($url, $record->aname); - $username = html_writer::link($url, fullname($record)); + $row[] = html_writer::link($url, fullname($record)); } else { - $name = $record->coursename; - $attendancename = $record->aname; - $username = fullname($record); + $row[] = $record->coursename; + $row[] = $record->aname; + $row[] = fullname($record); } - - $percent = round($record->percent * 100)."%"; + foreach ($extrafields as $field) { + if (isset($record->$field)) { + $row[] = $record->$field; + } else { + $row[] = ''; + } + } + $row[] = $record->numtakensessions; + $row[] = round($record->percent * 100)."%"; $timesent = "-"; if (!empty($record->timesent)) { $timesent = userdate($record->timesent); } + $row[] = $timesent; - $table->add_data(array($name, $attendancename, $username, $record->numtakensessions, $percent, $timesent)); + $table->add_data($row); } $table->finish_output(); diff --git a/locallib.php b/locallib.php index 7764bef..78a34c8 100644 --- a/locallib.php +++ b/locallib.php @@ -994,7 +994,7 @@ SELECT a.id, a.course as courseid, c.fullname as coursename, atl.studentid AS us * @return stdClass */ function attendance_get_users_to_notify($courseids = array(), $orderby = '', $allfornotify = false) { - global $DB; + global $DB, $CFG; $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)'; @@ -1011,11 +1011,19 @@ function attendance_get_users_to_notify($courseids = array(), $orderby = '', $al $having .= ' AND n.maxwarn > COUNT(DISTINCT ns.id) '; } - $unames = get_all_user_name_fields(true); - $unames2 = get_all_user_name_fields(true, 'u'); + $unames = get_all_user_name_fields(true).','; + $unames2 = get_all_user_name_fields(true, 'u').','; + + if (!empty($CFG->showuseridentity)) { + $extrafields = explode(',', $CFG->showuseridentity); + foreach ($extrafields as $field) { + $unames .= $field . ', '; + $unames2 .= 'u.' . $field . ', '; + } + } $idfield = $DB->sql_concat('cm.id', 'atl.studentid', 'n.id'); - $sql = "SELECT {$idfield} as uniqueid, a.id as aid, {$unames2}, a.name as aname, cm.id as cmid, c.id as courseid, + $sql = "SELECT {$idfield} as uniqueid, a.id as aid, {$unames2} a.name as aname, cm.id as cmid, c.id as courseid, c.fullname as coursename, atl.studentid AS userid, n.id as notifyid, n.warningpercent, n.emailsubject, n.emailcontent, n.emailcontentformat, n.emailuser, n.thirdpartyemails, n.warnafter, n.maxwarn, COUNT(DISTINCT ats.id) AS numtakensessions, SUM(stg.grade) AS points, SUM(stm.maxgrade) AS maxpoints, @@ -1041,7 +1049,7 @@ function attendance_get_users_to_notify($courseids = array(), $orderby = '', $al WHERE ats.absenteereport = 1 {$where} GROUP BY uniqueid, a.id, a.name, a.course, c.fullname, atl.studentid, n.id, n.warningpercent, n.emailsubject, n.emailcontent, n.emailcontentformat, n.warnafter, n.maxwarn, - n.emailuser, n.thirdpartyemails, cm.id, c.id, {$unames2}, ns.userid + n.emailuser, n.thirdpartyemails, cm.id, c.id, {$unames2} ns.userid HAVING n.warnafter <= COUNT(DISTINCT ats.id) AND n.warningpercent > ((SUM(stg.grade) / SUM(stm.maxgrade)) * 100) {$having} {$orderby}"; @@ -1049,11 +1057,11 @@ function attendance_get_users_to_notify($courseids = array(), $orderby = '', $al if (!$allfornotify) { $idfield = $DB->sql_concat('cmid', 'userid'); // Only show one record per attendance for teacher reports. - $sql = "SELECT DISTINCT {$idfield} as id, {$unames}, aid, cmid, courseid, aname, coursename, userid, + $sql = "SELECT DISTINCT {$idfield} as id, {$unames} aid, cmid, courseid, aname, coursename, userid, numtakensessions, percent, MAX(timesent) as timesent FROM ({$sql}) as m GROUP BY id, aid, cmid, courseid, aname, userid, numtakensessions, - percent, coursename, {$unames} {$orderby}"; + percent, {$unames} coursename {$orderby}"; } return $DB->get_records_sql($sql, $params);