ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilTestExportGUI.php
Go to the documentation of this file.
1<?php
2
32{
33 public function __construct($a_parent_gui, $a_main_obj = null)
34 {
35 global $DIC;
36 $ilPluginAdmin = $DIC['ilPluginAdmin'];
37
38 parent::__construct($a_parent_gui, $a_main_obj);
39
40 #$this->addFormat('xml', $a_parent_gui->lng->txt('ass_create_export_file'), $this, 'createTestExport');
41 $this->addFormat('xml', $a_parent_gui->lng->txt('ass_create_export_file'));
42 $this->addFormat('xmlres', $a_parent_gui->lng->txt('ass_create_export_file_with_results'), $this, 'createTestExportWithResults');
43 $this->addFormat('csv', $a_parent_gui->lng->txt('ass_create_export_test_results'), $this, 'createTestResultsExport');
44 $this->addFormat('arc', $a_parent_gui->lng->txt('ass_create_export_test_archive'), $this, 'createTestArchiveExport');
45 $pl_names = $ilPluginAdmin->getActivePluginsForSlot(IL_COMP_MODULE, 'Test', 'texp');
46 foreach ($pl_names as $pl) {
51 $plugin->setTest($this->obj);
52 $this->addFormat(
53 $plugin->getFormat(),
54 $plugin->getFormatLabel(),
55 $plugin,
56 'export'
57 );
58 }
59 }
60
62 {
63 require_once 'Modules/Test/classes/tables/class.ilTestExportTableGUI.php';
64 $table = new ilTestExportTableGUI($this, 'listExportFiles', $this->obj);
65 return $table;
66 }
67
71 public function createTestExportWithResults()
72 {
77 global $DIC;
78 $lng = $DIC['lng'];
79 $ilCtrl = $DIC['ilCtrl'];
80
81 require_once 'Modules/Test/classes/class.ilTestExportFactory.php';
82 $expFactory = new ilTestExportFactory($this->obj);
83 $test_exp = $expFactory->getExporter('xml');
84 $test_exp->setResultExportingEnabledForTestExport(true);
85 $test_exp->buildExportFile();
86 ilUtil::sendSuccess($lng->txt('exp_file_created'), true);
87 $ilCtrl->redirectByClass('iltestexportgui');
88 }
89
93 public function createTestResultsExport()
94 {
99 global $DIC;
100 $lng = $DIC['lng'];
101 $ilCtrl = $DIC['ilCtrl'];
102
103 require_once 'Modules/Test/classes/class.ilTestExportFactory.php';
104 $expFactory = new ilTestExportFactory($this->obj);
105 $test_exp = $expFactory->getExporter('results');
106 $test_exp->buildExportFile();
107 ilUtil::sendSuccess($lng->txt('exp_file_created'), true);
108 $ilCtrl->redirectByClass('iltestexportgui');
109 }
110
111 public function createTestArchiveExport()
112 {
113 global $DIC;
114 $ilAccess = $DIC['ilAccess'];
115 $ilCtrl = $DIC['ilCtrl'];
116 $ilDB = $DIC['ilDB'];
117 $lng = $DIC['lng'];
118
119 if ($ilAccess->checkAccess("write", "", $this->obj->ref_id)) {
120 // prepare generation before contents are processed (for mathjax)
122
123 require_once 'Modules/Test/classes/class.ilTestEvaluation.php';
124 $evaluation = new ilTestEvaluation($ilDB, $this->obj->getTestId());
125 $allActivesPasses = $evaluation->getAllActivesPasses();
126
127 $participantData = new ilTestParticipantData($ilDB, $lng);
128 $participantData->setActiveIdsFilter(array_keys($allActivesPasses));
129 $participantData->load($this->obj->getTestId());
130
131 require_once 'Modules/Test/classes/class.ilTestArchiveService.php';
132 $archiveService = new ilTestArchiveService($this->obj);
133 $archiveService->setParticipantData($participantData);
134 $archiveService->archivePassesByActives($allActivesPasses);
135
136 include_once("./Modules/Test/classes/class.ilTestArchiver.php");
137 $test_id = $this->obj->getId();
138 $archive_exp = new ilTestArchiver($test_id);
139
140 require_once './Modules/Test/classes/class.ilTestScoring.php';
141 $scoring = new ilTestScoring($this->obj);
142 $best_solution = $scoring->calculateBestSolutionForTest();
143
144 $tmpFileName = ilUtil::ilTempnam();
145 if (!is_dir($tmpFileName)) {
146 ilUtil::makeDirParents($tmpFileName);
147 }
148
149 $directory_name = realpath($tmpFileName);
150 $file_name = $directory_name . DIRECTORY_SEPARATOR . 'Best_Solution.pdf';
151
152 require_once './Modules/Test/classes/class.ilTestPDFGenerator.php';
153 $generator = new ilTestPDFGenerator();
154 $generator->generatePDF($best_solution, ilTestPDFGenerator::PDF_OUTPUT_FILE, $file_name, PDF_USER_RESULT);
155 $archive_exp->handInTestBestSolution($best_solution, $file_name);
156 ilUtil::delDir($directory_name);
157
158 $archive_exp->updateTestArchive();
159 $archive_exp->compressTestArchive();
160 } else {
161 ilUtil::sendInfo("cannot_export_archive", true);
162 }
163 $ilCtrl->redirectByClass('iltestexportgui');
164 }
165
166 public function listExportFiles()
167 {
168 global $DIC;
169 $tpl = $DIC['tpl'];
170 $ilToolbar = $DIC['ilToolbar'];
171 $ilCtrl = $DIC['ilCtrl'];
172 $lng = $DIC['lng'];
173
174 $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
175
176 if (count($this->getFormats()) > 1) {
177 foreach ($this->getFormats() as $f) {
178 $options[$f["key"]] = $f["txt"];
179 }
180 include_once 'Services/Form/classes/class.ilSelectInputGUI.php';
181 $si = new ilSelectInputGUI($lng->txt("type"), "format");
182 $si->setOptions($options);
183 $ilToolbar->addInputItem($si, true);
184 $ilToolbar->addFormButton($lng->txt("exp_create_file"), "createExportFile");
185 } else {
186 $format = $this->getFormats();
187 $format = $format[0];
188 $ilToolbar->addFormButton($lng->txt("exp_create_file") . " (" . $format["txt"] . ")", "create_" . $format["key"]);
189 }
190
191 require_once 'class.ilTestArchiver.php';
192 $archiver = new ilTestArchiver($this->getParentGUI()->object->getId());
193 $archive_dir = $archiver->getZipExportDirectory();
194 $archive_files = array();
195
196 if (file_exists($archive_dir) && is_dir($archive_dir)) {
197 $archive_files = scandir($archive_dir);
198 }
199
200 $export_dir = $this->obj->getExportDirectory();
201 $export_files = $this->obj->getExportFiles($export_dir);
202 $data = array();
203 if (count($export_files) > 0) {
204 foreach ($export_files as $exp_file) {
205 $file_arr = explode("__", $exp_file);
206 if ($file_arr[0] == $exp_file) {
207 continue;
208 }
209
210 array_push($data, array(
211 'file' => $exp_file,
212 'size' => filesize($export_dir . "/" . $exp_file),
213 'timestamp' => $file_arr[0]
214 ));
215 }
216 }
217
218 if (count($archive_files) > 0) {
219 foreach ($archive_files as $exp_file) {
220 if ($exp_file == '.' || $exp_file == '..') {
221 continue;
222 }
223 $file_arr = explode("_", $exp_file);
224
225 $data[] = [
226 'file' => $exp_file,
227 'size' => filesize($archive_dir . "/" . $exp_file),
228 'timestamp' => $file_arr[4],
229 ];
230 }
231 }
232
233 $table = $this->buildExportTableGUI();
234 $table->setSelectAllCheckbox("file");
235 foreach ($this->getCustomColumns() as $c) {
236 $table->addCustomColumn($c["txt"], $c["obj"], $c["func"]);
237 }
238
239 foreach ($this->getCustomMultiCommands() as $c) {
240 $table->addCustomMultiCommand($c["txt"], "multi_" . $c["func"]);
241 }
242
243 $table->resetFormats();
244 foreach ($this->formats as $format) {
245 $table->addFormat($format['key']);
246 }
247
248 $table->setData($data);
249 $this->tpl->setOnScreenMessage('info', $lng->txt('no_manual_feedback_export_info'), true);
250 $tpl->setContent($table->getHTML());
251 }
252
253 public function download()
254 {
259 global $DIC;
260 $lng = $DIC['lng'];
261 $ilCtrl = $DIC['ilCtrl'];
262
263 if (isset($_GET['file']) && $_GET['file']) {
264 $_POST['file'] = array($_GET['file']);
265 }
266
267 if (!isset($_POST['file'])) {
268 ilUtil::sendInfo($lng->txt('no_checkbox'), true);
269 $ilCtrl->redirect($this, 'listExportFiles');
270 }
271
272 if (count($_POST['file']) > 1) {
273 ilUtil::sendInfo($lng->txt('select_max_one_item'), true);
274 $ilCtrl->redirect($this, 'listExportFiles');
275 }
276
277 require_once 'class.ilTestArchiver.php';
278 $archiver = new ilTestArchiver($this->getParentGUI()->object->getId());
279
280 $filename = basename($_POST["file"][0]);
281 $exportFile = $this->obj->getExportDirectory() . '/' . $filename;
282 $archiveFile = $archiver->getZipExportDirectory() . '/' . $filename;
283
284 if (file_exists($exportFile)) {
285 ilUtil::deliverFile($exportFile, $filename);
286 }
287
288 if (file_exists($archiveFile)) {
289 ilUtil::deliverFile($archiveFile, $filename);
290 }
291
292 $ilCtrl->redirect($this, 'listExportFiles');
293 }
294
298 public function delete()
299 {
304 global $DIC;
305 $lng = $DIC['lng'];
306 $ilCtrl = $DIC['ilCtrl'];
307
308 require_once 'class.ilTestArchiver.php';
309 $archiver = new ilTestArchiver($this->getParentGUI()->object->getId());
310 $archiveDir = $archiver->getZipExportDirectory();
311
312 $export_dir = $this->obj->getExportDirectory();
313 foreach ($_POST['file'] as $file) {
314 $file = basename($file);
315 $dir = substr($file, 0, strlen($file) - 4);
316
317 if (!strlen($file) || !strlen($dir)) {
318 continue;
319 }
320
321 $exp_file = $export_dir . '/' . $file;
322 $arc_file = $archiveDir . '/' . $file;
323 $exp_dir = $export_dir . '/' . $dir;
324 if (@is_file($exp_file)) {
325 unlink($exp_file);
326 }
327 if (@is_file($arc_file)) {
328 unlink($arc_file);
329 }
330 if (@is_dir($exp_dir)) {
331 ilUtil::delDir($exp_dir);
332 }
333 }
334 ilUtil::sendSuccess($lng->txt('msg_deleted_export_files'), true);
335 $ilCtrl->redirect($this, 'listExportFiles');
336 }
337}
$filename
Definition: buildRTE.php:89
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
const IL_COMP_MODULE
Export User Interface Class.
addFormat($a_key, $a_txt="", $a_call_obj=null, $a_call_func="")
Add formats.
getParentGUI()
get parent gui
getCustomColumns()
Get custom columns.
__construct($a_parent_gui, $a_main_obj=null)
Constuctor.
getFormats()
Get formats.
getCustomMultiCommands()
Get custom multi commands.
download()
Download file.
static prepareGenerationRequest($service, $purpose)
Prepare the content processing for a PDF generation request This function should be called as in a re...
static getPluginObject($a_ctype, $a_cname, $a_slot_id, $a_pname)
Get Plugin Object.
This class represents a selection list property in a property form.
Class ilTestArchiver.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
listExportFiles()
List export files.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilTestScoring.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static ilTempnam($a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory.
static deliverFile( $a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$c
Definition: cli.php:37
global $DIC
Definition: goto.php:24
const PDF_USER_RESULT
PDF Purposes.
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41
$format
Definition: metadata.php:218
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$lng
global $ilDB
$data
Definition: storeScorm.php:23