Skip to content

Commit 989cc07

Browse files
committed
Exercise: Add export all results with date filter - refs BT#20691
1 parent e89f4c0 commit 989cc07

File tree

4 files changed

+141
-6
lines changed

4 files changed

+141
-6
lines changed

main/admin/export_exercise_results.php

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/* For licensing terms, see /license.txt */
33
/**
44
* This script exports the PDF reports from a test for several students at once.
5+
* This script has a teacher-focused version at main/exercise/export/export_exercise_result.php
56
*/
67
$cidReset = true;
78
require_once __DIR__.'/../inc/global.inc.php';

main/exercise/exercise.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ function showUserToSendNotificacion(element) {
668668

669669
$actionsLeft .= Display::url(
670670
Display::return_icon('export_pdf.png', get_lang('ExportAllExercisesAllResults'), [], ICON_SIZE_MEDIUM),
671-
api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'.api_get_cidreq().'&action=export_all_exercises_results'
671+
api_get_path(WEB_CODE_PATH).'exercise/export/export_exercise_results.php?'.api_get_cidreq()
672672
);
673673

674674
if ($limitTeacherAccess) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
/**
4+
* This script exports the PDF reports from a test for several students at once.
5+
* This script is the teacher view of a similar script (for admins) at main/admin/export_exercise_results.php
6+
*/
7+
require_once __DIR__.'/../../inc/global.inc.php';
8+
9+
// Setting the section (for the tabs).
10+
$this_section = SECTION_COURSES;
11+
12+
api_protect_course_script(true);
13+
if (!api_is_allowed_to_edit()) {
14+
api_not_allowed(true);
15+
}
16+
17+
$sessionId = api_get_session_id();
18+
$courseId = api_get_course_int_id();
19+
$exerciseId = isset($_REQUEST['exerciseId']) ? (int) $_REQUEST['exerciseId'] : null;
20+
$exerciseIdChanged = isset($_GET['exercise_id_changed']) ? (int) $_GET['exercise_id_changed'] : null;
21+
22+
$courseInfo = [];
23+
if (empty($courseId)) {
24+
$exerciseId = 0;
25+
} else {
26+
$courseInfo = api_get_course_info_by_id($courseId);
27+
}
28+
29+
$interbreadcrumb[] = ['url' => '../exercise.php?'.api_get_cidreq(), 'name' => get_lang('Exercises')];
30+
31+
$confirmYourChoice = addslashes(get_lang('ConfirmYourChoice'));
32+
$htmlHeadXtra[] = "
33+
<script>
34+
function submit_form(obj) {
35+
document.export_all_results_form.submit();
36+
}
37+
38+
function mark_exercise_id_changed() {
39+
$('#exercise_id_changed').val('0');
40+
}
41+
42+
function confirm_your_choice() {
43+
return confirm('$confirmYourChoice');
44+
}
45+
</script>";
46+
47+
// Get exercise list for this course
48+
$exerciseList = ExerciseLib::get_all_exercises_for_course_id(
49+
$courseInfo,
50+
$sessionId,
51+
$courseId,
52+
false
53+
);
54+
55+
$exerciseSelectList = [];
56+
$exerciseSelectList = [0 => get_lang('All')];
57+
if (is_array($exerciseList)) {
58+
foreach ($exerciseList as $row) {
59+
$exerciseTitle = $row['title'];
60+
$exerciseSelectList[$row['iid']] = $exerciseTitle;
61+
}
62+
}
63+
64+
$url = api_get_self().'?'.api_get_cidreq().'&'.http_build_query(
65+
[
66+
'session_id' => $sessionId,
67+
'exerciseId' => $exerciseId,
68+
'exercise_id_changed' => $exerciseIdChanged,
69+
]
70+
);
71+
72+
// Form
73+
$form = new FormValidator('export_all_results_form', 'GET', $url);
74+
$form->addHeader(get_lang('ExportExerciseAllResults'));
75+
$form
76+
->addSelect(
77+
'exerciseId',
78+
get_lang('Exercise'),
79+
$exerciseSelectList
80+
)
81+
->setSelected($exerciseId);
82+
83+
$form->addDateTimePicker('start_date', get_lang('StartDate'));
84+
$form->addDateTimePicker('end_date', get_lang('EndDate'));
85+
$form->addRule('start_date', get_lang('InvalidDate'), 'datetime');
86+
$form->addRule('end_date', get_lang('InvalidDate'), 'datetime');
87+
88+
$form->addRule(
89+
['start_date', 'end_date'],
90+
get_lang('StartDateShouldBeBeforeEndDate'),
91+
'date_compare',
92+
'lte'
93+
);
94+
95+
$form->addHidden('exercise_id_changed', '0');
96+
$form->addButtonExport(get_lang('Export'), 'name');
97+
98+
if ($form->validate()) {
99+
$values = $form->getSubmitValues();
100+
101+
$exerciseId = (int) $values['exerciseId'];
102+
$filterDates = [
103+
'start_date' => (!empty($values['start_date']) ? $values['start_date'] : ''),
104+
'end_date' => (!empty($values['end_date']) ? $values['end_date'] : ''),
105+
];
106+
if ($exerciseId === 0) {
107+
ExerciseLib::exportAllExercisesResultsZip($sessionId, $courseId, $filterDates);
108+
} else {
109+
ExerciseLib::exportExerciseAllResultsZip($sessionId, $courseId, $exerciseId, $filterDates);
110+
}
111+
}
112+
113+
Display::display_header(get_lang('ExportExerciseAllResults'));
114+
115+
116+
echo $form->display();
117+
118+
Display::display_footer();

main/inc/lib/exercise.lib.php

+21-5
Original file line numberDiff line numberDiff line change
@@ -7164,8 +7164,8 @@ public static function saveFileExerciseResultPdf(
71647164
int $courseId,
71657165
int $sessionId
71667166
) {
7167-
$cinfo = api_get_course_info_by_id($courseId);
7168-
$courseCode = $cinfo['code'];
7167+
$courseInfo = api_get_course_info_by_id($courseId);
7168+
$courseCode = $courseInfo['code'];
71697169
$cidReq = 'cidReq='.$courseCode.'&id_session='.$sessionId.'&gidReq=0&gradebook=0';
71707170

71717171
$url = api_get_path(WEB_PATH).'main/exercise/exercise_show.php?'.$cidReq.'&id='.$exeId.'&action=export&export_type=all_results';
@@ -7190,10 +7190,17 @@ public static function saveFileExerciseResultPdf(
71907190
curl_close($ch);
71917191
}
71927192

7193+
/**
7194+
* Export all results of all exercises to a ZIP file (including one zip for each exercise)
7195+
* @param int $sessionId
7196+
* @param int $courseId
7197+
* @param array $filterDates
7198+
* @return false|void
7199+
*/
71937200
public static function exportAllExercisesResultsZip(
71947201
int $sessionId,
71957202
int $courseId,
7196-
$filterDates = []
7203+
array $filterDates = []
71977204
) {
71987205
$exercises = self::get_all_exercises_for_course_id(
71997206
null,
@@ -7215,7 +7222,7 @@ public static function exportAllExercisesResultsZip(
72157222

72167223
foreach ($exercises as $exercise) {
72177224
$exerciseId = $exercise['iid'];
7218-
self::exportExerciseAllResultsZip($sessionId, $courseId, $exerciseId, [], $exportFolderPath);
7225+
self::exportExerciseAllResultsZip($sessionId, $courseId, $exerciseId, $filterDates, $exportFolderPath);
72197226
}
72207227

72217228
// If export folder is not empty will be zipped.
@@ -7245,11 +7252,20 @@ public static function exportAllExercisesResultsZip(
72457252
return false;
72467253
}
72477254

7255+
/**
7256+
* Export all results of *one* exercise to a ZIP file containing individual PDFs
7257+
* @param int $sessionId
7258+
* @param int $courseId
7259+
* @param int $exerciseId
7260+
* @param array $filterDates
7261+
* @param string $mainPath
7262+
* @return false|void
7263+
*/
72487264
public static function exportExerciseAllResultsZip(
72497265
int $sessionId,
72507266
int $courseId,
72517267
int $exerciseId,
7252-
$filterDates = [],
7268+
array $filterDates = [],
72537269
string $mainPath = ''
72547270
) {
72557271
$objExerciseTmp = new Exercise($courseId);

0 commit comments

Comments
 (0)