Issues (2029)

main/admin/export_exercise_results.php (1 issue)

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
$item is overwriting a variable from outer foreach loop.
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] = '>&nbsp;&nbsp;&nbsp;&nbsp;';
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