Skip to content

Commit

Permalink
Attendance - Add sign for user as student - refs BT#18271
Browse files Browse the repository at this point in the history
  • Loading branch information
cfasanando committed May 28, 2022
1 parent ccfec62 commit 3165626
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 41 deletions.
25 changes: 14 additions & 11 deletions main/attendance/attendance_controller.php
Expand Up @@ -349,20 +349,23 @@ public function attendance_sheet(
);

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)) {
Expand Down
64 changes: 51 additions & 13 deletions main/attendance/attendance_sheet.php
Expand Up @@ -19,6 +19,7 @@
) || 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()) ||
Expand Down Expand Up @@ -109,6 +110,7 @@
]
);


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>';
Expand Down Expand Up @@ -355,38 +357,41 @@ function UpdateTableHeaders() {
$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'].'">';
echo '<div class="check">';

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)">
<em class="fa fa-search"></em> '.get_lang('SignView').'
</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)">
<em class="fa fa-pencil"></em> '.get_lang('Sign').'
</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);
Expand Down Expand Up @@ -436,6 +441,7 @@ function UpdateTableHeaders() {
} ?>
</div>
</div>
<input type="hidden" name="sec_token" value="<?php echo $token; ?>" />
</form>
<?php
} else {
Expand Down Expand Up @@ -473,6 +479,12 @@ function UpdateTableHeaders() {
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';
Expand All @@ -483,6 +495,27 @@ function UpdateTableHeaders() {
<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
Expand All @@ -504,7 +537,6 @@ function UpdateTableHeaders() {
<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'); ?>
Expand All @@ -525,6 +557,7 @@ function UpdateTableHeaders() {
<?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>

Expand All @@ -533,6 +566,7 @@ function UpdateTableHeaders() {
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() {
Expand All @@ -550,9 +584,12 @@ function UpdateTableHeaders() {
$("#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();
},
Expand All @@ -572,7 +609,7 @@ function UpdateTableHeaders() {
},
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();
Expand All @@ -585,7 +622,7 @@ function UpdateTableHeaders() {
} else {
$('#sign_results').html('<?php echo get_lang('Error'); ?>');
}
$('#close_controls').hide();
$('#sign_popup_close').hide();
location.reload();
},
});
Expand All @@ -611,15 +648,16 @@ function UpdateTableHeaders() {

$(".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+"' />");
},
Expand Down
2 changes: 2 additions & 0 deletions main/attendance/index.php
Expand Up @@ -39,6 +39,8 @@
'attendance_sheet_export_to_pdf',
'attendance_sheet_list_no_edit',
'calendar_logins',
'lock_attendance',
'unlock_attendance'
];

$actions_calendar = [
Expand Down
6 changes: 4 additions & 2 deletions main/inc/ajax/user_manager.ajax.php
Expand Up @@ -28,20 +28,22 @@
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;
}
Expand Down
30 changes: 15 additions & 15 deletions main/inc/lib/attendance.lib.php
Expand Up @@ -267,11 +267,11 @@ class="muted"
$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'));
}
Expand Down Expand Up @@ -1304,7 +1304,7 @@ public function get_users_attendance_sheet(
// 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
Expand All @@ -1324,7 +1324,6 @@ public function get_users_attendance_sheet(
}
}
}

return $data;
}

Expand Down Expand Up @@ -2520,7 +2519,8 @@ public function getCoursesWithAttendance(
*/
public function deleteSignature(
$userId,
$attendanceCalendarId
$attendanceCalendarId,
$attendanceId
) {
$allowSignature = api_get_configuration_value('enable_sign_attendance_sheet');
if (!$allowSignature) {
Expand All @@ -2536,16 +2536,16 @@ public function deleteSignature(
];

$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);
}
}

Expand Down Expand Up @@ -2575,12 +2575,11 @@ public function getSignature(
'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();
}

Expand All @@ -2599,7 +2598,8 @@ public function getSignature(
public function saveSignature(
$userId,
$attendanceCalendarId,
$file
$file,
$attendanceId
) {
$allowSignature = api_get_configuration_value('enable_sign_attendance_sheet');
if (!$allowSignature) {
Expand All @@ -2615,11 +2615,10 @@ public function saveSignature(
];

$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);
Expand All @@ -2636,5 +2635,6 @@ public function saveSignature(
$em->persist($attendanceSheet);
$em->flush();
}
$this->updateUsersResults([$userId], $attendanceId);
}
}

0 comments on commit 3165626

Please sign in to comment.