From b827daaa361f901effd9ee8a6eedd4638f46ff82 Mon Sep 17 00:00:00 2001 From: Dan Marsden Date: Fri, 15 Jan 2021 09:58:50 +1300 Subject: [PATCH] Respect showuseridentity setting in absentee report. --- absentee.php | 49 ++++++++++++++++++++++++++++++++++++------------- locallib.php | 22 +++++++++++++++------- 2 files changed, 51 insertions(+), 20 deletions(-) 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);