|
|
@ -1128,47 +1128,51 @@ class attendance { |
|
|
|
|
|
|
|
// All taked sessions (including previous groups). |
|
|
|
|
|
|
|
$groups = array_keys(groups_get_all_groups($this->course->id, $userid)); |
|
|
|
$groups[] = 0; |
|
|
|
list($gsql, $gparams) = $DB->get_in_or_equal($groups, SQL_PARAMS_NAMED, 'gid0'); |
|
|
|
|
|
|
|
if ($this->pageparams->startdate && $this->pageparams->enddate) { |
|
|
|
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND |
|
|
|
ats.sessdate >= :sdate AND ats.sessdate < :edate"; |
|
|
|
$where2 = "ats.attendanceid = :aid2 AND ats.sessdate >= :csdate2 AND |
|
|
|
ats.sessdate >= :sdate2 AND ats.sessdate < :edate2 AND ats.groupid $gsql"; |
|
|
|
} else { |
|
|
|
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate"; |
|
|
|
$where2 = "ats.attendanceid = :aid2 AND ats.sessdate >= :csdate2 AND ats.groupid $gsql"; |
|
|
|
} |
|
|
|
|
|
|
|
$sql = "SELECT ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks |
|
|
|
FROM {attendance_sessions} ats |
|
|
|
RIGHT JOIN {attendance_log} al |
|
|
|
RIGHT JOIN {attendance_log} al |
|
|
|
ON ats.id = al.sessionid AND al.studentid = :uid |
|
|
|
WHERE $where |
|
|
|
UNION |
|
|
|
SELECT ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks |
|
|
|
FROM {attendance_sessions} ats |
|
|
|
LEFT JOIN {attendance_log} al |
|
|
|
ON ats.id = al.sessionid AND al.studentid = :uid2 |
|
|
|
WHERE $where2 |
|
|
|
ORDER BY sessdate ASC"; |
|
|
|
ORDER BY ats.sessdate ASC"; |
|
|
|
|
|
|
|
$params = array( |
|
|
|
'uid' => $userid, |
|
|
|
'aid' => $this->id, |
|
|
|
'csdate' => $this->course->startdate, |
|
|
|
'sdate' => $this->pageparams->startdate, |
|
|
|
'edate' => $this->pageparams->enddate, |
|
|
|
'uid2' => $userid, |
|
|
|
'aid2' => $this->id, |
|
|
|
'csdate2' => $this->course->startdate, |
|
|
|
'sdate2' => $this->pageparams->startdate, |
|
|
|
'edate2' => $this->pageparams->enddate); |
|
|
|
$params = array_merge($params, $gparams); |
|
|
|
'edate' => $this->pageparams->enddate); |
|
|
|
$sessions = $DB->get_records_sql($sql, $params); |
|
|
|
|
|
|
|
// All sessions for current groups. |
|
|
|
|
|
|
|
$groups = array_keys(groups_get_all_groups($this->course->id, $userid)); |
|
|
|
$groups[] = 0; |
|
|
|
list($gsql, $gparams) = $DB->get_in_or_equal($groups, SQL_PARAMS_NAMED, 'gid0'); |
|
|
|
|
|
|
|
if ($this->pageparams->startdate && $this->pageparams->enddate) { |
|
|
|
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND |
|
|
|
ats.sessdate >= :sdate AND ats.sessdate < :edate AND ats.groupid $gsql"; |
|
|
|
} else { |
|
|
|
$where = "ats.attendanceid = :aid AND ats.sessdate >= :csdate AND ats.groupid $gsql"; |
|
|
|
} |
|
|
|
|
|
|
|
$sql = "SELECT ats.id, ats.groupid, ats.sessdate, ats.duration, ats.description, al.statusid, al.remarks |
|
|
|
FROM {attendance_sessions} ats |
|
|
|
LEFT JOIN {attendance_log} al |
|
|
|
ON ats.id = al.sessionid AND al.studentid = :uid |
|
|
|
WHERE $where |
|
|
|
ORDER BY ats.sessdate ASC"; |
|
|
|
|
|
|
|
$params = array_merge($params, $gparams); |
|
|
|
$sessions = array_merge($sessions, $DB->get_records_sql($sql, $params)); |
|
|
|
|
|
|
|
foreach ($sessions as $sess) { |
|
|
|
if (empty($sess->description)) { |
|
|
|
$sess->description = get_string('nodescription', 'attendance'); |
|
|
|