Fixing coach view in attendance see BT#4966

skala
Julio Montoya 13 years ago
parent 1f468b9056
commit c5eb447ee4
  1. 46
      main/attendance/attendance_controller.php
  2. 269
      main/attendance/attendance_sheet.php
  3. 10
      main/attendance/index.php
  4. 54
      main/inc/lib/attendance.lib.php
  5. 2
      main/inc/lib/main_api.lib.php

@ -223,7 +223,7 @@
* @param string action
* @param int attendance id
*/
public function attendance_sheet($action, $attendance_id, $student_id = 0) {
public function attendance_sheet($action, $attendance_id, $student_id = 0, $edit = true) {
$attendance = new Attendance();
$data = array();
$data['attendance_id'] = $attendance_id;
@ -233,22 +233,31 @@
if (!empty($_REQUEST['filter'])) {
$filter_type = $_REQUEST['filter'];
}
if (api_is_allowed_to_edit(null, true)) {
$data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
} else {
if (!empty($student_id)) {
$user_id = intval($student_id);
} else {
$user_id = api_get_user_id();
}
$data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, $user_id);
$data['faults'] = $attendance->get_faults_of_user($user_id, $attendance_id);
$data['user_id'] = $user_id;
}
if ($edit == true) {
if (api_is_allowed_to_edit(null, true)) {
$data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
} else {
}
} else {
if (!empty($student_id)) {
$user_id = intval($student_id);
} else {
$user_id = api_get_user_id();
}
if (api_is_allowed_to_edit(null, true) || api_is_coach(api_get_session_id(), api_get_course_id())) {
$data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id);
} else {
$data['users_presence'] = $attendance->get_users_attendance_sheet($attendance_id, $user_id);
}
$data['faults'] = $attendance->get_faults_of_user($user_id, $attendance_id);
$data['user_id'] = $user_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);
@ -279,6 +288,8 @@
$data['attendant_calendar_all'] = $attendance->get_attendance_calendar($attendance_id);
$data['attendant_calendar'] = $attendance->get_attendance_calendar($attendance_id, $filter_type);
}
$data['edit_table'] = intval($edit);
$data['is_locked_attendance'] = $attendance->is_locked_attendance($attendance_id);
$this->view->set_data($data);
$this->view->set_layout('layout');
@ -535,5 +546,4 @@
Export::export_html_to_pdf($content, $params);
exit;
}
}
}

