From 31656269daf2631a83c3b4aecb44cbbd5b23e0a2 Mon Sep 17 00:00:00 2001 From: Christian Date: Fri, 27 May 2022 19:15:45 -0500 Subject: [PATCH] Attendance - Add sign for user as student - refs BT#18271 --- main/attendance/attendance_controller.php | 25 +++++---- main/attendance/attendance_sheet.php | 64 ++++++++++++++++++----- main/attendance/index.php | 2 + main/inc/ajax/user_manager.ajax.php | 6 ++- main/inc/lib/attendance.lib.php | 30 +++++------ 5 files changed, 86 insertions(+), 41 deletions(-) diff --git a/main/attendance/attendance_controller.php b/main/attendance/attendance_controller.php index f256ab7f4f..58ed576bfa 100755 --- a/main/attendance/attendance_controller.php +++ b/main/attendance/attendance_controller.php @@ -349,20 +349,23 @@ class AttendanceController ); if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') { - if (isset($_POST['hidden_input'])) { - foreach ($_POST['hidden_input'] as $cal_id) { - $users_present = []; - if (isset($_POST['check_presence'][$cal_id])) { - $users_present = $_POST['check_presence'][$cal_id]; + $check = Security::check_token(); + if ($check) { + if (isset($_POST['hidden_input'])) { + foreach ($_POST['hidden_input'] as $cal_id) { + $users_present = []; + if (isset($_POST['check_presence'][$cal_id])) { + $users_present = $_POST['check_presence'][$cal_id]; + } + $attendance->attendance_sheet_add( + $cal_id, + $users_present, + $attendance_id + ); } - $attendance->attendance_sheet_add( - $cal_id, - $users_present, - $attendance_id - ); } + Security::clear_token(); } - $data['users_in_course'] = $attendance->get_users_rel_course($attendance_id, $groupId); $my_calendar_id = null; if (is_numeric($filter_type)) { diff --git a/main/attendance/attendance_sheet.php b/main/attendance/attendance_sheet.php index 5f36fc0802..8c3bb395de 100755 --- a/main/attendance/attendance_sheet.php +++ b/main/attendance/attendance_sheet.php @@ -19,6 +19,7 @@ $isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh( ) || api_is_drh(); $allowSignature = api_get_configuration_value('enable_sign_attendance_sheet'); +$token = Security::get_token(); if (api_is_allowed_to_edit(null, true) || api_is_coach(api_get_session_id(), api_get_course_int_id()) || @@ -109,6 +110,7 @@ if (api_is_allowed_to_edit(null, true) || ] ); + if (!$is_locked_attendance || api_is_platform_admin()) { $actionsLeft = ''. Display::return_icon('attendance_calendar.png', get_lang('AttendanceCalendar'), '', ICON_SIZE_MEDIUM).''; @@ -355,13 +357,11 @@ if (api_is_allowed_to_edit(null, true) || $disabled = ''; } + $signed = false; if ($allowSignature) { $attendance = new Attendance(); $signature = $attendance->getSignature($user['user_id'], $calendar['id']); - if (!empty($signature)) { - $disabled = 'disabled'; - $checked = 'checked'; - } + $signed = !empty($signature); } echo ''; @@ -369,10 +369,10 @@ if (api_is_allowed_to_edit(null, true) || if (api_is_allowed_to_edit(null, true)) { if (!$is_locked_attendance || api_is_platform_admin()) { - echo ''; - echo ''; if ($allowSignature) { - if (!empty($signature)) { + if ($signed) { + echo Display::return_icon('checkbox_on.png', get_lang('Presence'), null, ICON_SIZE_TINY); + echo ''; echo '
@@ -380,6 +380,8 @@ if (api_is_allowed_to_edit(null, true) ||
'; } else { + echo ''; + echo ''; echo '
@@ -387,6 +389,9 @@ if (api_is_allowed_to_edit(null, true) ||
'; } + } else { + echo ''; + echo ''; } } else { echo $presence ? Display::return_icon('checkbox_on.png', get_lang('Presence'), null, ICON_SIZE_TINY) : Display::return_icon('checkbox_off.png', get_lang('Presence'), null, ICON_SIZE_TINY); @@ -436,6 +441,7 @@ if (api_is_allowed_to_edit(null, true) || } ?> + getSignature($user_id, $presence['calendar_id']); + $signed = !empty($signature); + } $class = ''; if ($i % 2 == 0) { $class = 'row_even'; @@ -483,6 +495,27 @@ if (api_is_allowed_to_edit(null, true) || + + + + '.get_lang('SignView').' + + '; + } else { + echo ' + + '.get_lang('Sign').' + + '; + } + } + + ?> + - + @@ -533,6 +566,7 @@ if ($allowSignature) { var canvas = document.querySelector("#signature_area canvas"); var signaturePad = new SignaturePad(canvas); var urlAjax = ""; + var attendance_id = ""; $(function() { $("#sign_popup_close").on("click", function() { @@ -550,9 +584,12 @@ if ($allowSignature) { $("#sign_popup_remove").on("click", function() { var selected = $("#sign-selected").val(); $.ajax({ + beforeSend: function(result) { + $('#loading').show(); + }, type: "POST", url: urlAjax, - data: "a=remove_attendance_sign&selected="+selected, + data: "a=remove_attendance_sign&selected="+selected+"&attendance_id="+attendance_id, success: function(data) { location.reload(); }, @@ -572,7 +609,7 @@ if ($allowSignature) { }, type: "POST", url: urlAjax, - data: "a=sign_attendance&selected="+selected+"&file="+dataURL, + data: "a=sign_attendance&selected="+selected+"&file="+dataURL+"&attendance_id="+attendance_id, success: function(data) { $('#loading').hide(); $('#save_controls').hide(); @@ -585,7 +622,7 @@ if ($allowSignature) { } else { $('#sign_results').html(''); } - $('#close_controls').hide(); + $('#sign_popup_close').hide(); location.reload(); }, }); @@ -611,15 +648,16 @@ if ($allowSignature) { $(".attendance-sign-view").on("click", function() { var selected = $(this).attr("id"); + $('#loading').show(); $.ajax({ beforeSend: function(result) { - $('#signature_area').html(""); - $('#loading').show(); + $('#signature_area').html(""); }, type: "POST", url: urlAjax, data: "a=get_attendance_sign&selected="+selected, success: function(sign) { + $('#loading').hide(); $('#signature_area').show(); $('#signature_area').html(""); }, diff --git a/main/attendance/index.php b/main/attendance/index.php index 6f68b8718d..3c7cc0aeba 100755 --- a/main/attendance/index.php +++ b/main/attendance/index.php @@ -39,6 +39,8 @@ $actions = [ 'attendance_sheet_export_to_pdf', 'attendance_sheet_list_no_edit', 'calendar_logins', + 'lock_attendance', + 'unlock_attendance' ]; $actions_calendar = [ diff --git a/main/inc/ajax/user_manager.ajax.php b/main/inc/ajax/user_manager.ajax.php index 611c2b635e..b993ca903a 100755 --- a/main/inc/ajax/user_manager.ajax.php +++ b/main/inc/ajax/user_manager.ajax.php @@ -28,20 +28,22 @@ switch ($action) { break; case 'remove_attendance_sign': $selected = $_REQUEST['selected']; + $attendanceId = $_REQUEST['attendance_id']; if (!empty($selected)) { list($prefix, $userId, $attendanceCalendarId) = explode('-', $selected); $attendance = new Attendance(); - $attendance->deleteSignature($userId, $attendanceCalendarId); + $attendance->deleteSignature($userId, $attendanceCalendarId, $attendanceId); } break; case 'sign_attendance': $selected = $_REQUEST['selected']; $file = isset($_REQUEST['file']) ? $_REQUEST['file'] : ''; $file = str_replace(' ', '+', $file); + $attendanceId = $_REQUEST['attendance_id']; if (!empty($selected)) { list($prefix, $userId, $attendanceCalendarId) = explode('-', $selected); $attendance = new Attendance(); - $attendance->saveSignature($userId, $attendanceCalendarId, $file); + $attendance->saveSignature($userId, $attendanceCalendarId, $file, $attendanceId); echo 1; exit; } diff --git a/main/inc/lib/attendance.lib.php b/main/inc/lib/attendance.lib.php index da9c37e0dd..e4b612737b 100755 --- a/main/inc/lib/attendance.lib.php +++ b/main/inc/lib/attendance.lib.php @@ -267,11 +267,11 @@ class Attendance $message_alert = get_lang('UnlockMessageInformation'); } $actions .= ' '. - Display::return_icon('unlock.png', get_lang('LockAttendance')).''; + Display::return_icon('lock-open.png', get_lang('LockAttendance')).''; } else { if (api_is_platform_admin()) { $actions .= ' '. - Display::return_icon('locked.png', get_lang('UnlockAttendance')).''; + Display::return_icon('lock-closed.png', get_lang('UnlockAttendance')).''; } else { $actions .= ' '.Display::return_icon('locked_na.png', get_lang('LockedAttendance')); } @@ -1304,7 +1304,7 @@ class Attendance // Get attendance for current user $user_id = (int) $user_id; if (count($calendar_ids) > 0) { - $sql = "SELECT cal.date_time, att.presence + $sql = "SELECT cal.date_time, att.presence, cal.iid as calendar_id FROM $tbl_attendance_sheet att INNER JOIN $tbl_attendance_calendar cal ON cal.id = att.attendance_calendar_id @@ -1324,7 +1324,6 @@ class Attendance } } } - return $data; } @@ -2520,7 +2519,8 @@ class Attendance */ public function deleteSignature( $userId, - $attendanceCalendarId + $attendanceCalendarId, + $attendanceId ) { $allowSignature = api_get_configuration_value('enable_sign_attendance_sheet'); if (!$allowSignature) { @@ -2536,16 +2536,16 @@ class Attendance ]; $repo = $em->getRepository('ChamiloCourseBundle:CAttendanceSheet'); - $result = $repo->findBy($criteria); + $attendanceSheet = $repo->findOneBy($criteria); - if (count($result) > 0) { + if ($attendanceSheet) { /** @var CAttendanceSheet $attendanceSheet */ - $attendanceSheet = $result[0]; $attendanceSheet->setPresence(0); $attendanceSheet->setSignature(''); $em->persist($attendanceSheet); $em->flush(); + $this->updateUsersResults([$userId], $attendanceId); } } @@ -2575,12 +2575,11 @@ class Attendance 'attendanceCalendarId' => $attendanceCalendarId, 'cId' => $courseId, ]; - $result = $repo->findBy($criteria); + $attendanceSheet = $repo->findOneBy($criteria); $signature = ""; - if (count($result) > 0) { + if ($attendanceSheet) { /** @var CAttendanceSheet $attendanceSheet */ - $attendanceSheet = $result[0]; $signature = $attendanceSheet->getSignature(); } @@ -2599,7 +2598,8 @@ class Attendance public function saveSignature( $userId, $attendanceCalendarId, - $file + $file, + $attendanceId ) { $allowSignature = api_get_configuration_value('enable_sign_attendance_sheet'); if (!$allowSignature) { @@ -2615,11 +2615,10 @@ class Attendance ]; $repo = $em->getRepository('ChamiloCourseBundle:CAttendanceSheet'); - $result = $repo->findBy($criteria); + $attendanceSheet = $repo->findOneBy($criteria); /** @var CAttendanceSheet $attendanceSheet */ - if (count($result) > 0) { - $attendanceSheet = $result[0]; + if ($attendanceSheet) { $attendanceSheet->setPresence(1); $attendanceSheet->setSignature($file); $em->persist($attendanceSheet); @@ -2636,5 +2635,6 @@ class Attendance $em->persist($attendanceSheet); $em->flush(); } + $this->updateUsersResults([$userId], $attendanceId); } }