Add "allow_delete_attendance" option see BT#9426

1.9.x
Julio Montoya 10 years ago
parent c552d086f4
commit b540f82f11
  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. 112
      main/inc/lib/attendance.lib.php
  6. 2
      main/install/configuration.dist.php

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

@ -156,6 +156,11 @@ class AttendanceController
*/
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();
if (!empty($attendance_id)) {
$affected_rows = $attendance->attendance_delete($attendance_id);
@ -166,6 +171,41 @@ class AttendanceController
$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
* @param int attendance id

@ -44,7 +44,16 @@ $table->set_header(3, get_lang('CountDoneAttendance'), true, array('style'=>'wid
if (api_is_allowed_to_edit(null, true)) {
$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) {

@ -46,6 +46,10 @@ $actions = array(
'attendance_edit',
'attendance_delete',
'attendance_delete_select',
'attendance_set_invisible',
'attendance_set_invisible_select',
'attendance_set_visible',
'attendance_set_visible_select',
'attendance_restore',
'attendance_sheet_export_to_pdf',
'attendance_sheet_list_no_edit',
@ -233,11 +237,20 @@ if ($action == 'calendar_add') {
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('AddDateAndTime'));
}
// delete selected attendance
// Delete selected attendance
if (isset($_POST['action']) && $_POST['action'] == 'attendance_delete_select') {
$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) {
case 'attendance_list':
$attendanceController->attendance_list();
@ -249,27 +262,41 @@ switch ($action) {
api_not_allowed();
}
break;
case 'attendance_edit' :
case 'attendance_edit':
if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendance_edit($attendance_id);
} else {
api_not_allowed();
}
break;
case 'attendance_delete' :
case 'attendance_delete':
if (api_is_allowed_to_edit(null, true)) {
$attendanceController->attendance_delete($attendance_id);
} else {
api_not_allowed();
}
break;
case 'attendance_restore':
case 'attendance_set_invisible':
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 {
api_not_allowed();
}
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':
$attendanceController->attendance_sheet($action, $attendance_id, $student_id, true);
break;
@ -286,22 +313,22 @@ switch ($action) {
api_not_allowed();
}
break;
case 'lock_attendance' :
case 'unlock_attendance' :
case 'lock_attendance':
case 'unlock_attendance':
if (api_is_allowed_to_edit(null, true)) {
$attendanceController->lock_attendance($action, $attendance_id);
} else {
api_not_allowed();
}
break;
case 'calendar_add' :
case 'calendar_edit' :
case 'calendar_all_delete' :
case 'calendar_delete' :
case 'calendar_add':
case 'calendar_edit':
case 'calendar_all_delete':
case 'calendar_delete':
if (!api_is_allowed_to_edit(null, true)) {
api_not_allowed();
}
case 'calendar_list' :
case 'calendar_list':
$attendanceController->attendance_calendar($action, $attendance_id, $calendar_id);
break;
case 'calendar_logins':

@ -101,7 +101,7 @@ class Attendance
*/
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();
$session_id = api_get_session_id();
$condition_session = api_get_session_condition($session_id);
@ -114,8 +114,10 @@ class Attendance
}
$active_plus = '';
if ((isset($_GET['isStudentView']) && $_GET['isStudentView'] == 'true') || !api_is_allowed_to_edit(null, true)) {
$active_plus = 'AND att.active = 1';
if ((isset($_GET['isStudentView']) && $_GET['isStudentView'] == 'true') ||
!api_is_allowed_to_edit(null, true)
) {
$active_plus = ' AND att.active = 1';
}
$sql = "SELECT
@ -127,7 +129,9 @@ class Attendance
att.active AS col5,
att.session_id
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
LIMIT $from,$number_of_items ";
@ -139,11 +143,13 @@ class Attendance
$param_gradebook = '&gradebook='.$_SESSION['gradebook'];
}
$user_info = api_get_user_info();
$allowDelete = api_get_configuration_value('allow_delete_attendance');
while ($attendance = Database::fetch_row($res)) {
$student_param = '';
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 = '';
@ -151,8 +157,8 @@ 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) {
if ($attendance[5] == 1) {
$isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh(
api_get_user_id(),
api_get_course_info()
@ -165,7 +171,6 @@ class Attendance
// 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 class="muted" href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance[0].$param_gradebook.$student_param.'">'.$attendance[1].'</a>'.$session_star;
}
@ -177,26 +182,48 @@ class Attendance
}
$attendance[3] = '<center>'.$attendance[3].'</center>';
if (api_is_allowed_to_edit(null, true)) {
$actions = '';
$actions .= '<center>';
if (api_is_platform_admin()) {
$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;';
$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;';
// Visible
if ($attendance[5] == 1) {
$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>';
$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_restore&attendance_id='.$attendance[0].$param_gradebook.'">'.Display::return_icon('invisible.png', get_lang('Show'), array(), ICON_SIZE_SMALL).'</a>';
$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>';
}
} else {
$is_locked_attendance = self::is_locked_attendance($attendance[0]);
if ($is_locked_attendance) {
$actions .= Display::return_icon('edit_na.png', get_lang('Edit')).'&nbsp;';
$actions .= Display::return_icon('visible.png', get_lang('Hide'));
} else {
$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;';
$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>';
$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;';
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>';
}
}
}
@ -409,7 +436,7 @@ class Attendance
/**
* Delete attendances
* @param int|array one or many attendances id
* @param int|array $attendance_id one or many attendances id
* @return int affected rows
*/
public function attendance_delete($attendance_id)
@ -421,19 +448,20 @@ class Attendance
if (is_array($attendance_id)) {
foreach ($attendance_id as $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'";
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,"delete", $user_id);
api_item_property_update($_course, TOOL_ATTENDANCE, $id, "delete", $user_id);
}
}
} else {
$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'";
Database::query($sql);
$affected_rows = Database::affected_rows();
if (!empty($affected_rows)) {
@ -450,6 +478,58 @@ class Attendance
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
* @param int attendance id

@ -289,3 +289,5 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE;
// Filters administration users lists by the session admin who created them.
// Change to true to restrict the visibility
//$_configuration['prevent_session_admins_to_manage_all_users'] = false;
// Show delete option in attendance
//$_configuration['allow_delete_attendance'] = false;

Loading…
Cancel
Save