Attendance - Add sign for user as student - refs BT#18271

pull/4300/head
Christian 3 years ago
parent ccfec6298f
commit 31656269da
  1. 25
      main/attendance/attendance_controller.php
  2. 64
      main/attendance/attendance_sheet.php
  3. 2
      main/attendance/index.php
  4. 6
      main/inc/ajax/user_manager.ajax.php
  5. 30
      main/inc/lib/attendance.lib.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)) {

@ -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 = '<a style="float:left;" href="index.php?'.api_get_cidreq().'&action=calendar_list&attendance_id='.$attendance_id.'">'.
Display::return_icon('attendance_calendar.png', get_lang('AttendanceCalendar'), '', ICON_SIZE_MEDIUM).'</a>';
@ -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 '<td style="'.$style_td.'" class="checkboxes_col_'.$calendar['id'].'">';
@ -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 '<input type="checkbox" name="check_presence['.$calendar['id'].'][]" value="'.$user['user_id'].'" '.$disabled.' '.$checked.' />';
echo '<span class="anchor_'.$calendar['id'].'"></span>';
if ($allowSignature) {
if (!empty($signature)) {
if ($signed) {
echo Display::return_icon('checkbox_on.png', get_lang('Presence'), null, ICON_SIZE_TINY);
echo '<input type="hidden" name="check_presence['.$calendar['id'].'][]" value="'.$user['user_id'].'" />';
echo '<div class="list-data">
<span class="item"></span>
<a id="sign-'.$user['user_id'].'-'.$calendar['id'].'" class="btn btn-primary attendance-sign-view" href="javascript:void(0)">
@ -380,6 +380,8 @@ if (api_is_allowed_to_edit(null, true) ||
</a>
</div>';
} else {
echo '<input type="checkbox" name="check_presence['.$calendar['id'].'][]" value="'.$user['user_id'].'" '.$disabled.' '.$checked.' />';
echo '<span class="anchor_'.$calendar['id'].'"></span>';
echo '<div class="list-data">
<span class="item"></span>
<a id="sign-'.$user['user_id'].'-'.$calendar['id'].'" class="btn btn-primary attendance-sign" href="javascript:void(0)">
@ -387,6 +389,9 @@ if (api_is_allowed_to_edit(null, true) ||
</a>
</div>';
}
} else {
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.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) ||
} ?>
</div>
</div>
<input type="hidden" name="sec_token" value="<?php echo $token; ?>" />
</form>
<?php
} else {
@ -473,6 +479,12 @@ if (api_is_allowed_to_edit(null, true) ||
if (!empty($users_presence)) {
$i = 0;
foreach ($users_presence[$user_id] as $presence) {
$signed = false;
if ($allowSignature) {
$attendance = new Attendance();
$signature = $attendance->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) ||
<td>
<?php echo $presence['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); ?>
<?php echo "&nbsp; ".$presence['date_time']; ?>
<?php
if ($allowSignature) {
if ($signed) {
echo '<span class="list-data">
<a id="sign-'.$user_id.'-'.$presence['calendar_id'].'" class="btn btn-primary attendance-sign-view" href="javascript:void(0)">
<em class="fa fa-search"></em> '.get_lang('SignView').'
</a>
</span>';
} else {
echo '<span class="list-data">
<a id="sign-'.$user_id.'-'.$presence['calendar_id'].'" class="btn btn-primary attendance-sign" href="javascript:void(0)">
<em class="fa fa-pencil"></em> '.get_lang('Sign').'
</a>
</span>';
}
}
?>
</td>
</tr>
<?php
@ -504,7 +537,6 @@ if ($allowSignature) {
<div id="signature_area" class="well">
<canvas width="400px"></canvas>
</div>
<span class="loading" style="display: none"><em class="fa fa-spinner"></em></span>
<span id="save_controls">
<button id="sign_popup_save" class="btn btn-primary" type="submit">
<em class="fa fa-save"></em> <?php echo get_lang('Save'); ?>
@ -525,6 +557,7 @@ if ($allowSignature) {
<?php echo get_lang('Close'); ?>
</button>
</span>
<span class="loading" style="display: none"><em class="fa fa-spinner"></em></span>
<input type="hidden" id="sign-selected" />
</div>
@ -533,6 +566,7 @@ if ($allowSignature) {
var canvas = document.querySelector("#signature_area canvas");
var signaturePad = new SignaturePad(canvas);
var urlAjax = "<?php echo api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?'.api_get_cidreq(); ?>";
var attendance_id = "<?php echo $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('<?php echo get_lang('Error'); ?>');
}
$('#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("<em class='fa fa-spinner'></em>");
},
type: "POST",
url: urlAjax,
data: "a=get_attendance_sign&selected="+selected,
success: function(sign) {
$('#loading').hide();
$('#signature_area').show();
$('#signature_area').html("<img src='"+sign+"' />");
},

@ -39,6 +39,8 @@ $actions = [
'attendance_sheet_export_to_pdf',
'attendance_sheet_list_no_edit',
'calendar_logins',
'lock_attendance',
'unlock_attendance'
];
$actions_calendar = [

@ -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;
}

@ -267,11 +267,11 @@ class Attendance
$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].'">'.
Display::return_icon('unlock.png', get_lang('LockAttendance')).'</a>';
Display::return_icon('lock-open.png', get_lang('LockAttendance')).'</a>';
} else {
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].'">'.
Display::return_icon('locked.png', get_lang('UnlockAttendance')).'</a>';
Display::return_icon('lock-closed.png', get_lang('UnlockAttendance')).'</a>';
} else {
$actions .= '&nbsp;'.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);
}
}

Loading…
Cancel
Save