Fixed bug when adding students to the attendance sheet after the first session has been taken (Fixes CT#1800)

skala
Yannick Warnier 16 years ago
parent 53cf76e3b4
commit 5972cf9e78
  1. 2
      main/attendance/attendance_controller.php
  2. 10
      main/attendance/attendance_sheet.php
  3. 18
      main/inc/lib/attendance.lib.php

@ -201,6 +201,7 @@
} }
$data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id); $data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id);
$data['next_attendance_calendar_datetime'] = $attendance->get_next_attendance_calendar_datetime($attendance_id);
if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") { if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
@ -218,6 +219,7 @@
$data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id); $data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id);
$data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id); $data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
$data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id); $data['next_attendance_calendar_id'] = $attendance->get_next_attendance_calendar_id($attendance_id);
$data['next_attendance_calendar_datetime'] = $attendance->get_next_attendance_calendar_datetime($attendance_id);
} }
$this->view->set_data($data); $this->view->set_data($data);

@ -115,8 +115,10 @@ if (api_is_allowed_to_edit(null, true)) {
<tr class="<?php echo $class ?>"> <tr class="<?php echo $class ?>">
<?php <?php
if (count($attendant_calendar) > 0 ) { if (count($attendant_calendar) > 0 ) {
foreach ($attendant_calendar as $calendar) { foreach ($attendant_calendar as $key => $calendar) {
//error_log(print_r($calendar,1));
$checked = 'checked'; $checked = 'checked';
// if the
if (isset($users_presence[$user['user_id']][$calendar['id']]['presence'])) { if (isset($users_presence[$user['user_id']][$calendar['id']]['presence'])) {
$presence = $users_presence[$user['user_id']][$calendar['id']]['presence']; $presence = $users_presence[$user['user_id']][$calendar['id']]['presence'];
if (intval($presence) == 1) { if (intval($presence) == 1) {
@ -124,9 +126,15 @@ if (api_is_allowed_to_edit(null, true)) {
} else { } else {
$checked = ''; $checked = '';
} }
} else {
//if the user wasn't registered at that time, consider unchecked
if ($next_attendance_calendar_datetime == 0 || $calendar['date_time'] < $next_attendance_calendar_datetime) {
$checked = '';
}
} }
$disabled = 'disabled'; $disabled = 'disabled';
$style_td = ''; $style_td = '';
// if this is the active column, then set it to darker background and enable it
if ($next_attendance_calendar_id == $calendar['id']) { if ($next_attendance_calendar_id == $calendar['id']) {
$style_td = 'background-color:#e1e1e1'; $style_td = 'background-color:#e1e1e1';
$disabled = ''; $disabled = '';

@ -639,6 +639,24 @@ class Attendance
return $next_calendar_id; return $next_calendar_id;
} }
/**
* Get next attendance calendar datetime without presences (done attendances)
* @param int attendance id
* @return int UNIX time format datetime
*/
public function get_next_attendance_calendar_datetime($attendance_id) {
$tbl_attendance_calendar = Database::get_course_table(TABLE_ATTENDANCE_CALENDAR);
$attendance_id = intval($attendance_id);
$sql = "SELECT id, date_time FROM $tbl_attendance_calendar WHERE attendance_id = '$attendance_id' AND done_attendance = 0 ORDER BY date_time limit 1";
$rs = Database::query($sql);
$next_calendar_datetime = 0;
if (Database::num_rows($rs) > 0) {
$row = Database::fetch_array($rs);
$next_calendar_datetime = api_get_local_time($row['date_time']);
}
return $next_calendar_datetime;
}
/** /**
* Get user' score from current attendance * Get user' score from current attendance
* @param int user id * @param int user id

Loading…
Cancel
Save