@ -11,13 +11,14 @@
// protect a course script
api_protect_course_script(true);
if (api_is_allowed_to_edit(null, true)) {
if (api_is_allowed_to_edit(null, true) || api_is_coach(api_get_session_id(), api_get_course_id())) {
$param_gradebook = '';
if (isset($_SESSION['gradebook'])) {
$param_gradebook = '&gradebook='.$_SESSION['gradebook'];
}
$form = new FormValidator('filter', 'post', 'index.php?action=attendance_sheet_add&'.api_get_cidreq().$param_gradebook.'&attendance_id='.$attendance_id, null, array('class' => 'form-search pull-left'));
$form = new FormValidator('filter', 'post', 'index.php?action=attendance_sheet_list&'.api_get_cidreq().$param_gradebook.'&attendance_id='.$attendance_id, null, array('class' => 'form-search pull-left'));
$values = array(
'all' => get_lang('All'),
'today' => get_lang('Today'),
@ -56,7 +57,6 @@ if (api_is_allowed_to_edit(null, true)) {
$renderer->setElementTemplate('{label} {element} ');
$form->setDefaults(array('filter'=>$default_filter));
if (!$is_locked_attendance || api_is_platform_admin()) {
echo '<div class="actions">';
@ -185,12 +185,14 @@ if (api_is_allowed_to_edit(null, true)) {
<tbody>
<?php
$i = 1;
$class = '';
$class = '';
foreach ($users_in_course as $data) {
$faults = 0;
if ($i%2 == 0) {$class='row_odd';}
else {$class='row_even';}
if ($i%2 == 0) {
$class='row_odd';
} else {
$class='row_even';
}
$username = api_htmlentities(sprintf(get_lang('LoginX'), $data['username']), ENT_QUOTES);
?>
<tr class="<?php echo $class ?>">
@ -211,127 +213,146 @@ if (api_is_allowed_to_edit(null, true)) {
</tbody>
</table>
</div>
<?php
echo '<div class="divTableWithFloatingHeader attendance-calendar-table" style="margin:0px;padding:0px;float:left;width:55%;overflow:auto;overflow-y:hidden;">';
echo '<table class="tableWithFloatingHeader data_table" width="100%">';
echo '<thead>';
if (count($attendant_calendar) > 0 ) {
foreach ($attendant_calendar as $calendar) {
$date = $calendar['date'];
$time = $calendar['time'];
$datetime = $date.'<br />'.$time;
<div class="divTableWithFloatingHeader attendance-calendar-table" style="margin:0px;padding:0px;float:left;width:55%;overflow:auto;overflow-y:hidden;">
<table class="tableWithFloatingHeader data_table" width="100%">
<thead>
<?php
if (count($attendant_calendar) > 0 ) {
foreach ($attendant_calendar as $calendar) {
$date = $calendar['date'];
$time = $calendar['time'];
$datetime = $date.'<br />'.$time;
$img_lock = Display::return_icon('lock.gif',get_lang('DateUnLock'),array('class'=>'img_lock','id'=>'datetime_column_'.$calendar['id']));
if (!empty($calendar['done_attendance'])){
$datetime = '<font color="blue">'.$date.'<br />'.$time.'</font>';
}
$disabled_check = 'disabled = "true"';
$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="" disabled />';
if ($next_attendance_calendar_id == $calendar['id']) {
$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="'.$calendar['id'].'" />';
$disabled_check = '';
$img_lock = Display::return_icon('unlock.gif',get_lang('DateLock'),array('class'=>'img_unlock','id'=>'datetime_column_'.$calendar['id']));
}
$result .= '<th width="800px">';
$result .= '<center><div style="font-size:10px;width:125px;">'.$datetime.'&nbsp;';
$result .= '<span id="attendance_lock" style="cursor:pointer">'.(!$is_locked_attendance || api_is_platform_admin()?$img_lock:'').'</span>';
if ($is_locked_attendance == false) {
$result .= '<br /><input type="checkbox" class="checkbox_head_'.$calendar['id'].'" id="checkbox_head_'.$calendar['id'].'" '.$disabled_check.' checked="checked" />'.$input_hidden.'</div></center></th>';
}
}
$img_lock = Display::return_icon('lock.gif',get_lang('DateUnLock'),array('class'=>'img_lock','id'=>'datetime_column_'.$calendar['id']));
if (!empty($calendar['done_attendance'])){
$datetime = '<font color="blue">'.$date.'<br />'.$time.'</font>';
}
$disabled_check = 'disabled = "true"';
$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="" disabled />';
if ($next_attendance_calendar_id == $calendar['id']) {
$input_hidden = '<input type="hidden" id="hidden_input_'.$calendar['id'].'" name="hidden_input[]" value="'.$calendar['id'].'" />';
$disabled_check = '';
$img_lock = Display::return_icon('unlock.gif',get_lang('DateLock'),array('class'=>'img_unlock','id'=>'datetime_column_'.$calendar['id']));
}
$result .= '<th width="800px">';
$result .= '<center><div style="font-size:10px;width:125px;">'.$datetime.'&nbsp;';
if (api_is_allowed_to_edit(null, true)) {
$result .= '<span id="attendance_lock" style="cursor:pointer">'.(!$is_locked_attendance || api_is_platform_admin()?$img_lock:'').'</span>';
}
if ($is_locked_attendance == false) {
if (api_is_allowed_to_edit(null, true)) {
$result .= '<br /><input type="checkbox" class="checkbox_head_'.$calendar['id'].'" id="checkbox_head_'.$calendar['id'].'" '.$disabled_check.' checked="checked" />'.$input_hidden.'</div></center></th>';
}
}
}
} else {
$result = '<th width="2000px"><span><a href="index.php?'.api_get_cidreq().'&action=calendar_list&attendance_id='.$attendance_id.$param_gradebook.'">';
$result .= Display::return_icon('attendance_calendar.png',get_lang('AttendanceCalendar'),'',ICON_SIZE_MEDIUM).' '.get_lang('GoToAttendanceCalendar').'</a></span></th>';
}
echo '<tr class="tableFloatingHeader row_odd" style="position: absolute; top: 0px; left: 0px; visibility: hidden; margin:0px;padding:0px">';
echo $result;
echo '</tr>';
echo '<tr class="tableWithFloatingHeader row_odd">';
echo $result;
echo '</tr>';
echo '</thead>';
echo '<tbody>';
$i = 0;
foreach ($users_in_course as $user) {
$class = '';
if ($i%2 == 0) {
$class = 'row_even';
} else {
$class = 'row_odd';
}
echo '<tr class="'.$class.'">';
if (count($attendant_calendar) > 0 ) {
foreach ($attendant_calendar as $calendar) {
$checked = 'checked';
$presence = -1;
if (isset($users_presence[$user['user_id']][$calendar['id']]['presence'])) {
$presence = $users_presence[$user['user_id']][$calendar['id']]['presence'];
if (intval($presence) == 1) {
$checked = 'checked';
} else {
$checked = '';
}
} else {
$result = '<th width="2000px"><span><a href="index.php?'.api_get_cidreq().'&action=calendar_list&attendance_id='.$attendance_id.$param_gradebook.'">';
$result .= Display::return_icon('attendance_calendar.png',get_lang('AttendanceCalendar'),'',ICON_SIZE_MEDIUM).' '.get_lang('GoToAttendanceCalendar').'</a></span></th>';
//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 = '';
}
}
?>
<tr class="tableFloatingHeader row_odd" style="position: absolute; top: 0px; left: 0px; visibility: hidden; margin:0px;padding:0px" >
<?php echo $result; ?>
</tr>
<tr class="tableWithFloatingHeader row_odd">
<?php echo $result; ?>
</tr>
</thead>
<tbody>
<?php
$i = 0;
foreach ($users_in_course as $user) {
$class = '';
if ($i%2==0) {
$class = 'row_even';
$disabled = 'disabled';
$style_td = '';
if ($next_attendance_calendar_id == $calendar['id']) {
if ($i%2==0)
$style_td = 'background-color:#eee;';
else
$style_td = 'background-color:#dcdcdc;';
$disabled = '';
}
echo '<td style="'.$style_td.'" class="checkboxes_col_'.$calendar['id'].'">';
echo '<div style="height:20px">';
echo '<center>';
if (api_is_allowed_to_edit(null, true)) {
if (!$is_locked_attendance || api_is_platform_admin()) {
echo '<input type="checkbox" name="check_presence['.$calendar['id'].'][]" value="'.$user['user_id'].'" '.$disabled.' '.$checked.' />';
echo '<span class="anchor_'.$calendar['id'].'"></span>';
} else {
echo $presence ? Display::return_icon('checkbox_on.gif',get_lang('Presence')) : Display::return_icon('checkbox_off.gif',get_lang('Presence'));
}
} else {
$class = 'row_odd';
switch($presence) {
case 1:
echo Display::return_icon('accept.png',get_lang('Attended'));
break;
case 0:
echo Display::return_icon('exclamation.png',get_lang('NotAttended'));
break;
case -1:
//echo Display::return_icon('warning.png',get_lang('NotAttended'));
break;
}
}
?>
<tr class="<?php echo $class ?>">
<?php
if (count($attendant_calendar) > 0 ) {
foreach ($attendant_calendar as $calendar) {
$checked = 'checked';
$presence = null;
if (isset($users_presence[$user['user_id']][$calendar['id']]['presence'])) {
$presence = $users_presence[$user['user_id']][$calendar['id']]['presence'];
if (intval($presence) == 1) {
$checked = 'checked';
} else {
$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';
$style_td = '';
if ($next_attendance_calendar_id == $calendar['id']) {
if ($i%2==0)
$style_td = 'background-color:#eee;';
else
$style_td = 'background-color:#dcdcdc;';
$disabled = '';
}
?>
<td style="<?php echo $style_td ?>" class="checkboxes_col_<?php echo $calendar['id'] ?>">
<div style="height:20px">
<center>
<?php if (!$is_locked_attendance || api_is_platform_admin()) { ?>
<input type="checkbox" name="check_presence[<?php echo $calendar['id'] ?>][]" value="<?php echo $user['user_id'] ?>" <?php echo $disabled.' '.$checked ?> /><span class="<?php echo 'anchor_'.$calendar['id'] ?>"></span>
<?php } else {
echo $presence?Display::return_icon('checkbox_on.gif',get_lang('Presence')):Display::return_icon('checkbox_off.gif',get_lang('Presence'));
} ?>
</center>
</div>
</td>
<?php }
} else { ?>
<td class="checkboxes_col_<?php echo $calendar['id'] ?>">
<div style="height:20px">
<center>&nbsp;</center>
</div>
</td>
<?php } ?>
</tr>
<?php $i++ ;
}
?>
</tbody>
</table>
</div>
</div>
echo '</center>';
echo '</div>';
echo '</td>';
}
} else {
echo '<td class="checkboxes_col_'.$calendar['id'].'">';
echo '<div style="height:20px">';
echo '<center>&nbsp;</center>
</div>
</td>';
}
echo '</tr>';
$i++ ;
}
echo '</tbody></table>';
echo '</div></div>';
?>
<div class="clear"></div>
<div style="margin-top:20px;">
<?php if (!$is_locked_attendance || api_is_platform_admin()) { ?>
<button type="submit" class="save"><?php echo get_lang('Save') ?></button><?php } ?>
<?php if (!$is_locked_attendance || api_is_platform_admin()) {
if (api_is_allowed_to_edit(null, true)) {
?>
<button type="submit" class="save"><?php echo get_lang('Save') ?></button>
<?php }
}
?>
</div>
</form>
<?php
@ -339,9 +360,9 @@ if (api_is_allowed_to_edit(null, true)) {
echo Display::display_warning_message('<a href="'.api_get_path(WEB_CODE_PATH).'user/user.php?'.api_get_cidreq().'">'.get_lang('ThereAreNoRegisteredLearnersInsidetheCourse').'</a>', false);
}
} else {
echo Display::page_header(get_lang('AttendanceSheetReport'));
// View for students
?>
<h3><?php echo get_lang('AttendanceSheetReport') ?></h3>
?>
<?php if(!empty($users_presence)) { ?>
<div>
<table width="250px;">
@ -362,7 +383,7 @@ if (api_is_allowed_to_edit(null, true)) {
if (!empty($users_presence)) {
$i = 0;
foreach($users_presence[$user_id] as $presence) {
foreach ($users_presence[$user_id] as $presence) {
$class = '';
if ($i%2==0) {$class = 'row_even';}
else {$class = 'row_odd';}

@ -40,7 +40,8 @@ $actions = array(
'attendance_delete',
'attendance_delete_select',
'attendance_restore',
'attendance_sheet_export_to_pdf'
'attendance_sheet_export_to_pdf',
'attendance_sheet_list_no_edit'
);
$actions_calendar = array('calendar_list', 'calendar_add', 'calendar_edit', 'calendar_delete', 'calendar_all_delete');
@ -249,9 +250,12 @@ switch ($action) {
api_not_allowed();
}
break;
case 'attendance_sheet_list':
$attendance_controller->attendance_sheet($action, $attendance_id, $student_id);
case 'attendance_sheet_list':
$attendance_controller->attendance_sheet($action, $attendance_id, $student_id, true);
break;
case 'attendance_sheet_list_no_edit':
$attendance_controller->attendance_sheet($action, $attendance_id, $student_id, false);
break;
case 'attendance_sheet_export_to_pdf':
$attendance_controller->attendance_sheet_export_to_pdf($action, $attendance_id, $student_id, $course_id);
break;

@ -106,17 +106,17 @@ class Attendance
$active_plus = 'att.active = 1';
if (api_is_platform_admin()) {
$active_plus = ' 1=1 ';
$active_plus = ' 1 = 1 ';
}
$sql = "SELECT
att.id AS col0,
att.name AS col1,
att.description AS col2,
att.attendance_qualify_max AS col3,
att.locked AS col4,
att.active AS col5,
att.session_id
att.id AS col0,
att.name AS col1,
att.description AS col2,
att.attendance_qualify_max AS col3,
att.locked AS col4,
att.active AS col5,
att.session_id
FROM $tbl_attendance att
WHERE c_id = $course_id AND $active_plus $condition_session
ORDER BY col$column $direction LIMIT $from,$number_of_items ";
@ -140,11 +140,18 @@ class Attendance
if (api_get_session_id() == $attendance[6]) {
$session_star = api_get_session_image(api_get_session_id(), $user_info['status']);
}
if ($attendance[5] == 1) {
$attendance[1] = '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance[0].$param_gradebook.$student_param.'">'.$attendance[1].'</a>'.$session_star;
} else {
$attendance[1] = '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance[0].$param_gradebook.$student_param.'"><del>'.$attendance[1].'</del></a>'.$session_star;
}
if ($attendance[5] == 1) {
if (api_is_allowed_to_edit(null, true)) {
//Link to edit
$attendance[1] = '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance[0].$param_gradebook.$student_param.'">'.$attendance[1].'</a>'.$session_star;
} else {
//Link to view
$attendance[1] = '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list_no_edit&attendance_id='.$attendance[0].$param_gradebook.$student_param.'">'.$attendance[1].'</a>'.$session_star;
}
} else {
$attendance[1] = '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance[0].$param_gradebook.$student_param.'"><del>'.$attendance[1].'</del></a>'.$session_star;
}
$attendance[3] = '<center>'.$attendance[3].'</center>';
if (api_is_allowed_to_edit(null, true)) {
$actions = '';
@ -156,7 +163,7 @@ class Attendance
$actions .= '<a onclick="javascript:if(!confirm(\''.get_lang('AreYouSureToDelete').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=attendance_delete&attendance_id='.$attendance[0].$param_gradebook.'">'.Display::return_icon('delete.png',get_lang('Delete'), array(), ICON_SIZE_SMALL).'</a>';
} else {
$actions .= '<a onclick="javascript:if(!confirm(\''.get_lang('AreYouSureToRestore').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=attendance_restore&attendance_id='.$attendance[0].$param_gradebook.'">'.Display::return_icon('invisible.png',get_lang('Restore'), array(), ICON_SIZE_SMALL).'</a>';
$attendance[2] = '<del>'.$attendance[2].'</del>';
$attendance[2] = '<del>'.$attendance[2].'</del>';
}
} else {
$is_locked_attendance = self::is_locked_attendance($attendance[0]);
@ -1050,30 +1057,15 @@ class Attendance
return $result;
}
/**
* check if an attendance is locked
* @param int attendance id
* @param bool
*/
public function is_locked_attendance($attendance_id) {
public static function is_locked_attendance($attendance_id) {
//use gradebook lock
$result = api_resource_is_locked_by_gradebook($attendance_id, LINK_ATTENDANCE);
return $result;
/*
$attendance_id = intval($attendance_id);
$tbl_attendance = Database::get_course_table(TABLE_ATTENDANCE);
$course_id = api_get_course_int_id();
$sql = "SELECT id FROM $tbl_attendance WHERE c_id = $course_id AND id = $attendance_id AND locked = 1";
$rs = Database::query($sql);
$result = false;
if (Database::num_rows($rs) > 0) {
$result = true;
}
return $result;*/
return $result;
}
/**

@ -2616,7 +2616,7 @@ function api_is_allowed_to_session_edit($tutor = false, $coach = false) {
// Get the session visibility
$session_visibility = api_get_session_visibility($session_id); // if 5 the session is still available
//@todo We could load the session_rel_course_rel_user permission to increase the level of detail.
//echo api_get_user_id();
//echo api_get_course_id();

Loading…
Cancel
Save