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.
124 lines
3.8 KiB
124 lines
3.8 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
$cidReset = true;
|
|
require_once __DIR__.'/../inc/global.inc.php';
|
|
|
|
api_block_anonymous_users(true);
|
|
|
|
if (api_is_student()) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
$formValidator = new FormValidator('time_report_form', 'post', api_get_self());
|
|
|
|
// Get the list of users based on the role
|
|
$userId = api_get_user_id();
|
|
$userOptions = [];
|
|
|
|
if (api_is_platform_admin() || (api_is_session_admin() && api_get_setting('prevent_session_admins_to_manage_all_users') !== 'true')) {
|
|
$userList = UserManager::get_user_list();
|
|
} else {
|
|
$userList = $studentList = UserManager::getUsersFollowedByUser(
|
|
$userId,
|
|
STUDENT,
|
|
false,
|
|
false,
|
|
false,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
COURSEMANAGER
|
|
);
|
|
}
|
|
|
|
$formValidator->addElement('checkbox', 'select_all_users', get_lang('SelectAllUsers'), null, ['id' => 'select_all_users']);
|
|
$userOptions = [];
|
|
foreach ($userList as $user) {
|
|
$userOptions[$user['user_id']] = $user['lastname'].' '.$user['firstname'];
|
|
}
|
|
$formValidator->addElement('select', 'users', get_lang('SelectUsers'), $userOptions, [
|
|
'multiple' => 'multiple',
|
|
'id' => 'user_selector',
|
|
]);
|
|
|
|
$htmlHeadXtra[] = '
|
|
<script>
|
|
$(function() {
|
|
var selectAllCheckbox = $("#select_all_users");
|
|
var userSelector = $("#user_selector");
|
|
|
|
userSelector.select2({
|
|
placeholder: "'.get_lang('SelectAnOption').'",
|
|
allowClear: true,
|
|
width: "100%"
|
|
});
|
|
|
|
selectAllCheckbox.on("change", function() {
|
|
if (this.checked) {
|
|
var allOptions = userSelector.find("option");
|
|
var allValues = [];
|
|
allOptions.each(function() {
|
|
allValues.push($(this).val());
|
|
});
|
|
userSelector.val(allValues).trigger("change");
|
|
} else {
|
|
userSelector.val(null).trigger("change");
|
|
}
|
|
});
|
|
});
|
|
</script>';
|
|
|
|
// Date selectors
|
|
$formValidator->addDatePicker('start_date', get_lang('StartDate'));
|
|
$formValidator->addDatePicker('end_date', get_lang('EndDate'));
|
|
|
|
// Report type selector
|
|
$reportTypeValues = [
|
|
'time_report' => get_lang('TimeReport'),
|
|
'billing_report' => get_lang('BillingReport'),
|
|
];
|
|
$formValidator->addElement('select', 'report_type', get_lang('ReportType'), $reportTypeValues);
|
|
|
|
// Button to generate the report
|
|
$formValidator->addButtonSend(get_lang('GenerateReport'));
|
|
|
|
// Form validation rules
|
|
$formValidator->addRule('start_date', get_lang('ThisFieldIsRequired'), 'required');
|
|
$formValidator->addRule('end_date', get_lang('ThisFieldIsRequired'), 'required');
|
|
$formValidator->addRule('users', get_lang('ThisFieldIsRequired'), 'required');
|
|
$formValidator->addRule('report_type', get_lang('ThisFieldIsRequired'), 'required');
|
|
|
|
if ($formValidator->validate()) {
|
|
$values = $formValidator->exportValues();
|
|
$users = $values['users'];
|
|
$startDate = $values['start_date'];
|
|
$endDate = $values['end_date'];
|
|
$reportType = $values['report_type'];
|
|
$exportXls = isset($_POST['export']);
|
|
|
|
if (empty($users)) {
|
|
Display::addFlash(Display::return_message(get_lang('NoUsersSelected'), 'warning'));
|
|
} else {
|
|
$data = Tracking::generateReport($reportType, $users, $startDate, $endDate);
|
|
if (empty($data)) {
|
|
Display::addFlash(Display::return_message(get_lang('NoDataToExport'), 'warning'));
|
|
} else {
|
|
$headers = $data['headers'];
|
|
$rows = $data['rows'];
|
|
array_unshift($rows, $headers);
|
|
$fileName = get_lang('Export').'-'.$reportTypeValues[$reportType].'_'.api_get_local_time();
|
|
Export::arrayToCsv($rows, $fileName);
|
|
}
|
|
}
|
|
}
|
|
|
|
$nameTools = get_lang('TimeReport');
|
|
Display::display_header($nameTools);
|
|
|
|
$formValidator->display();
|
|
|
|
Display::display_footer();
|
|
|