*/
function attendance_user_outline($course, $user, $mod, $attendance) {
global $CFG;
-
require_once(dirname(__FILE__).'/locallib.php');
require_once($CFG->libdir.'/gradelib.php');
if (has_capability('mod/attendance:canbelisted', $mod->context, $user->id)) {
$statuses = att_get_statuses($attendance->id);
$grade = att_get_user_grade(att_get_user_statuses_stat($attendance->id, $course->startdate,
- $user->id), $statuses);
+ $user->id, $mod), $statuses);
$maxgrade = att_get_user_max_grade(att_get_user_taken_sessions_count($attendance->id, $course->startdate,
- $user->id), $statuses);
+ $user->id, $mod), $statuses);
$result->info = $grade.' / '.$maxgrade;
}
require_once($CFG->libdir.'/gradelib.php');
if (has_capability('mod/attendance:canbelisted', $mod->context, $user->id)) {
- echo construct_full_user_stat_html_table($attendance, $course, $user);
+ echo construct_full_user_stat_html_table($attendance, $course, $user, $mod);
}
}
function attendance_print_recent_activity($course, $isteacher, $timestart) {
public function get_user_taken_sessions_count($userid) {
if (!array_key_exists($userid, $this->usertakensesscount)) {
- $this->usertakensesscount[$userid] = att_get_user_taken_sessions_count($this->id, $this->course->startdate, $userid);
+ $this->usertakensesscount[$userid] = att_get_user_taken_sessions_count($this->id, $this->course->startdate, $userid, $this->cm);
}
return $this->usertakensesscount[$userid];
}
public function get_user_filtered_sessions_log_extended($userid) {
global $DB;
-
// All taked sessions (including previous groups).
if ($this->pageparams->startdate && $this->pageparams->enddate) {
// If the array's index is a number it will not merge entries.
// It would be better as a UNION query butunfortunatly MS SQL does not seem to support doing a DISTINCT on a the description field.
$id = $DB->sql_concat(':value', 'ats.id');
-
- $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks
+ if (!empty($this->cm->groupmode)) {
+ $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks
FROM {attendance_sessions} ats
RIGHT JOIN {attendance_log} al
ON ats.id = al.sessionid AND al.studentid = :uid
+ JOIN {groups_members} gm ON gm.userid = al.studentid AND gm.groupid = ats.groupid
WHERE $where
ORDER BY ats.sessdate ASC";
+ } else {
+ $sql = "SELECT $id, ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks
+ FROM {attendance_sessions} ats
+ RIGHT JOIN {attendance_log} al
+ ON ats.id = al.sessionid AND al.studentid = :uid
+ WHERE $where
+ ORDER BY ats.sessdate ASC";
+ }
$params = array(
'uid' => $userid,
return $statuses;
}
-function att_get_user_taken_sessions_count($attid, $coursestartdate, $userid) {
+function att_get_user_taken_sessions_count($attid, $coursestartdate, $userid, $coursemodule) {
global $DB;
-
- $qry = "SELECT count(*) as cnt
+ if (!empty($coursemodule->groupmode)) {
+ $qry = "SELECT count(*) as cnt
+ FROM {attendance_log} al
+ JOIN {attendance_sessions} ats ON al.sessionid = ats.id
+ JOIN {groups_members} gm ON gm.userid = al.studentid AND gm.groupid = ats.groupid
+ WHERE ats.attendanceid = :aid AND
+ ats.sessdate >= :cstartdate AND
+ al.studentid = :uid";
+ } else {
+ $qry = "SELECT count(*) as cnt
FROM {attendance_log} al
JOIN {attendance_sessions} ats
ON al.sessionid = ats.id
WHERE ats.attendanceid = :aid AND
ats.sessdate >= :cstartdate AND
al.studentid = :uid";
+ }
$params = array(
'aid' => $attid,
'cstartdate' => $coursestartdate,
return $DB->count_records_sql($qry, $params);
}
-function att_get_user_statuses_stat($attid, $coursestartdate, $userid) {
+function att_get_user_statuses_stat($attid, $coursestartdate, $userid, $coursemodule) {
global $DB;
- $qry = "SELECT al.statusid, count(al.statusid) AS stcnt
+ if (!empty($coursemodule->groupmode)) {
+ $qry = "SELECT al.statusid, count(al.statusid) AS stcnt
+ FROM {attendance_log} al
+ JOIN {attendance_sessions} ats ON al.sessionid = ats.id
+ JOIN {groups_members} gm ON gm.userid = al.studentid AND gm.groupid = ats.groupid
+ WHERE ats.attendanceid = :aid AND
+ ats.sessdate >= :cstartdate AND
+ al.studentid = :uid
+ GROUP BY al.statusid";
+ } else {
+ $qry = "SELECT al.statusid, count(al.statusid) AS stcnt
FROM {attendance_log} al
JOIN {attendance_sessions} ats
ON al.sessionid = ats.id
ats.sessdate >= :cstartdate AND
al.studentid = :uid
GROUP BY al.statusid";
+ }
$params = array(
'aid' => $attid,
'cstartdate' => $coursestartdate,
return $DB->get_field('attendance', 'grade', array('id' => $attid));
}
-function att_update_all_users_grades($attid, $course, $context) {
+function att_update_all_users_grades($attid, $course, $context, $coursemodule) {
$grades = array();
$userids = array_keys(get_enrolled_users($context, 'mod/attendance:canbelisted', 0, 'u.id'));
foreach ($userids as $userid) {
$grade = new stdClass;
$grade->userid = $userid;
- $userstatusesstat = att_get_user_statuses_stat($attid, $course->startdate, $userid);
- $usertakensesscount = att_get_user_taken_sessions_count($attid, $course->startdate, $userid);
+ $userstatusesstat = att_get_user_statuses_stat($attid, $course->startdate, $userid, $coursemodule);
+ $usertakensesscount = att_get_user_taken_sessions_count($attid, $course->startdate, $userid, $coursemodule);
$usergrade = att_get_user_grade($userstatusesstat, $statuses);
$usermaxgrade = att_get_user_max_grade($usertakensesscount, $statuses);
$grade->rawgrade = att_calc_user_grade_fraction($usergrade, $usermaxgrade) * $gradebook_maxgrade;
return html_writer::table($stattable);
}
-function construct_full_user_stat_html_table($attendance, $course, $user) {
+function construct_full_user_stat_html_table($attendance, $course, $user, $coursemodule) {
global $CFG;
$gradeable = $attendance->grade > 0;
$statuses = att_get_statuses($attendance->id);
- $userstatusesstat = att_get_user_statuses_stat($attendance->id, $course->startdate, $user->id);
- $stat['completed'] = att_get_user_taken_sessions_count($attendance->id, $course->startdate, $user->id);
+ $userstatusesstat = att_get_user_statuses_stat($attendance->id, $course->startdate, $user->id, $coursemodule);
+ $stat['completed'] = att_get_user_taken_sessions_count($attendance->id, $course->startdate, $user->id, $coursemodule);
$stat['statuses'] = $userstatusesstat;
if ($gradeable) {
$grade = att_get_user_grade($userstatusesstat, $statuses);
$maxgrade = att_get_user_max_grade(att_get_user_taken_sessions_count($attendance->id, $course->startdate,
- $user->id), $statuses);
+ $user->id, $coursemodule), $statuses);
if (!$decimalpoints = grade_get_setting($course->id, 'decimalpoints')) {
$decimalpoints = $CFG->grade_decimalpoints;
}