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 has a teacher-focused version at main/exercise/export/export_exercise_result.php. |
||
6 | */ |
||
7 | $cidReset = true; |
||
8 | require_once __DIR__.'/../inc/global.inc.php'; |
||
9 | |||
10 | // Setting the section (for the tabs). |
||
11 | $this_section = SECTION_PLATFORM_ADMIN; |
||
12 | |||
13 | api_protect_admin_script(true); |
||
14 | |||
15 | $sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : null; |
||
16 | $courseId = isset($_GET['selected_course']) ? (int) $_GET['selected_course'] : null; |
||
17 | $exerciseId = isset($_REQUEST['exerciseId']) ? (int) $_REQUEST['exerciseId'] : null; |
||
18 | $courseIdChanged = isset($_GET['course_id_changed']) ? (int) $_GET['course_id_changed'] : null; |
||
19 | $exerciseIdChanged = isset($_GET['exercise_id_changed']) ? (int) $_GET['exercise_id_changed'] : null; |
||
20 | |||
21 | // Get the session list |
||
22 | $sessionList = SessionManager::get_sessions_by_user(api_get_user_id(), api_is_platform_admin()); |
||
23 | |||
24 | // Course list, get course list of session, or for course where user is admin |
||
25 | $courseList = []; |
||
26 | if (!empty($sessionId) && $sessionId != '-1' && !empty($sessionList)) { |
||
27 | $sessionInfo = []; |
||
28 | foreach ($sessionList as $session) { |
||
29 | if ($session['session_id'] == $sessionId) { |
||
30 | $sessionInfo = $session; |
||
31 | } |
||
32 | } |
||
33 | $courseList = $sessionInfo['courses']; |
||
34 | } else { |
||
35 | if (api_is_platform_admin()) { |
||
36 | $courseList = CourseManager::get_courses_list(0, 0, 'title'); |
||
37 | } else { |
||
38 | $courseList = CourseManager::get_course_list_of_user_as_course_admin(api_get_user_id()); |
||
39 | } |
||
40 | } |
||
41 | |||
42 | $courseInfo = []; |
||
43 | if (empty($courseId)) { |
||
44 | $exerciseId = 0; |
||
45 | } else { |
||
46 | $courseInfo = api_get_course_info_by_id($courseId); |
||
47 | } |
||
48 | |||
49 | $interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('PlatformAdmin')]; |
||
50 | |||
51 | $confirmYourChoice = addslashes(get_lang('ConfirmYourChoice')); |
||
52 | $htmlHeadXtra[] = " |
||
53 | <script> |
||
54 | function submit_form(obj) { |
||
55 | document.export_all_results_form.submit(); |
||
56 | } |
||
57 | |||
58 | function mark_course_id_changed() { |
||
59 | $('#course_id_changed').val('0'); |
||
60 | } |
||
61 | |||
62 | function mark_exercise_id_changed() { |
||
63 | $('#exercise_id_changed').val('0'); |
||
64 | } |
||
65 | |||
66 | function confirm_your_choice() { |
||
67 | return confirm('$confirmYourChoice'); |
||
68 | } |
||
69 | </script>"; |
||
70 | |||
71 | $sessionSelectList = [0 => get_lang('Select')]; |
||
72 | foreach ($sessionList as $item) { |
||
73 | $sessionSelectList[$item['session_id']] = $item['session_name']; |
||
74 | } |
||
75 | |||
76 | $courseSelectList = [0 => get_lang('Select')]; |
||
77 | foreach ($courseList as $item) { |
||
0 ignored issues
–
show
Comprehensibility
Bug
introduced
by
Loading history...
|
|||
78 | $courseItemId = $item['real_id']; |
||
79 | $courseInfo = api_get_course_info_by_id($courseItemId); |
||
80 | $courseSelectList[$courseItemId] = ''; |
||
81 | if ($courseItemId == $courseId) { |
||
82 | $courseSelectList[$courseItemId] = '> '; |
||
83 | } |
||
84 | $courseSelectList[$courseItemId] = $courseInfo['title']; |
||
85 | } |
||
86 | |||
87 | // If course has changed, reset the menu default |
||
88 | if (!empty($courseSelectList) && !in_array($courseId, array_keys($courseSelectList))) { |
||
89 | $courseId = 0; |
||
90 | } |
||
91 | |||
92 | $courseInfo = api_get_course_info_by_id($courseId); |
||
93 | |||
94 | // Get exercise list for this course |
||
95 | $exerciseList = ExerciseLib::get_all_exercises_for_course_id( |
||
96 | $courseInfo, |
||
97 | $sessionId, |
||
98 | $courseId, |
||
99 | false |
||
100 | ); |
||
101 | |||
102 | $exerciseSelectList = []; |
||
103 | $exerciseSelectList = [0 => get_lang('Select')]; |
||
104 | if (is_array($exerciseList)) { |
||
105 | foreach ($exerciseList as $row) { |
||
106 | $exerciseTitle = $row['title']; |
||
107 | $exerciseSelectList[$row['iid']] = $exerciseTitle; |
||
108 | } |
||
109 | } |
||
110 | |||
111 | $url = api_get_self().'?'.api_get_cidreq().'&'.http_build_query( |
||
112 | [ |
||
113 | 'session_id' => $sessionId, |
||
114 | 'selected_course' => $courseId, |
||
115 | 'exerciseId' => $exerciseId, |
||
116 | 'course_id_changed' => $courseIdChanged, |
||
117 | 'exercise_id_changed' => $exerciseIdChanged, |
||
118 | ] |
||
119 | ); |
||
120 | |||
121 | // Form |
||
122 | $form = new FormValidator('export_all_results_form', 'GET', $url); |
||
123 | $form->addHeader(get_lang('ExportExerciseAllResults')); |
||
124 | $form |
||
125 | ->addSelect( |
||
126 | 'session_id', |
||
127 | get_lang('Session'), |
||
128 | $sessionSelectList, |
||
129 | ['onchange' => 'submit_form(this)', 'id' => 'session_id'] |
||
130 | ) |
||
131 | ->setSelected($sessionId); |
||
132 | $form |
||
133 | ->addSelect( |
||
134 | 'selected_course', |
||
135 | get_lang('Course'), |
||
136 | $courseSelectList, |
||
137 | ['onchange' => 'mark_course_id_changed(); submit_form(this);', 'id' => 'selected_course'] |
||
138 | ) |
||
139 | ->setSelected($courseId); |
||
140 | $form |
||
141 | ->addSelect( |
||
142 | 'exerciseId', |
||
143 | get_lang('Exercise'), |
||
144 | $exerciseSelectList |
||
145 | ) |
||
146 | ->setSelected($exerciseId); |
||
147 | |||
148 | $form->addDateTimePicker('start_date', get_lang('StartDate')); |
||
149 | $form->addDateTimePicker('end_date', get_lang('EndDate')); |
||
150 | $form->addRule('start_date', get_lang('InvalidDate'), 'datetime'); |
||
151 | $form->addRule('end_date', get_lang('InvalidDate'), 'datetime'); |
||
152 | |||
153 | $form->addRule( |
||
154 | ['start_date', 'end_date'], |
||
155 | get_lang('StartDateShouldBeBeforeEndDate'), |
||
156 | 'date_compare', |
||
157 | 'lte' |
||
158 | ); |
||
159 | |||
160 | $form->addHidden('course_id_changed', '0'); |
||
161 | $form->addHidden('exercise_id_changed', '0'); |
||
162 | $form->addButtonExport(get_lang('Export'), 'name'); |
||
163 | |||
164 | if ($form->validate()) { |
||
165 | $values = $form->getSubmitValues(); |
||
166 | |||
167 | if (!empty($values['exerciseId']) && !empty($values['selected_course'])) { |
||
168 | $sessionId = (int) $values['session_id']; |
||
169 | $courseId = (int) $values['selected_course']; |
||
170 | $exerciseId = (int) $values['exerciseId']; |
||
171 | $filterDates = [ |
||
172 | 'start_date' => (!empty($values['start_date']) ? $values['start_date'] : ''), |
||
173 | 'end_date' => (!empty($values['end_date']) ? $values['end_date'] : ''), |
||
174 | ]; |
||
175 | ExerciseLib::exportExerciseAllResultsZip($sessionId, $courseId, $exerciseId, $filterDates); |
||
176 | } |
||
177 | } |
||
178 | |||
179 | Display::display_header(get_lang('ExportExerciseAllResults')); |
||
180 | |||
181 | echo Display::return_message( |
||
182 | get_lang('PleaseWaitThisCouldTakeAWhile'), |
||
183 | 'normal', |
||
184 | false, |
||
185 | ); |
||
186 | |||
187 | echo $form->display(); |
||
188 | |||
189 | Display::display_footer(); |
||
190 |