1.10.x
Julio Montoya 11 years ago
commit d742477923
  1. 1
      main/attendance/attendance_calendar.php
  2. 40
      main/attendance/attendance_controller.php
  3. 11
      main/attendance/attendance_list.php
  4. 53
      main/attendance/index.php
  5. 123
      main/inc/lib/attendance.lib.php
  6. 6
      main/install/configuration.dist.php

@ -130,7 +130,6 @@ if (isset($action) && $action == 'calendar_add') {
Display::return_icon('delete.png', get_lang('Delete'), array('style'=>'vertical-align:middle'), ICON_SIZE_SMALL).'</a>'; Display::return_icon('delete.png', get_lang('Delete'), array('style'=>'vertical-align:middle'), ICON_SIZE_SMALL).'</a>';
echo '</span>'; echo '</span>';
} }
} }
} }
echo '</div>'; echo '</div>';

@ -156,6 +156,11 @@ class AttendanceController
*/ */
public function attendance_delete($attendance_id) public function attendance_delete($attendance_id)
{ {
$allowDeleteAttendance = api_get_configuration_value('allow_delete_attendance');
if ($allowDeleteAttendance == false) {
$this->attendance_list();
return false;
}
$attendance = new Attendance(); $attendance = new Attendance();
if (!empty($attendance_id)) { if (!empty($attendance_id)) {
$affected_rows = $attendance->attendance_delete($attendance_id); $affected_rows = $attendance->attendance_delete($attendance_id);
@ -166,6 +171,41 @@ class AttendanceController
$this->attendance_list(); $this->attendance_list();
} }
/**
* It's used for make attendance visible
* render to attendance_list view
* @param int attendance id
*/
public function attendanceSetVisible($attendanceId)
{
$attendance = new Attendance();
if (!empty($attendanceId)) {
$affectedRows = $attendance->changeVisibility($attendanceId, 1);
}
if ($affectedRows) {
$message['message_attendance_delete'] = true;
}
$this->attendance_list();
}
/**
* It's used for make attendance invisible
* render to attendance_list view
* @param int attendance id
*/
public function attendanceSetInvisible($attendanceId)
{
$attendance = new Attendance();
if (!empty($attendanceId)) {
$affectedRows = $attendance->changeVisibility($attendanceId, 0);
}
if ($affectedRows) {
$message['message_attendance_delete'] = true;
}
$this->attendance_list();
}
/** /**
* Restores an attendance entry and fallback to attendances rendering * Restores an attendance entry and fallback to attendances rendering
* @param int attendance id * @param int attendance id

@ -42,7 +42,16 @@ $table->set_header(3, get_lang('CountDoneAttendance'), true, array('style'=>'wid
if (api_is_allowed_to_edit(null, true)) { if (api_is_allowed_to_edit(null, true)) {
$table->set_header(4, get_lang('Actions'), false, array('style'=>'text-align:center')); $table->set_header(4, get_lang('Actions'), false, array('style'=>'text-align:center'));
$table->set_form_actions(array ('attendance_delete_select' => get_lang('DeleteAllSelectedAttendances'))); $actions = array(
'attendance_set_invisible_select' => get_lang('SetInvisible'),
'attendance_set_visible_select' => get_lang('SetVisible')
);
$allow = api_get_configuration_value('allow_delete_attendance');
if ($allow) {
$actions['attendance_delete_select'] = get_lang('DeleteAllSelectedAttendances');
}
$table->set_form_actions($actions);
} }
if ($table->get_total_number_of_items() > 0) { if ($table->get_total_number_of_items() > 0) {

@ -41,6 +41,10 @@ $actions = array(
'attendance_edit', 'attendance_edit',
'attendance_delete', 'attendance_delete',
'attendance_delete_select', 'attendance_delete_select',
'attendance_set_invisible',
'attendance_set_invisible_select',
'attendance_set_visible',
'attendance_set_visible_select',
'attendance_restore', 'attendance_restore',
'attendance_sheet_export_to_pdf', 'attendance_sheet_export_to_pdf',
'attendance_sheet_list_no_edit', 'attendance_sheet_list_no_edit',
@ -228,11 +232,20 @@ if ($action == 'calendar_add') {
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('AddDateAndTime')); $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('AddDateAndTime'));
} }
// delete selected attendance // Delete selected attendance
if (isset($_POST['action']) && $_POST['action'] == 'attendance_delete_select') { if (isset($_POST['action']) && $_POST['action'] == 'attendance_delete_select') {
$attendanceController->attendance_delete($_POST['id']); $attendanceController->attendance_delete($_POST['id']);
} }
// distpacher actions to controller
if (isset($_POST['action']) && $_POST['action'] == 'attendance_set_invisible_select') {
$attendanceController->attendanceSetInvisible($_POST['id']);
}
if (isset($_POST['action']) && $_POST['action'] == 'attendance_set_visible_select') {
$attendanceController->attendanceSetVisible($_POST['id']);
}
// Distpacher actions to controller
switch ($action) { switch ($action) {
case 'attendance_list': case 'attendance_list':
$attendanceController->attendance_list(); $attendanceController->attendance_list();
@ -244,27 +257,41 @@ switch ($action) {
api_not_allowed(); api_not_allowed();
} }
break; break;
case 'attendance_edit' : case 'attendance_edit':
if (api_is_allowed_to_edit(null, true)) { if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendance_edit($attendance_id); $attendanceController->attendance_edit($attendance_id);
} else { } else {
api_not_allowed(); api_not_allowed();
} }
break; break;
case 'attendance_delete' : case 'attendance_delete':
if (api_is_allowed_to_edit(null, true)) { if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendance_delete($attendance_id); $attendanceController->attendance_delete($attendance_id);
} else { } else {
api_not_allowed(); api_not_allowed();
} }
break; break;
case 'attendance_restore': case 'attendance_set_invisible':
if (api_is_allowed_to_edit(null, true)) { if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendance_restore($attendance_id); $attendanceController->attendanceSetInvisible($attendance_id);
} else {
api_not_allowed();
}
break;
case 'attendance_set_visible':
if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendanceSetVisible($attendance_id);
} else { } else {
api_not_allowed(); api_not_allowed();
} }
break; break;
/*case 'attendance_restore':
if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendance_restore($attendance_id);
} else {
api_not_allowed();
}
break;*/
case 'attendance_sheet_list': case 'attendance_sheet_list':
$attendanceController->attendance_sheet($action, $attendance_id, $student_id, true); $attendanceController->attendance_sheet($action, $attendance_id, $student_id, true);
break; break;
@ -281,22 +308,22 @@ switch ($action) {
api_not_allowed(); api_not_allowed();
} }
break; break;
case 'lock_attendance' : case 'lock_attendance':
case 'unlock_attendance' : case 'unlock_attendance':
if (api_is_allowed_to_edit(null, true)) { if (api_is_allowed_to_edit(null, true)) {
$attendanceController->lock_attendance($action, $attendance_id); $attendanceController->lock_attendance($action, $attendance_id);
} else { } else {
api_not_allowed(); api_not_allowed();
} }
break; break;
case 'calendar_add' : case 'calendar_add':
case 'calendar_edit' : case 'calendar_edit':
case 'calendar_all_delete' : case 'calendar_all_delete':
case 'calendar_delete' : case 'calendar_delete':
if (!api_is_allowed_to_edit(null, true)) { if (!api_is_allowed_to_edit(null, true)) {
api_not_allowed(); api_not_allowed();
} }
case 'calendar_list' : case 'calendar_list':
$attendanceController->attendance_calendar($action, $attendance_id, $calendar_id); $attendanceController->attendance_calendar($action, $attendance_id, $calendar_id);
break; break;
case 'calendar_logins': case 'calendar_logins':

@ -101,7 +101,7 @@ class Attendance
*/ */
public static function get_attendance_data($from, $number_of_items, $column, $direction) public static function get_attendance_data($from, $number_of_items, $column, $direction)
{ {
$tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE); $tbl_attendance = Database::get_course_table(TABLE_ATTENDANCE);
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
$session_id = api_get_session_id(); $session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id); $condition_session = api_get_session_condition($session_id);
@ -114,8 +114,10 @@ class Attendance
} }
$active_plus = ''; $active_plus = '';
if ((isset($_GET['isStudentView']) && $_GET['isStudentView'] == 'true') || !api_is_allowed_to_edit(null, true)) { if ((isset($_GET['isStudentView']) && $_GET['isStudentView'] == 'true') ||
$active_plus = 'AND att.active = 1'; !api_is_allowed_to_edit(null, true)
) {
$active_plus = ' AND att.active = 1';
} }
$sql = "SELECT $sql = "SELECT
@ -127,7 +129,9 @@ class Attendance
att.active AS col5, att.active AS col5,
att.session_id att.session_id
FROM $tbl_attendance att FROM $tbl_attendance att
WHERE c_id = $course_id $active_plus $condition_session WHERE
att.active <> 2 AND
c_id = $course_id $active_plus $condition_session
ORDER BY col$column $direction ORDER BY col$column $direction
LIMIT $from,$number_of_items "; LIMIT $from,$number_of_items ";
@ -139,11 +143,13 @@ class Attendance
$param_gradebook = '&gradebook='.$_SESSION['gradebook']; $param_gradebook = '&gradebook='.$_SESSION['gradebook'];
} }
$user_info = api_get_user_info(); $user_info = api_get_user_info();
$allowDelete = api_get_configuration_value('allow_delete_attendance');
while ($attendance = Database::fetch_row($res)) { while ($attendance = Database::fetch_row($res)) {
$student_param = ''; $student_param = '';
if (api_is_drh() && $_GET['student_id']) { if (api_is_drh() && $_GET['student_id']) {
$student_param = '&student_id='.Security::remove_XSS($_GET['student_id']); $student_param = '&student_id='.intval($_GET['student_id']);
} }
$session_star = ''; $session_star = '';
@ -184,14 +190,19 @@ class Attendance
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_edit&attendance_id='.$attendance[0].$param_gradebook.'">'. $actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_edit&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).'</a>&nbsp;'; Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).'</a>&nbsp;';
// Visible
if ($attendance[5] == 1) { if ($attendance[5] == 1) {
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_delete&attendance_id='.$attendance[0].$param_gradebook.'">'. $actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_set_invisible&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('visible.png', get_lang('Hide'), array(), ICON_SIZE_SMALL).'</a>'; Display::return_icon('visible.png', get_lang('Hide'), array(), ICON_SIZE_SMALL).'</a>';
} else { } else {
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_restore&attendance_id='.$attendance[0].$param_gradebook.'">'. $actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_set_visible&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('invisible.png', get_lang('Show'), array(), ICON_SIZE_SMALL).'</a>'; Display::return_icon('invisible.png', get_lang('Show'), array(), ICON_SIZE_SMALL).'</a>';
$attendance[2] = '<span class="muted">'.$attendance[2].'</span>'; $attendance[2] = '<span class="muted">'.$attendance[2].'</span>';
} }
if ($allowDelete) {
$actions .= '<a 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 { } else {
$is_locked_attendance = self::is_locked_attendance($attendance[0]); $is_locked_attendance = self::is_locked_attendance($attendance[0]);
if ($is_locked_attendance) { if ($is_locked_attendance) {
@ -200,8 +211,19 @@ class Attendance
} else { } else {
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_edit&attendance_id='.$attendance[0].$param_gradebook.'">'. $actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_edit&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).'</a>&nbsp;'; Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).'</a>&nbsp;';
$actions .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_delete&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('visible.png', get_lang('Hide'), array(), ICON_SIZE_SMALL).'</a>'; if ($attendance[5] == 1) {
$actions .= ' <a href="index.php?'.api_get_cidreq().'&action=attendance_set_invisible&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('visible.png', get_lang('Hide'), array(), ICON_SIZE_SMALL).'</a>';
} else {
$actions .= ' <a href="index.php?'.api_get_cidreq().'&action=attendance_set_visible&attendance_id='.$attendance[0].$param_gradebook.'">'.
Display::return_icon('invisible.png', get_lang('Show'), array(), ICON_SIZE_SMALL).'</a>';
$attendance[2] = '<span class="muted">'.$attendance[2].'</span>';
}
if ($allowDelete) {
$actions .= ' <a 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>';
}
} }
} }
@ -209,31 +231,22 @@ class Attendance
$is_done_all_calendar = self::is_all_attendance_calendar_done($attendance[0]); $is_done_all_calendar = self::is_all_attendance_calendar_done($attendance[0]);
if ($is_done_all_calendar) { if ($is_done_all_calendar) {
$locked = $attendance[4]; $locked = $attendance[4];
if ($locked == 0) { if ($locked == 0) {
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$message_alert = get_lang('AreYouSureToLockTheAttendance'); $message_alert = get_lang('AreYouSureToLockTheAttendance');
} else { } else {
$message_alert = get_lang('UnlockMessageInformation'); $message_alert = get_lang('UnlockMessageInformation');
} }
$actions .= '&nbsp;<a onclick="javascript:if(!confirm(\''.$message_alert.'\')) return false;" href="index.php?'.api_get_cidreq().'&action=lock_attendance&attendance_id='.$attendance[0].$param_gradebook.'">'. $actions .= '&nbsp;<a onclick="javascript:if(!confirm(\''.$message_alert.'\')) return false;" href="index.php?'.api_get_cidreq().'&action=lock_attendance&attendance_id='.$attendance[0].$param_gradebook.'">'.Display::return_icon('unlock.png', get_lang('LockAttendance')).'</a>';
Display::return_icon('unlock.png', get_lang('LockAttendance')).'</a>';
} else { } else {
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$actions .= '&nbsp;<a onclick="javascript:if(!confirm(\''.get_lang('AreYouSureToUnlockTheAttendance').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=unlock_attendance&attendance_id='.$attendance[0].$param_gradebook.'">'. $actions .= '&nbsp;<a onclick="javascript:if(!confirm(\''.get_lang('AreYouSureToUnlockTheAttendance').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=unlock_attendance&attendance_id='.$attendance[0].$param_gradebook.'">'.Display::return_icon('locked.png', get_lang('UnlockAttendance')).'</a>';
Display::return_icon('locked.png', get_lang('UnlockAttendance')).'</a>';
} else { } else {
$actions .= '&nbsp;'.Display::return_icon('locked_na.png', get_lang('LockedAttendance')); $actions .= '&nbsp;'.Display::return_icon('locked_na.png', get_lang('LockedAttendance'));
} }
} }
} }
/*if (api_is_allowed_to_edit(null, true)) {
$message_alert = get_lang('AreYouSureToDelete');
$actions .= '&nbsp;<a onclick="javascript:if(!confirm(\'' . $message_alert . '\')) return false;" href="index.php?' . api_get_cidreq() . '&action=delete_attendance&attendance_id=' . $attendance[0] . $param_gradebook . '">' .
Display::return_icon('delete.png',
get_lang('DeleteAttendance')) . '</a>';
}*/
$actions .= '</center>'; $actions .= '</center>';
$attendances[] = array($attendance[0], $attendance[1], $attendance[2], $attendance[3],$actions); $attendances[] = array($attendance[0], $attendance[1], $attendance[2], $attendance[3],$actions);
@ -360,9 +373,9 @@ class Attendance
// add link to gradebook // add link to gradebook
if ($link_to_gradebook && !empty($this->category_id)) { if ($link_to_gradebook && !empty($this->category_id)) {
$description = ''; $description = '';
$link_id = GradebookUtils::is_resource_in_course_gradebook($course_code, 7, $attendance_id, $session_id); $link_id = is_resource_in_course_gradebook($course_code, 7, $attendance_id, $session_id);
if (!$link_id) { if (!$link_id) {
GradebookUtils::add_resource_to_course_gradebook( add_resource_to_course_gradebook(
$this->category_id, $this->category_id,
$course_code, $course_code,
7, 7,
@ -423,7 +436,7 @@ class Attendance
/** /**
* Delete attendances * Delete attendances
* @param int|array one or many attendances id * @param int|array $attendance_id one or many attendances id
* @return int affected rows * @return int affected rows
*/ */
public function attendance_delete($attendance_id) public function attendance_delete($attendance_id)
@ -435,19 +448,20 @@ class Attendance
if (is_array($attendance_id)) { if (is_array($attendance_id)) {
foreach ($attendance_id as $id) { foreach ($attendance_id as $id) {
$id = intval($id); $id = intval($id);
$sql = "UPDATE $tbl_attendance SET active = 0 $sql = "UPDATE $tbl_attendance SET active = 2
WHERE c_id = $course_id AND id = '$id'"; WHERE c_id = $course_id AND id = '$id'";
Database::query($sql); Database::query($sql);
$affected_rows = Database::affected_rows(); $affected_rows = Database::affected_rows();
if (!empty($affected_rows)) { if (!empty($affected_rows)) {
// update row item property table // update row item property table
api_item_property_update($_course, TOOL_ATTENDANCE, $id,"delete", $user_id); api_item_property_update($_course, TOOL_ATTENDANCE, $id, "delete", $user_id);
} }
} }
} else { } else {
$attendance_id = intval($attendance_id); $attendance_id = intval($attendance_id);
$sql = "UPDATE $tbl_attendance SET active = 0 $sql = "UPDATE $tbl_attendance SET active = 2
WHERE c_id = $course_id AND id = '$attendance_id'"; WHERE c_id = $course_id AND id = '$attendance_id'";
Database::query($sql); Database::query($sql);
$affected_rows = Database::affected_rows(); $affected_rows = Database::affected_rows();
if (!empty($affected_rows)) { if (!empty($affected_rows)) {
@ -464,6 +478,58 @@ class Attendance
return $affected_rows; return $affected_rows;
} }
/**
* Changes visibility
* @param int|array $attendanceId one or many attendances id
* @param status
* @return int affected rows
*/
public function changeVisibility($attendanceId, $status = 1)
{
$_course = api_get_course_info();
$tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE);
$user_id = api_get_user_id();
$course_id = api_get_course_int_id();
$status = intval($status);
$action = 'visible';
if ($status == 0) {
$action = 'invisible';
}
if (is_array($attendanceId)) {
foreach ($attendanceId as $id) {
$id = intval($id);
$sql = "UPDATE $tbl_attendance SET active = $status
WHERE c_id = $course_id AND id = '$id'";
Database::query($sql);
$affected_rows = Database::affected_rows();
if (!empty($affected_rows)) {
// update row item property table
api_item_property_update($_course, TOOL_ATTENDANCE, $id, $action, $user_id);
}
}
} else {
$attendanceId = intval($attendanceId);
$sql = "UPDATE $tbl_attendance SET active = $status
WHERE c_id = $course_id AND id = '$attendanceId'";
Database::query($sql);
$affected_rows = Database::affected_rows();
if (!empty($affected_rows)) {
// update row item property table
api_item_property_update(
$_course,
TOOL_ATTENDANCE,
$attendanceId,
$action,
$user_id
);
}
}
return $affected_rows;
}
/** /**
* Lock or unlock an attendance * Lock or unlock an attendance
* @param int attendance id * @param int attendance id
@ -1534,7 +1600,6 @@ class Attendance
$sessionId = api_get_session_id(); $sessionId = api_get_session_id();
$courseCode = api_get_course_id(); $courseCode = api_get_course_id();
$courseId = api_get_course_int_id();
if (!empty($sessionId)) { if (!empty($sessionId)) {
$users = CourseManager:: get_user_list_from_course_code( $users = CourseManager:: get_user_list_from_course_code(
$courseCode, $courseCode,
@ -1573,7 +1638,7 @@ class Attendance
} }
$accessData = CourseManager::getCourseAccessPerCourseAndSession( $accessData = CourseManager::getCourseAccessPerCourseAndSession(
$courseId, $courseCode,
$sessionId, $sessionId,
$dateTimeStartOriginal->format('Y-m-d H:i:s'), $dateTimeStartOriginal->format('Y-m-d H:i:s'),
$dateTimeEnd->format('Y-m-d H:i:s') $dateTimeEnd->format('Y-m-d H:i:s')

@ -308,4 +308,8 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE;
//$_configuration['work_user_comments'] = false; //$_configuration['work_user_comments'] = false;
// Decode UTF-8 from Web Services (option passed to SOAP) // Decode UTF-8 from Web Services (option passed to SOAP)
//$_configuration['registration.soap.php.decode_utf8'] = false; //$_configuration['registration.soap.php.decode_utf8'] = false;
// Show delete option in attendance
//$_configuration['allow_delete_attendance'] = false;

Loading…
Cancel
Save