Session: Add export of results of session courses in CSV - refs BT#20535

pull/4601/head
Christian 3 years ago
parent 7b586e09dd
commit 08fc2d135f
  1. 35
      main/inc/lib/TrackingCourseLog.php
  2. 91
      main/session/session_list.php

@ -519,9 +519,11 @@ class TrackingCourseLog
$numberOfItems,
$column,
$direction,
array $conditions = []
array $conditions = [],
bool $exerciseToCheckConfig = true,
bool $displaySessionInfo = false
) {
$includeInvitedUsers = $conditions['include_invited_users']; // include the invited users
$includeInvitedUsers = $conditions['include_invited_users'] ?? false; // include the invited users
$getCount = $conditions['get_count'] ?? false;
$csvContent = [];
@ -673,16 +675,18 @@ class TrackingCourseLog
Session::write('user_id_list', []);
$userIdList = [];
$addExerciseOption = api_get_configuration_value('add_exercise_best_attempt_in_report');
$exerciseResultsToCheck = [];
if (!empty($addExerciseOption) && isset($addExerciseOption['courses']) &&
isset($addExerciseOption['courses'][$courseCode])
) {
foreach ($addExerciseOption['courses'][$courseCode] as $exerciseId) {
$exercise = new Exercise();
$exercise->read($exerciseId);
if ($exercise->iid) {
$exerciseResultsToCheck[] = $exercise;
if ($exerciseToCheckConfig) {
$addExerciseOption = api_get_configuration_value('add_exercise_best_attempt_in_report');
$exerciseResultsToCheck = [];
if (!empty($addExerciseOption) && isset($addExerciseOption['courses']) &&
isset($addExerciseOption['courses'][$courseCode])
) {
foreach ($addExerciseOption['courses'][$courseCode] as $exerciseId) {
$exercise = new Exercise();
$exercise->read($exerciseId);
if ($exercise->iid) {
$exerciseResultsToCheck[] = $exercise;
}
}
}
}
@ -863,6 +867,13 @@ class TrackingCourseLog
// store columns in array $users
$userRow = [];
if ($displaySessionInfo && !empty($GLOBALS['session_id'])) {
$sessionInfo = api_get_session_info($GLOBALS['session_id']);
$userRow['session_name'] = $sessionInfo['name'];
$userRow['session_startdate'] = $sessionInfo['access_start_date'];
$userRow['session_enddate'] = $sessionInfo['access_end_date'];
$userRow['course_name'] = $courseInfo['name'];
}
$userRow['official_code'] = $user['official_code']; //0
if ($sortByFirstName) {
$userRow['firstname'] = $user['col2'];

@ -109,6 +109,80 @@ switch ($action) {
}
header('Location: '.$url);
exit;
case 'export_csv':
$selectedSessions = explode(',', $idMultiple);
$csvHeaders = [];
$csvHeaders[] = get_lang('SessionName');
$csvHeaders[] = get_lang('SessionStartDate');
$csvHeaders[] = get_lang('SessionEndDate');
$csvHeaders[] = get_lang('CourseName');
$csvHeaders[] = get_lang('OfficialCode');
if (api_sort_by_first_name()) {
$csvHeaders[] = get_lang('FirstName');
$csvHeaders[] = get_lang('LastName');
} else {
$csvHeaders[] = get_lang('LastName');
$csvHeaders[] = get_lang('FirstName');
}
$csvHeaders[] = get_lang('Login');
$csvHeaders[] = get_lang('TrainingTime');
$csvHeaders[] = get_lang('CourseProgress');
$csvHeaders[] = get_lang('ExerciseProgress');
$csvHeaders[] = get_lang('ExerciseAverage');
$csvHeaders[] = get_lang('Score');
$csvHeaders[] = get_lang('Score').' - '.get_lang('BestAttempt');
$csvHeaders[] = get_lang('Student_publication');
$csvHeaders[] = get_lang('Messages');
$csvHeaders[] = get_lang('Classes');
$csvHeaders[] = get_lang('RegistrationDate');
$csvHeaders[] = get_lang('FirstLoginInCourse');
$csvHeaders[] = get_lang('LatestLoginInCourse');
$csvHeaders[] = get_lang('LpFinalizationDate');
$csvHeaders[] = get_lang('QuizFinalizationDate');
$csvData = [];
$i = 0;
foreach ($selectedSessions as $sessionId) {
$courses = SessionManager::get_course_list_by_session_id($sessionId);
if (!empty($courses)) {
foreach ($courses as $course) {
$courseCode = $course['course_code'];
$studentList = CourseManager::get_student_list_from_course_code(
$courseCode,
true,
$sessionId
);
$nbStudents = count($studentList);
// Set global variables used by get_user_data()
$GLOBALS['user_ids'] = array_keys($studentList);
$GLOBALS['session_id'] = $sessionId;
$GLOBALS['course_code'] = $courseCode;
$GLOBALS['export_csv'] = true;
$csvContentInSession = TrackingCourseLog::getUserData(
null,
$nbStudents,
null,
null,
[],
false,
true
);
if (!empty($csvContentInSession)) {
$csvData = array_merge($csvData, $csvContentInSession);
}
}
}
}
if (!empty($csvData)) {
array_unshift($csvData, $csvHeaders);
$filename = 'export_session_courses_reports_complete_'.api_get_local_time();
Export::arrayToCsv($csvData, $filename);
exit;
}
break;
case 'export_multiple':
$sessionList = explode(',', $idMultiple);
@ -373,6 +447,7 @@ $orderUrl = api_get_path(WEB_AJAX_PATH).'session.ajax.php?a=order';
$deleteUrl = api_get_self().'?list_type='.$listType.'&action=delete_multiple';
$copyUrl = api_get_self().'?list_type='.$listType.'&action=copy_multiple';
$exportUrl = api_get_self().'?list_type='.$listType.'&action=export_multiple';
$exportCsvUrl = api_get_self().'?list_type='.$listType.'&action=export_csv';
$extra_params['multiselect'] = true;
?>
@ -522,7 +597,7 @@ $extra_params['multiselect'] = true;
{reloadAfterSubmit:true, url: '<?php echo $deleteUrl; ?>' }, // del options
prmSearch
).navButtonAdd('#sessions_pager',{
caption:"<?php echo addslashes(get_lang('Copy')); ?>",
caption:"<?php echo addslashes(Display::return_icon('copy.png', get_lang('Copy'), '', ICON_SIZE_SMALL)); ?>",
buttonicon:"ui-icon ui-icon-plus",
onClickButton: function(a) {
var list = $("#sessions").jqGrid('getGridParam', 'selarrrow');
@ -533,7 +608,7 @@ $extra_params['multiselect'] = true;
}
}
}).navButtonAdd('#sessions_pager',{
caption:"<?php echo addslashes(get_lang('ExportCoursesReports')); ?>",
caption:"<?php echo addslashes(Display::return_icon('save_pack.png', get_lang('ExportCoursesReports'), '', ICON_SIZE_SMALL)); ?>",
buttonicon:"ui-icon ui-icon-plus",
onClickButton: function(a) {
var list = $("#sessions").jqGrid('getGridParam', 'selarrrow');
@ -544,6 +619,18 @@ $extra_params['multiselect'] = true;
}
},
position:"last"
}).navButtonAdd('#sessions_pager',{
caption:"<?php echo addslashes(Display::return_icon('export_csv.png', get_lang('ExportCoursesReportsComplete'), '', ICON_SIZE_SMALL)); ?>",
buttonicon:"ui-icon ui-icon-plus",
onClickButton: function(a) {
var list = $("#sessions").jqGrid('getGridParam', 'selarrrow');
if (list.length) {
window.location.replace('<?php echo $exportCsvUrl; ?>&id='+list.join(','));
} else {
alert("<?php echo addslashes(get_lang('SelectAnOption')); ?>");
}
},
position:"last"
});
<?php

Loading…
Cancel
Save