You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
783 lines
31 KiB
783 lines
31 KiB
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use Chamilo\CoreBundle\Framework\Container;
|
|
use Chamilo\CourseBundle\Entity\CAttendance;
|
|
use Chamilo\CourseBundle\Entity\CAttendanceCalendar;
|
|
|
|
require_once __DIR__.'/../inc/global.inc.php';
|
|
|
|
api_protect_course_script(true);
|
|
|
|
require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/fe/exportgradebook.php';
|
|
|
|
$current_course_tool = TOOL_ATTENDANCE;
|
|
|
|
// current section
|
|
$this_section = SECTION_COURSES;
|
|
|
|
// Get actions
|
|
$actions = [
|
|
'attendance_list',
|
|
'attendance_sheet_list',
|
|
'attendance_sheet_add',
|
|
'attendance_add',
|
|
'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',
|
|
'calendar_logins',
|
|
'calendar_list',
|
|
'calendar_add',
|
|
'calendar_edit',
|
|
'calendar_delete',
|
|
'calendar_all_delete',
|
|
];
|
|
|
|
$action = 'attendance_list';
|
|
if (isset($_REQUEST['action']) && (in_array($_REQUEST['action'], $actions))) {
|
|
$action = $_REQUEST['action'];
|
|
}
|
|
|
|
if (isset($_GET['isStudentView']) && 'true' === $_GET['isStudentView']) {
|
|
$action = 'attendance_list';
|
|
}
|
|
|
|
$repo = Container::getAttendanceRepository();
|
|
$attendanceEntity = null;
|
|
|
|
// get attendance id
|
|
$attendanceId = 0;
|
|
if (isset($_GET['attendance_id'])) {
|
|
$attendanceId = (int) ($_GET['attendance_id']);
|
|
/** @var CAttendance $attendanceEntity */
|
|
$attendanceEntity = $repo->find($attendanceId);
|
|
}
|
|
|
|
// get calendar id
|
|
$calendarId = '';
|
|
$calendarEntity = null;
|
|
if (isset($_GET['calendar_id'])) {
|
|
$calendarId = (int) ($_GET['calendar_id']);
|
|
/** @var CAttendanceCalendar $calendarEntity */
|
|
$calendarEntity = Database::getManager()->getRepository(CAttendanceCalendar::class)->find($calendarId);
|
|
}
|
|
|
|
$token = Security::get_token();
|
|
|
|
// instance attendance object for using like library here
|
|
$attendance = new Attendance();
|
|
|
|
$htmlHeadXtra[] = '<script>
|
|
$(function() {
|
|
$("table th img").click(function() {
|
|
var col_id = this.id;
|
|
var col_split = col_id.split("_");
|
|
var calendar_id = col_split[2];
|
|
var class_img = $(this).attr("class");
|
|
|
|
if (class_img == "img_unlock") {
|
|
//lock
|
|
$(".checkbox_head_"+calendar_id).attr("disabled", true);
|
|
|
|
$(".row_odd td.checkboxes_col_"+calendar_id).css({
|
|
"opacity":"1",
|
|
"background-color":"#F9F9F9",
|
|
"border-left":"none",
|
|
"border-right":"none"
|
|
});
|
|
$(".row_even td.checkboxes_col_"+calendar_id).css({
|
|
"opacity":"1","background-color":"#FFF", "border-left":"none","border-right":"none"
|
|
});
|
|
$(".checkboxes_col_"+calendar_id+" input:checkbox").attr("disabled",true);
|
|
$(this).attr("src","'.Display::returnIconPath('lock-closed.png').'");
|
|
$(this).attr("title","'.get_lang('Unlock date').'");
|
|
$(this).attr("alt","'.get_lang('Unlock date').'");
|
|
$(this).attr("class","img_lock");
|
|
$("#hidden_input_"+calendar_id).attr("value","");
|
|
$("#hidden_input_"+calendar_id).attr("disabled",true);
|
|
return false;
|
|
} else {
|
|
//Unlock
|
|
$(".checkbox_head_"+calendar_id).attr("disabled", false);
|
|
$(".checkbox_head_"+calendar_id).removeAttr("disabled");
|
|
|
|
$(".row_odd td.checkboxes_col_"+calendar_id).css({
|
|
"opacity":"1",
|
|
"background-color":"#dcdcdc",
|
|
"border-left":"1px #bbb solid",
|
|
"border-right":"1px #bbb solid",
|
|
"z-index":"1"
|
|
});
|
|
$(".row_even td.checkboxes_col_"+calendar_id).css({
|
|
"opacity":"1",
|
|
"background-color":"#eee",
|
|
"border-left":"1px #bbb solid",
|
|
"border-right":"1px #bbb solid",
|
|
"z-index":"1"
|
|
});
|
|
|
|
$(".checkboxes_col_"+calendar_id).mouseover(function() {
|
|
//$(".checkbox_head_"+calendar_id).removeAttr("opacity");
|
|
//$("row_even td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"red", "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
|
|
//$("row_odd td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"#FFF", "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
|
|
});
|
|
|
|
$(".checkboxes_col_"+calendar_id).mouseout(function() {
|
|
// $("row_even td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"#F9F9F9", "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
|
|
// $("row_odd td.checkboxes_col_"+calendar_id).css({"opacity":"1","background-color":"#FFF", "border-left":"1px #EEEE00 solid", "border-right":"1px #EEEE00 solid" , "border-bottom":"1px #ccc solid" });
|
|
});
|
|
|
|
$(".checkboxes_col_"+calendar_id+" input:checkbox").attr("disabled",false);
|
|
$(this).attr("src","'.Display::returnIconPath('lock-open.png').'");
|
|
$(this).attr("title","'.get_lang('Lock date').'");
|
|
$(this).attr("alt","'.get_lang('Lock date').'");
|
|
$(this).attr("class","img_unlock");
|
|
$("#hidden_input_"+calendar_id).attr("disabled",false);
|
|
$("#hidden_input_"+calendar_id).attr("value",calendar_id);
|
|
return false;
|
|
}
|
|
});
|
|
|
|
$("table th input:checkbox").click(function() {
|
|
var col_id = this.id;
|
|
var col_split = col_id.split("_");
|
|
var calendar_id = col_split[2];
|
|
|
|
if (this.checked) {
|
|
$(".checkboxes_col_"+calendar_id+" input:checkbox").prop("checked",true);
|
|
$(".checkboxes_col_"+calendar_id+"").addClass("row_selected");
|
|
} else {
|
|
$(".checkboxes_col_"+calendar_id+" input:checkbox").prop("checked",false);
|
|
$(".checkboxes_col_"+calendar_id+"").removeClass("row_selected");
|
|
}
|
|
});
|
|
|
|
$(".attendance-sheet-content .row_odd, .attendance-sheet-content .row_even").mouseover(function() {
|
|
$(".row_odd").css({"background-color":"#F9F9F9"});
|
|
$(".row_even").css({"background-color":"#FFF"});
|
|
});
|
|
$(".attendance-sheet-content .row_odd, .attendance-sheet-content .row_even").mouseout(function() {
|
|
$(".row_odd").css({"background-color":"#F9F9F9"});
|
|
$(".row_even").css({"background-color":"#FFF"});
|
|
});
|
|
});
|
|
|
|
</script>';
|
|
|
|
$tpl = new Template(get_lang('Attendance'));
|
|
$student_param = '';
|
|
$student_id = null;
|
|
if (api_is_drh() && isset($_GET['student_id'])) {
|
|
$student_id = (int) ($_GET['student_id']);
|
|
$student_param = '&student_id='.$student_id;
|
|
$student_info = api_get_user_info($student_id);
|
|
$interbreadcrumb[] = [
|
|
'url' => api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?student='.$student_id,
|
|
'name' => $student_info['complete_name'],
|
|
];
|
|
}
|
|
if (api_is_in_gradebook()) {
|
|
$interbreadcrumb[] = [
|
|
'url' => api_get_path(WEB_CODE_PATH).'gradebook/index.php?'.api_get_cidreq(),
|
|
'name' => get_lang('Assessments'),
|
|
];
|
|
}
|
|
$interbreadcrumb[] = [
|
|
'url' => 'index.php?'.api_get_cidreq().'&action=attendance_list&'.$student_param,
|
|
'name' => get_lang('Attendances'),
|
|
];
|
|
|
|
if ($attendanceEntity) {
|
|
$interbreadcrumb[] = ['url' => '#', 'name' => $attendanceEntity->getName()];
|
|
}
|
|
|
|
if ('calendar_list' === $action || 'calendar_edit' === $action) {
|
|
$interbreadcrumb[] = [
|
|
'url' => 'index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendanceId,
|
|
'name' => $attendanceEntity->getName(),
|
|
];
|
|
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Attendance calendar')];
|
|
}
|
|
|
|
$allowToEdit = api_is_allowed_to_edit(null, true);
|
|
$currentUrl = api_get_path(WEB_CODE_PATH).'attendance/index.php?'.api_get_cidreq();
|
|
$content = '';
|
|
switch ($action) {
|
|
case 'attendance_list':
|
|
if ($allowToEdit) {
|
|
$content .= '<div class="actions">';
|
|
$content .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_add">';
|
|
$content .= Display::return_icon(
|
|
'new_attendance_list.png',
|
|
get_lang('Create a new attendance list'),
|
|
'',
|
|
ICON_SIZE_MEDIUM
|
|
);
|
|
$content .= '</a>';
|
|
$content .= '</div>';
|
|
}
|
|
|
|
if (0 === $attendance->getNumberOfAttendances()) {
|
|
$attendance->set_name(get_lang('Attendances'));
|
|
$attendance->set_description(get_lang('Attendances'));
|
|
$attendance->attendance_add();
|
|
}
|
|
$default_column = isset($default_column) ? $default_column : null;
|
|
$parameters = isset($parameters) ? $parameters : null;
|
|
$table = new SortableTable(
|
|
'attendance_list',
|
|
['Attendance', 'getNumberOfAttendances'],
|
|
['Attendance', 'getAttendanceData'],
|
|
$default_column
|
|
);
|
|
$table->set_additional_parameters($parameters);
|
|
$table->set_header(0, '', false, ['style' => 'width:20px;']);
|
|
$table->set_header(1, get_lang('Name'), true);
|
|
$table->set_header(2, get_lang('Description'), true);
|
|
$table->set_header(3, get_lang('# attended'), true, ['style' => 'width:90px;']);
|
|
|
|
if (api_is_allowed_to_edit(null, true)) {
|
|
$table->set_header(4, get_lang('Detail'), false, ['style' => 'text-align:center']);
|
|
$actions = [
|
|
'attendance_set_invisible_select' => get_lang('Set invisible'),
|
|
'attendance_set_visible_select' => get_lang('Set visible'),
|
|
];
|
|
|
|
$allow = api_get_setting('allow_delete_attendance');
|
|
if ('true' === $allow) {
|
|
$actions['attendance_delete_select'] = get_lang('Delete all selected attendances');
|
|
}
|
|
$table->set_form_actions($actions);
|
|
}
|
|
|
|
if ($table->get_total_number_of_items() > 0) {
|
|
$content .= $table->return_table();
|
|
}
|
|
|
|
break;
|
|
case 'attendance_add':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Create a new attendance list')];
|
|
|
|
$form = new FormValidator(
|
|
'attendance_add',
|
|
'POST',
|
|
$currentUrl.'&action=attendance_add&'
|
|
);
|
|
$attendance->setAttendanceForm($form);
|
|
|
|
if ($form->validate()) {
|
|
$attendance->set_name($_POST['title']);
|
|
$attendance->set_description($_POST['description']);
|
|
$attendance->set_attendance_qualify_title($_POST['attendance_qualify_title']);
|
|
$attendance->set_attendance_weight($_POST['attendance_weight']);
|
|
$link_to_gradebook = false;
|
|
if (isset($_POST['attendance_qualify_gradebook']) &&
|
|
1 == $_POST['attendance_qualify_gradebook']
|
|
) {
|
|
$link_to_gradebook = true;
|
|
}
|
|
$attendance->category_id = isset($_POST['category_id']) ? $_POST['category_id'] : 0;
|
|
$attendanceId = $attendance->attendance_add($link_to_gradebook);
|
|
|
|
if ($attendanceId) {
|
|
Skill::saveSkills($form, ITEM_TYPE_ATTENDANCE, $attendanceId);
|
|
header('Location: '.$currentUrl.'&action=calendar_add&attendance_id='.$attendanceId);
|
|
exit;
|
|
}
|
|
|
|
header('Location: '.$currentUrl);
|
|
exit;
|
|
} else {
|
|
$content = $form->returnForm();
|
|
}
|
|
break;
|
|
case 'attendance_edit':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
$form = new FormValidator(
|
|
'attendance_edit',
|
|
'POST',
|
|
'index.php?action=attendance_edit&'.api_get_cidreq().'&attendance_id='.$attendanceId
|
|
);
|
|
|
|
$attendance->setAttendanceForm($form, $attendanceEntity);
|
|
|
|
if (!empty($_POST['title'])) {
|
|
$attendance->set_name($_POST['title']);
|
|
$attendance->set_description($_POST['description']);
|
|
if (isset($_POST['attendance_qualify_title'])) {
|
|
$attendance->set_attendance_qualify_title($_POST['attendance_qualify_title']);
|
|
}
|
|
|
|
if (isset($_POST['attendance_weight'])) {
|
|
$attendance->set_attendance_weight($_POST['attendance_weight']);
|
|
}
|
|
|
|
$attendance->category_id = isset($_POST['category_id']) ? $_POST['category_id'] : '';
|
|
$link_to_gradebook = false;
|
|
if (isset($_POST['attendance_qualify_gradebook']) &&
|
|
1 == $_POST['attendance_qualify_gradebook']
|
|
) {
|
|
$link_to_gradebook = true;
|
|
}
|
|
$attendance->attendance_edit($attendanceEntity, $link_to_gradebook);
|
|
|
|
Skill::saveSkills($form, ITEM_TYPE_ATTENDANCE, $attendanceId);
|
|
Display::addFlash(Display::return_message(get_lang('Update successful')));
|
|
|
|
Security::clear_token();
|
|
header('Location:index.php?action=attendance_list&'.api_get_cidreq());
|
|
exit;
|
|
} else {
|
|
$content = $form->returnForm();
|
|
}
|
|
break;
|
|
case 'attendance_set_visible':
|
|
case 'attendance_set_visible_select':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
if (isset($_POST['id']) && is_array($_POST['id'])) {
|
|
foreach ($_POST['id'] as $id) {
|
|
$attendanceEntity = $repo->find($id);
|
|
$attendance->changeVisibility($attendanceEntity, 1);
|
|
}
|
|
} else {
|
|
$attendance->changeVisibility($attendanceEntity, 1);
|
|
}
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Updated')));
|
|
header('Location: '.$currentUrl);
|
|
exit;
|
|
break;
|
|
case 'attendance_set_invisible':
|
|
case 'attendance_set_invisible_select':
|
|
if (isset($_POST['id']) && is_array($_POST['id'])) {
|
|
foreach ($_POST['id'] as $id) {
|
|
$attendanceEntity = $repo->find($id);
|
|
$attendance->changeVisibility($attendanceEntity, 0);
|
|
}
|
|
} else {
|
|
$attendance->changeVisibility($attendanceEntity, 0);
|
|
}
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Updated')));
|
|
header('Location: '.$currentUrl);
|
|
exit;
|
|
break;
|
|
case 'attendance_delete_select':
|
|
case 'attendance_delete':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
if (isset($_POST['id']) && is_array($_POST['id'])) {
|
|
foreach ($_POST['id'] as $id) {
|
|
$attendanceEntity = $repo->find($id);
|
|
$attendance->attendance_delete($attendanceEntity);
|
|
}
|
|
} else {
|
|
$attendance->attendance_delete($attendanceEntity);
|
|
}
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Deleted')));
|
|
header('Location: '.$currentUrl);
|
|
exit;
|
|
|
|
break;
|
|
case 'attendance_sheet_list_no_edit':
|
|
case 'attendance_sheet_list':
|
|
$edit = true;
|
|
if ('attendance_sheet_list_no_edit' === $action) {
|
|
$edit = false;
|
|
}
|
|
$groupId = isset($_REQUEST['group_id']) ? $_REQUEST['group_id'] : null;
|
|
$users_in_course = $attendance->get_users_rel_course($attendanceId, $groupId);
|
|
|
|
$filter_type = 'today';
|
|
if (!empty($_REQUEST['filter'])) {
|
|
$filter_type = $_REQUEST['filter'];
|
|
}
|
|
|
|
if ('POST' === strtoupper($_SERVER['REQUEST_METHOD'])) {
|
|
$my_calendar_id = null;
|
|
if (is_numeric($filter_type)) {
|
|
$my_calendar_id = $filter_type;
|
|
$filter_type = 'calendar_id';
|
|
}
|
|
$attendant_calendar = $attendance->get_attendance_calendar(
|
|
$attendanceId,
|
|
$filter_type,
|
|
$my_calendar_id,
|
|
$groupId
|
|
);
|
|
$attendant_calendar_all = $attendance->get_attendance_calendar(
|
|
$attendanceId,
|
|
'all',
|
|
null,
|
|
$groupId
|
|
);
|
|
$users_presence = $attendance->get_users_attendance_sheet($attendanceId, 0, $groupId);
|
|
$next_attendance_calendar_id = $attendance->get_next_attendance_calendar_id($attendanceId);
|
|
$next_attendance_calendar_datetime = $attendance->getNextAttendanceCalendarDatetime($attendanceId);
|
|
}
|
|
$content = $attendance->getCalendarSheet($edit, $attendanceId, $student_id);
|
|
|
|
$tpl->assign('table', $content);
|
|
$content = $tpl->fetch('@ChamiloCore/Attendance/sheet.html.twig');
|
|
break;
|
|
case 'attendance_sheet_export_to_pdf':
|
|
$attendance->attendance_sheet_export_to_pdf(
|
|
$attendanceId,
|
|
$student_id,
|
|
api_get_course_id()
|
|
);
|
|
|
|
break;
|
|
case 'attendance_sheet_add':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
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,
|
|
$attendanceId
|
|
);
|
|
}
|
|
}
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Updated')));
|
|
header('Location: '.$currentUrl.'&action=attendance_sheet_list&attendance_id='.$attendanceId);
|
|
exit;
|
|
|
|
break;
|
|
case 'lock_attendance':
|
|
case 'unlock_attendance':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
if ('lock_attendance' === $action) {
|
|
$attendance->lock($attendanceEntity);
|
|
} else {
|
|
$attendance->lock($attendanceEntity, false);
|
|
}
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Updated')));
|
|
header('Location: '.$currentUrl);
|
|
exit;
|
|
|
|
break;
|
|
case 'calendar_add':
|
|
$groupList = isset($_POST['groups']) ? [$_POST['groups']] : [];
|
|
$interbreadcrumb[] = [
|
|
'url' => 'index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendanceId,
|
|
'name' => $attendanceEntity->getName(),
|
|
];
|
|
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Add a date and time')];
|
|
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
if ('POST' === strtoupper($_SERVER['REQUEST_METHOD'])) {
|
|
if (!isset($_POST['cancel'])) {
|
|
if (isset($_POST['repeat'])) {
|
|
//@todo check this error_logs
|
|
$start_datetime = api_strtotime(
|
|
api_get_utc_datetime($_POST['date_time']),
|
|
'UTC'
|
|
);
|
|
|
|
$end_datetime = api_strtotime(api_get_utc_datetime($_POST['end_date_time'].' 23:59:59'), 'UTC');
|
|
$checkdate = api_is_valid_date(api_get_utc_datetime($_POST['end_date_time'].' 23:59:59'));
|
|
|
|
$repeat_type = $_POST['repeat_type'];
|
|
if (($end_datetime > $start_datetime) && $checkdate) {
|
|
$attendance->attendance_repeat_calendar_add(
|
|
$attendanceEntity,
|
|
$start_datetime,
|
|
$end_datetime,
|
|
$repeat_type,
|
|
$groupList
|
|
);
|
|
$action = 'calendar_list';
|
|
} else {
|
|
if (!$checkdate) {
|
|
$data['error_checkdate'] = true;
|
|
} else {
|
|
$data['error_repeat_date'] = true;
|
|
}
|
|
$data['repeat'] = true;
|
|
$action = 'calendar_add';
|
|
}
|
|
} else {
|
|
$datetime = $_POST['date_time'];
|
|
$datetimezone = api_get_utc_datetime($datetime);
|
|
if (!empty($datetime)) {
|
|
$attendance->set_date_time($datetimezone);
|
|
$attendance->attendance_calendar_add($attendanceEntity, $groupList);
|
|
}
|
|
}
|
|
}
|
|
|
|
header('Location: '.$currentUrl.'&action=attendance_sheet_list&attendance_id='.$attendanceId);
|
|
exit;
|
|
} else {
|
|
$groupList = GroupManager::get_group_list(null, null, 1);
|
|
$groupIdList = ['--'];
|
|
foreach ($groupList as $group) {
|
|
$groupIdList[$group['id']] = $group['name'];
|
|
}
|
|
|
|
// calendar add form
|
|
$form = new FormValidator(
|
|
'attendance_calendar_add',
|
|
'POST',
|
|
'index.php?action=calendar_add&attendance_id='.$attendanceId.'&'.api_get_cidreq(),
|
|
''
|
|
);
|
|
$form->addElement('header', get_lang('Add a date time'));
|
|
$form->addDateTimePicker(
|
|
'date_time',
|
|
[get_lang('Start Date')],
|
|
['id' => 'date_time']
|
|
);
|
|
|
|
$defaults['date_time'] = date('Y-m-d H:i', api_strtotime(api_get_local_time()));
|
|
|
|
$form->addElement(
|
|
'checkbox',
|
|
'repeat',
|
|
null,
|
|
get_lang('Repeat date'),
|
|
[
|
|
'onclick' => "javascript: if(this.checked){document.getElementById('repeat-date-attendance').style.display='block';}else{document.getElementById('repeat-date-attendance').style.display='none';}",
|
|
]
|
|
);
|
|
|
|
$defaults['repeat'] = isset($repeat) ? $repeat : null;
|
|
if ($defaults['repeat']) {
|
|
$form->addElement('html', '<div id="repeat-date-attendance" style="display:block">');
|
|
} else {
|
|
$form->addElement('html', '<div id="repeat-date-attendance" style="display:none">');
|
|
}
|
|
|
|
$a_repeat_type = [
|
|
'daily' => get_lang('Daily'),
|
|
'weekly' => get_lang('Weekly'),
|
|
'monthlyByDate' => get_lang('Monthly, by date'),
|
|
];
|
|
$form->addElement('select', 'repeat_type', get_lang('Repeat type'), $a_repeat_type);
|
|
|
|
$form->addDatePicker(
|
|
'end_date_time',
|
|
get_lang('Repeat end date')
|
|
);
|
|
$defaults['end_date_time'] = date('Y-m-d');
|
|
$form->addElement('html', '</div>');
|
|
|
|
$defaults['repeat_type'] = 'weekly';
|
|
|
|
$form->addSelect('groups', get_lang('Group'), $groupIdList);
|
|
|
|
$form->addButtonCreate(get_lang('Save'));
|
|
$form->setDefaults($defaults);
|
|
$content = $form->returnForm();
|
|
}
|
|
break;
|
|
case 'calendar_edit':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
if ('POST' === strtoupper($_SERVER['REQUEST_METHOD'])) {
|
|
if (!isset($_POST['cancel'])) {
|
|
$attendance->set_date_time(api_get_utc_datetime($_POST['date_time']));
|
|
$attendance->attendance_calendar_edit($calendarId, $attendanceEntity);
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Updated')));
|
|
}
|
|
|
|
header('Location: '.$currentUrl.'&action=calendar_list&attendance_id='.$attendanceId);
|
|
exit;
|
|
} else {
|
|
// calendar edit form
|
|
$content .= '<div class="attendance-calendar-edit">';
|
|
$form = new FormValidator(
|
|
'attendance_calendar_edit',
|
|
'POST',
|
|
'index.php?action=calendar_edit&attendance_id='.$attendanceId.'&calendar_id='.$calendarId.'&'.api_get_cidreq(),
|
|
''
|
|
);
|
|
$form->addDateTimePicker(
|
|
'date_time',
|
|
[get_lang('Date')],
|
|
['form_name' => 'attendance_calendar_edit'],
|
|
5
|
|
);
|
|
$defaults['date_time'] = $calendarEntity->getDateTime()->format('Y-m-d H:i:s');
|
|
$form->addButtonSave(get_lang('Save'));
|
|
$form->addButtonCancel(get_lang('Cancel'), 'cancel');
|
|
$form->setDefaults($defaults);
|
|
$content .= $form->returnForm();
|
|
$content .= '</div>';
|
|
}
|
|
break;
|
|
case 'calendar_all_delete':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
$attendance->attendance_calendar_delete(0, $attendanceId, true);
|
|
|
|
Display::addFlash(Display::return_message(get_lang('Deleted')));
|
|
|
|
header('Location: '.$currentUrl.'&action=calendar_list&attendance_id='.$attendanceId);
|
|
exit;
|
|
break;
|
|
case 'calendar_delete':
|
|
if (!$allowToEdit) {
|
|
api_not_allowed(true);
|
|
}
|
|
$attendance->attendance_calendar_delete($calendarId, $attendanceId);
|
|
Display::addFlash(Display::return_message(get_lang('Deleted')));
|
|
|
|
header('Location: '.$currentUrl.'&action=calendar_list&attendance_id='.$attendanceId);
|
|
exit;
|
|
break;
|
|
case 'calendar_list':
|
|
$groupList = isset($_POST['groups']) ? [$_POST['groups']] : [];
|
|
$attendance_calendar = $attendance->get_attendance_calendar(
|
|
$attendanceId,
|
|
'all',
|
|
null,
|
|
null,
|
|
true
|
|
);
|
|
$is_locked_attendance = $attendance->is_locked_attendance($attendanceId);
|
|
|
|
if (!$is_locked_attendance || api_is_platform_admin()) {
|
|
$content .= '<div class="actions">';
|
|
if ('calendar_add' === $action) {
|
|
$content .= '<a href="index.php?'.api_get_cidreq().'&action=calendar_list&attendance_id='.$attendanceId.'">'.
|
|
Display::return_icon('back.png', get_lang('Attendance calendar'), '', ICON_SIZE_MEDIUM).'</a>';
|
|
} else {
|
|
$content .= '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendanceId.'">'.
|
|
Display::return_icon('back.png', get_lang('Attendance sheet'), '', ICON_SIZE_MEDIUM).'</a>';
|
|
if (api_is_allowed_to_edit()) {
|
|
$content .= '<a href="index.php?'.api_get_cidreq().'&action=calendar_add&attendance_id='.$attendanceId.'">'.
|
|
Display::return_icon('add.png', get_lang('Add a date and time'), '', ICON_SIZE_MEDIUM).'</a>';
|
|
$content .= '<a onclick="javascript:if(!confirm(\''.get_lang('Are you sure you want to delete all dates?').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=calendar_all_delete&attendance_id='.$attendanceId.'">'.
|
|
Display::return_icon('clean.png', get_lang('Clean the calendar of all lists'), '', ICON_SIZE_MEDIUM).'</a>';
|
|
}
|
|
}
|
|
$content .= '</div>';
|
|
}
|
|
|
|
$message_information = get_lang('The attendance calendar allows you to register attendance lists (one per real session the students need to attend). Add new attendance lists here.');
|
|
if (!empty($message_information)) {
|
|
$message = '<strong>'.get_lang('Information').'</strong><br />';
|
|
$message .= $message_information;
|
|
$content .= Display::return_message($message, 'normal', false);
|
|
}
|
|
|
|
if (isset($error_repeat_date) && $error_repeat_date) {
|
|
$message = get_lang('End date must be more than the start date');
|
|
$content .= Display::return_message($message, 'error', false);
|
|
}
|
|
|
|
if (isset($error_checkdate) && $error_checkdate) {
|
|
$message = get_lang('Invalid date');
|
|
$content .= Display::return_message($message, 'error', false);
|
|
}
|
|
|
|
// Calendar list
|
|
$groupList = GroupManager::get_group_list();
|
|
$groupIdList = ['--'];
|
|
foreach ($groupList as $group) {
|
|
$groupIdList[$group['id']] = $group['name'];
|
|
}
|
|
|
|
$content .= Display::page_subheader(get_lang('Calendar list of attendances'));
|
|
$content .= '<ul class="list-group">';
|
|
if (!empty($attendance_calendar)) {
|
|
foreach ($attendance_calendar as $calendar) {
|
|
$content .= '<li class="list-group-item">';
|
|
$content .= Display::return_icon(
|
|
'lp_calendar_event.png',
|
|
get_lang('Date DateTime time'),
|
|
null,
|
|
ICON_SIZE_MEDIUM
|
|
).' '.
|
|
substr(
|
|
$calendar['date_time'],
|
|
0,
|
|
strlen($calendar['date_time']) - 3
|
|
).
|
|
' ';
|
|
|
|
if (isset($calendar['groups']) && !empty($calendar['groups'])) {
|
|
foreach ($calendar['groups'] as $group) {
|
|
$content .= ' '.Display::label($groupIdList[$group['group_id']]);
|
|
}
|
|
}
|
|
|
|
if (!$is_locked_attendance || api_is_platform_admin()) {
|
|
if (api_is_allowed_to_edit()) {
|
|
$content .= '<div class="pull-right">';
|
|
$content .= '<a href="index.php?'.api_get_cidreq().'&action=calendar_edit&calendar_id='.(int) ($calendar['iid']).'&attendance_id='.$attendanceId.'">'.
|
|
Display::return_icon('edit.png', get_lang('Edit'), ['style' => 'vertical-align:middle'], ICON_SIZE_SMALL).'</a> ';
|
|
$content .= '<a onclick="javascript:if(!confirm(\''.get_lang('Are you sure you want to delete').'\')) return false;" href="index.php?'.api_get_cidreq().'&action=calendar_delete&calendar_id='.(int) ($calendar['iid']).'&attendance_id='.$attendanceId.'">'.
|
|
Display::return_icon('delete.png', get_lang('Delete'), ['style' => 'vertical-align:middle'], ICON_SIZE_SMALL).'</a>';
|
|
$content .= '</div>';
|
|
}
|
|
}
|
|
|
|
$content .= '</li>';
|
|
}
|
|
|
|
/* } else {
|
|
echo Display::return_message(get_lang('There is no date/time registered yet'), 'warning');
|
|
}*/
|
|
$content .= '</ul>';
|
|
}
|
|
|
|
break;
|
|
case 'calendar_logins':
|
|
if (api_is_course_admin() || api_is_drh()) {
|
|
$result = $attendance->getAttendanceBaseInLogin(false, true);
|
|
$content .= '<div class="actions">';
|
|
$content .= '<a href="index.php?'.api_get_cidreq().'&action=calendar_list">'.
|
|
Display::return_icon('back.png', get_lang('AttendanceCalendar'), '', ICON_SIZE_MEDIUM).'</a>';
|
|
$content .= '</div>';
|
|
$content .= $result['form'];
|
|
$content .= $result['table'];
|
|
}
|
|
break;
|
|
}
|
|
|
|
$tpl->assign('content', $content);
|
|
//$tpl->assign('actions', $toolbar);
|
|
$tpl->display_one_col_template();
|
|
|