ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.assFileUploadGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once './Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
5require_once './Modules/Test/classes/inc.AssessmentConstants.php';
6require_once './Modules/TestQuestionPool/interfaces/interface.ilGuiQuestionScoringAdjustable.php';
7
23{
24 const REUSE_FILES_TBL_POSTVAR = 'reusefiles';
25 const DELETE_FILES_TBL_POSTVAR = 'deletefiles';
26
35 public function __construct($id = -1)
36 {
37 parent::__construct();
38 include_once "./Modules/TestQuestionPool/classes/class.assFileUpload.php";
39 $this->object = new assFileUpload();
40 $this->setErrorMessage($this->lng->txt("msg_form_save_error"));
41 if ($id >= 0) {
42 $this->object->loadFromDb($id);
43 }
44 }
45
49 protected function writePostData($always = false)
50 {
51 $hasErrors = (!$always) ? $this->editQuestion(true) : false;
52 if (!$hasErrors) {
53 require_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
57 return 0;
58 }
59 return 1;
60 }
61
63 {
64 $this->object->setPoints($_POST["points"]);
65 $this->object->setMaxSize($_POST["maxsize"]);
66 $this->object->setAllowedExtensions($_POST["allowedextensions"]);
67 $this->object->setCompletionBySubmission($_POST['completion_by_submission'] == 1 ? true : false);
68 }
69
75 public function editQuestion($checkonly = false)
76 {
77 $save = $this->isSaveCommand();
78 $this->getQuestionTemplate();
79
80 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
82 $this->editForm = $form;
83
84 $form->setFormAction($this->ctrl->getFormAction($this));
85 $form->setTitle($this->outQuestionType());
86 $form->setMultipart(false);
87 $form->setTableWidth("100%");
88 $form->setId("assfileupload");
89
92
95
96 $errors = false;
97
98 if ($save) {
99 $form->setValuesByPost();
100 $errors = !$form->checkInput();
101 $form->setValuesByPost(); // again, because checkInput now performs the whole stripSlashes handling and
102 // we need this if we don't want to have duplication of backslashes
103 if ($errors) {
104 $checkonly = false;
105 }
106 }
107
108 if (!$checkonly) {
109 $this->tpl->setVariable("QUESTION_DATA", $form->getHTML());
110 }
111 return $errors;
112 }
113
115 {
116 // maxsize
117 $maxsize = new ilNumberInputGUI($this->lng->txt("maxsize"), "maxsize");
118 $maxsize->setValue($this->object->getMaxSize());
119 $maxsize->setInfo($this->lng->txt("maxsize_info"));
120 $maxsize->setSize(10);
121 $maxsize->setMinValue(0);
122 $maxsize->setMaxValue($this->determineMaxFilesize());
123 $maxsize->setRequired(false);
124 $form->addItem($maxsize);
125
126 // allowedextensions
127 $allowedextensions = new ilTextInputGUI($this->lng->txt("allowedextensions"), "allowedextensions");
128 $allowedextensions->setInfo($this->lng->txt("allowedextensions_info"));
129 $allowedextensions->setValue($this->object->getAllowedExtensions());
130 $allowedextensions->setRequired(false);
131 $form->addItem($allowedextensions);
132
133 // points
134 $points = new ilNumberInputGUI($this->lng->txt("points"), "points");
135 $points->allowDecimals(true);
136 $points->setValue(
137 is_numeric($this->object->getPoints()) && $this->object->getPoints(
138 ) >= 0 ? $this->object->getPoints() : ''
139 );
140 $points->setRequired(true);
141 $points->setSize(3);
142 $points->setMinValue(0.0);
143 $points->setMinvalueShouldBeGreater(false);
144 $form->addItem($points);
145
146 $subcompl = new ilCheckboxInputGUI($this->lng->txt(
147 'ass_completion_by_submission'
148 ), 'completion_by_submission');
149 $subcompl->setInfo($this->lng->txt('ass_completion_by_submission_info'));
150 $subcompl->setValue(1);
151 $subcompl->setChecked($this->object->isCompletionBySubmissionEnabled());
152 $form->addItem($subcompl);
153 return $form;
154 }
155
159 public function determineMaxFilesize()
160 {
161 //mbecker: Quick fix for mantis bug 8595: Change size file
162 $upload_max_filesize = get_cfg_var("upload_max_filesize");
163 // get the value for the maximal post data from the php.ini (if available)
164 $post_max_size = get_cfg_var("post_max_size");
165
166 //convert from short-string representation to "real" bytes
167 $multiplier_a = array( "K" => 1024, "M" => 1024 * 1024, "G" => 1024 * 1024 * 1024 );
168 $umf_parts = preg_split(
169 "/(\d+)([K|G|M])/",
170 $upload_max_filesize,
171 -1,
172 PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
173 );
174 $pms_parts = preg_split(
175 "/(\d+)([K|G|M])/",
176 $post_max_size,
177 -1,
178 PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
179 );
180
181 if (count($umf_parts) == 2) {
182 $upload_max_filesize = $umf_parts[0] * $multiplier_a[$umf_parts[1]];
183 }
184
185 if (count($pms_parts) == 2) {
186 $post_max_size = $pms_parts[0] * $multiplier_a[$pms_parts[1]];
187 }
188
189 // use the smaller one as limit
190 $max_filesize = min($upload_max_filesize, $post_max_size);
191
192 if (!$max_filesize) {
193 $max_filesize = max($upload_max_filesize, $post_max_size);
194 return $max_filesize;
195 }
196 return $max_filesize;
197 }
198
212 public function getSolutionOutput(
213 $active_id,
214 $pass = null,
215 $graphicalOutput = false,
216 $result_output = false,
217 $show_question_only = true,
218 $show_feedback = false,
219 $show_correct_solution = false,
220 $show_manual_scoring = false,
221 $show_question_text = true
222 ) {
223 // get the solution of the user for the active pass or from the last pass if allowed
224 $template = new ilTemplate("tpl.il_as_qpl_fileupload_output_solution.html", true, true, "Modules/TestQuestionPool");
225
226 $solutionvalue = "";
227 if (($active_id > 0) && (!$show_correct_solution)) {
228 $solutions =&$this->object->getSolutionValues($active_id, $pass);
229 include_once "./Modules/Test/classes/class.ilObjTest.php";
230 if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) {
231 if (is_null($pass)) {
232 $pass = ilObjTest::_getPass($active_id);
233 }
234 }
235 $solutions =&$this->object->getSolutionValues($active_id, $pass);
236
237 $files = ($show_manual_scoring) ? $this->object->getUploadedFilesForWeb($active_id, $pass) : $this->object->getUploadedFiles($active_id, $pass);
238 include_once "./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php";
239 $table_gui = new assFileUploadFileTableGUI($this->getTargetGuiClass(), 'gotoquestion');
240 $table_gui->setTitle($this->lng->txt('already_delivered_files'), 'icon_file.svg', $this->lng->txt('already_delivered_files'));
241 $table_gui->setData($files);
242 // hey: prevPassSolutions - table refactored
243 #$table_gui->initCommand(
244 #$this->buildFileTableDeleteButtonInstance(), assFileUploadGUI::DELETE_FILES_TBL_POSTVAR
245 #);
246 // hey.
247 $table_gui->setRowTemplate("tpl.il_as_qpl_fileupload_file_view_row.html", "Modules/TestQuestionPool");
248 $table_gui->setSelectAllCheckbox("");
249 // hey: prevPassSolutions - table refactored
250 #$table_gui->clearCommandButtons();
251 #$table_gui->disable('select_all');
252 // hey.
253 $table_gui->disable('numinfo');
254 $template->setCurrentBlock("files");
255 $template->setVariable('FILES', $table_gui->getHTML());
256 $template->parseCurrentBlock();
257 }
258
259 if (strlen($this->object->getAllowedExtensions())) {
260 $template->setCurrentBlock("allowed_extensions");
261 $template->setVariable("TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt("allowedextensions") . ": " . $this->object->getAllowedExtensions()));
262 $template->parseCurrentBlock();
263 }
264 $template->setVariable("CMD_UPLOAD", $this->getQuestionActionCmd());
265 $template->setVariable("TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt('upload')));
266 $template->setVariable("TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt('file_add')));
267 $template->setVariable("TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt('file_notice') . " " . $this->object->getMaxFilesizeAsString()));
268
269 if (($active_id > 0) && (!$show_correct_solution)) {
270 $reached_points = $this->object->getReachedPoints($active_id, $pass);
271 if ($graphicalOutput) {
272 // output of ok/not ok icons for user entered solutions
273 if ($reached_points == $this->object->getMaximumPoints()) {
274 $template->setCurrentBlock("icon_ok");
275 $template->setVariable("ICON_OK", ilUtil::getImagePath("icon_ok.svg"));
276 $template->setVariable("TEXT_OK", $this->lng->txt("answer_is_right"));
277 $template->parseCurrentBlock();
278 } else {
279 $template->setCurrentBlock("icon_ok");
280 if ($reached_points > 0) {
281 $template->setVariable("ICON_NOT_OK", ilUtil::getImagePath("icon_mostly_ok.svg"));
282 $template->setVariable("TEXT_NOT_OK", $this->lng->txt("answer_is_not_correct_but_positive"));
283 } else {
284 $template->setVariable("ICON_NOT_OK", ilUtil::getImagePath("icon_not_ok.svg"));
285 $template->setVariable("TEXT_NOT_OK", $this->lng->txt("answer_is_wrong"));
286 }
287 $template->parseCurrentBlock();
288 }
289 }
290 } else {
291 $reached_points = $this->object->getPoints();
292 }
293
294 if ($result_output) {
295 $resulttext = ($reached_points == 1) ? "(%s " . $this->lng->txt("point") . ")" : "(%s " . $this->lng->txt("points") . ")";
296 $template->setVariable("RESULT_OUTPUT", sprintf($resulttext, $reached_points));
297 }
298 if ($show_question_text==true) {
299 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), true));
300 }
301 $questionoutput = $template->get();
302 $solutiontemplate = new ilTemplate("tpl.il_as_tst_solution_output.html", true, true, "Modules/TestQuestionPool");
303 $feedback = ($show_feedback && !$this->isTestPresentationContext()) ? $this->getAnswerFeedbackOutput($active_id, $pass) : "";
304 if (strlen($feedback)) {
305 $cssClass = (
306 $this->hasCorrectSolution($active_id, $pass) ?
308 );
309
310 $solutiontemplate->setVariable("ILC_FB_CSS_CLASS", $cssClass);
311 $solutiontemplate->setVariable("FEEDBACK", $this->object->prepareTextareaOutput($feedback, true));
312 }
313 $solutiontemplate->setVariable("SOLUTION_OUTPUT", $questionoutput);
314 $solutionoutput = $solutiontemplate->get();
315 if (!$show_question_only) {
316 // get page object output
317 $solutionoutput = $this->getILIASPage($solutionoutput);
318 }
319 return $solutionoutput;
320 }
321
322 public function getPreview($show_question_only = false, $showInlineFeedback = false)
323 {
324 $template = new ilTemplate("tpl.il_as_qpl_fileupload_output.html", true, true, "Modules/TestQuestionPool");
325
326 if (is_object($this->getPreviewSession())) {
327 $files = $this->object->getPreviewFileUploads($this->getPreviewSession());
328 include_once "./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php";
329 $table_gui = new assFileUploadFileTableGUI(null, $this->getQuestionActionCmd(), 'ilAssQuestionPreview');
330 $table_gui->setTitle($this->lng->txt('already_delivered_files'), 'icon_file.svg', $this->lng->txt('already_delivered_files'));
331 $table_gui->setData($files);
332 // hey: prevPassSolutions - support file reuse with table
333 $table_gui->initCommand(
336 );
337 // hey.
338 $template->setCurrentBlock("files");
339 $template->setVariable('FILES', $table_gui->getHTML());
340 $template->parseCurrentBlock();
341 }
342
343 if (strlen($this->object->getAllowedExtensions())) {
344 $template->setCurrentBlock("allowed_extensions");
345 $template->setVariable("TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt("allowedextensions") . ": " . $this->object->getAllowedExtensions()));
346 $template->parseCurrentBlock();
347 }
348 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->question, true));
349 $template->setVariable("CMD_UPLOAD", $this->getQuestionActionCmd());
350 $template->setVariable("TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt('upload')));
351 $template->setVariable("TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt('file_add')));
352 $template->setVariable("TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt('file_notice') . " " . $this->object->getMaxFilesizeAsString()));
353
354 $questionoutput = $template->get();
355 if (!$show_question_only) {
356 // get page object output
357 $questionoutput = $this->getILIASPage($questionoutput);
358 }
359 return $questionoutput;
360 }
361
362 // hey: prevPassSolutions - pass will be always available from now on
363 public function getTestOutput($active_id, $pass, $is_postponed = false, $use_post_solutions = false, $show_feedback = false)
364 // hey.
365 {
366 // generate the question output
367 $template = new ilTemplate("tpl.il_as_qpl_fileupload_output.html", true, true, "Modules/TestQuestionPool");
368
369 if ($active_id) {
370 // hey: prevPassSolutions - obsolete due to central check
371 #$solutions = NULL;
372 #include_once "./Modules/Test/classes/class.ilObjTest.php";
373 #if (!ilObjTest::_getUsePreviousAnswers($active_id, true))
374 #{
375 # if (is_null($pass)) $pass = ilObjTest::_getPass($active_id);
376 #}
377 $files = $this->object->getTestOutputSolutions($active_id, $pass);
378 // hey.
379 include_once "./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php";
380 $table_gui = new assFileUploadFileTableGUI(null, $this->getQuestionActionCmd());
381 $table_gui->setTitle($this->lng->txt('already_delivered_files'), 'icon_file.svg', $this->lng->txt('already_delivered_files'));
382 $table_gui->setData($files);
383 // hey: prevPassSolutions - support file reuse with table
384 $table_gui->initCommand(
387 );
388 // hey.
389 $template->setCurrentBlock("files");
390 $template->setVariable('FILES', $table_gui->getHTML());
391 $template->parseCurrentBlock();
392 }
393
394 if (strlen($this->object->getAllowedExtensions())) {
395 $template->setCurrentBlock("allowed_extensions");
396 $template->setVariable("TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt("allowedextensions") . ": " . $this->object->getAllowedExtensions()));
397 $template->parseCurrentBlock();
398 }
399 $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->question, true));
400 $template->setVariable("CMD_UPLOAD", $this->getQuestionActionCmd());
401 $template->setVariable("TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt('upload')));
402 $template->setVariable("TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt('file_add')));
403 $template->setVariable("TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt('file_notice') . " " . $this->object->getMaxFilesizeAsString()));
404
405 $questionoutput = $template->get();
406 if (!$show_question_only) {
407 // get page object output
408 $questionoutput = $this->getILIASPage($questionoutput);
409 }
410 $questionoutput = $template->get();
411 $pageoutput = $this->outQuestionPage("", $is_postponed, $active_id, $questionoutput);
412 return $pageoutput;
413 }
414
422 public function setQuestionTabs()
423 {
424 global $rbacsystem, $ilTabs;
425
426 $ilTabs->clearTargets();
427
428 $this->ctrl->setParameterByClass("ilAssQuestionPageGUI", "q_id", $_GET["q_id"]);
429 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
430 $q_type = $this->object->getQuestionType();
431
432 if (strlen($q_type)) {
433 $classname = $q_type . "GUI";
434 $this->ctrl->setParameterByClass(strtolower($classname), "sel_question_types", $q_type);
435 $this->ctrl->setParameterByClass(strtolower($classname), "q_id", $_GET["q_id"]);
436 }
437
438 if ($_GET["q_id"]) {
439 if ($rbacsystem->checkAccess('write', $_GET["ref_id"])) {
440 // edit page
441 $ilTabs->addTarget(
442 "edit_page",
443 $this->ctrl->getLinkTargetByClass("ilAssQuestionPageGUI", "edit"),
444 array("edit", "insert", "exec_pg"),
445 "",
446 "",
447 $force_active
448 );
449 }
450
451 $this->addTab_QuestionPreview($ilTabs);
452 }
453
454 $force_active = false;
455 if ($rbacsystem->checkAccess('write', $_GET["ref_id"])) {
456 $url = "";
457 if ($classname) {
458 $url = $this->ctrl->getLinkTargetByClass($classname, "editQuestion");
459 }
460 // edit question properties
461 $ilTabs->addTarget(
462 "edit_question",
463 $url,
464 array("editQuestion", "save", "cancel", "saveEdit"),
465 $classname,
466 ""
467 );
468 }
469
470 // add tab for question feedback within common class assQuestionGUI
471 $this->addTab_QuestionFeedback($ilTabs);
472
473 // add tab for question hint within common class assQuestionGUI
474 $this->addTab_QuestionHints($ilTabs);
475
476 // add tab for question's suggested solution within common class assQuestionGUI
477 $this->addTab_SuggestedSolution($ilTabs, $classname);
478
479 // Assessment of questions sub menu entry
480 if ($_GET["q_id"]) {
481 $ilTabs->addTarget(
482 "statistics",
483 $this->ctrl->getLinkTargetByClass($classname, "assessment"),
484 array("assessment"),
485 $classname,
486 ""
487 );
488 }
489
490 if (($_GET["calling_test"] > 0) || ($_GET["test_ref_id"] > 0)) {
491 $ref_id = $_GET["calling_test"];
492 if (strlen($ref_id) == 0) {
493 $ref_id = $_GET["test_ref_id"];
494 }
495
496 global $___test_express_mode;
497
498 if (!$_GET['test_express_mode'] && !$___test_express_mode) {
499 $ilTabs->setBackTarget($this->lng->txt("backtocallingtest"), "ilias.php?baseClass=ilObjTestGUI&cmd=questions&ref_id=$ref_id");
500 } else {
502 $ilTabs->setBackTarget($this->lng->txt("backtocallingtest"), $link);
503 }
504 } else {
505 $ilTabs->setBackTarget($this->lng->txt("qpl"), $this->ctrl->getLinkTargetByClass("ilobjquestionpoolgui", "questions"));
506 }
507 }
508
509 public function getSpecificFeedbackOutput($active_id, $pass)
510 {
511 $output = "";
512 return $this->object->prepareTextareaOutput($output, true);
513 }
514
525 {
526 return array();
527 }
528
537 public function getAggregatedAnswersView($relevant_answers)
538 {
539 // Empty implementation here since a feasible way to aggregate answer is not known.
540 return ''; //print_r($relevant_answers,true);
541 }
542
543 // hey: prevPassSolutions - shown files needs to be chosen so upload can replace or complete fileset
548 {
549 require_once 'Modules/TestQuestionPool/classes/questions/class.ilAssFileUploadFileTableDeleteButton.php';
551 }
552
557 {
558 require_once 'Modules/TestQuestionPool/classes/questions/class.ilAssFileUploadFileTableReuseButton.php';
560 }
561
566 {
567 if ($this->object->getTestPresentationConfig()->isSolutionInitiallyPrefilled()) {
568 return $this->buildFileTableReuseButtonInstance();
569 }
570
572 }
573
575 {
576 if ($this->object->getTestPresentationConfig()->isSolutionInitiallyPrefilled()) {
578 }
579
581 }
582 // hey.
583
584 // hey: prevPassSolutions - overwrite common prevPassSolution-Checkbox
586 {
587 return $this->lng->txt('use_previous_solution_advice_file_upload');
588 }
589
591 {
592 return '';
593 }
594 // hey.
595
596 public function getFormEncodingType()
597 {
599 }
600}
sprintf('%.4f', $callTime)
$files
Definition: add-vimline.php:18
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
The assFileUploadGUI class encapsulates the GUI representation for file upload questions.
setQuestionTabs()
Sets the ILIAS tabs for this question type.
writePostData($always=false)
{Evaluates a posted edit form and writes the form data in the question object.integer A positive valu...
getSpecificFeedbackOutput($active_id, $pass)
Returns the answer specific feedback for the question.
getAfterParticipationSuppressionQuestionPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
getAggregatedAnswersView($relevant_answers)
Returns an html string containing a question specific representation of the answers so far given in t...
getSolutionOutput( $active_id, $pass=null, $graphicalOutput=false, $result_output=false, $show_question_only=true, $show_feedback=false, $show_correct_solution=false, $show_manual_scoring=false, $show_question_text=true)
Get the question solution output.
editQuestion($checkonly=false)
Creates an output of the edit form for the question.
writeQuestionSpecificPostData(ilPropertyFormGUI $form)
Extracts the question specific values from $_POST and applies them to the data object.
__construct($id=-1)
assFileUploadGUI constructor
getTestOutput($active_id, $pass, $is_postponed=false, $use_post_solutions=false, $show_feedback=false)
getPreview($show_question_only=false, $showInlineFeedback=false)
populateQuestionSpecificFormPart(ilPropertyFormGUI $form)
Adds the question specific forms parts to a question property form gui.
Class for file upload questions.
Basic GUI class for assessment questions.
populateTaxonomyFormSection(ilPropertyFormGUI $form)
setErrorMessage($errormessage)
addTab_QuestionHints(ilTabsGUI $tabs)
adds the hints tab to ilTabsGUI
addQuestionFormCommandButtons($form)
Add the command buttons of a question properties form.
getILIASPage($html="")
Returns the ILIAS Page around a question.
getQuestionTemplate()
get question template
addTab_SuggestedSolution(ilTabsGUI $tabs, $classname)
outQuestionPage($a_temp_var, $a_postponed=false, $active_id="", $html="")
output question page
hasCorrectSolution($activeId, $passIndex)
addTab_QuestionFeedback(ilTabsGUI $tabs)
adds the feedback tab to ilTabsGUI
addBasicQuestionFormProperties($form)
Add basic question form properties: assessment: title, author, description, question,...
addTab_QuestionPreview(ilTabsGUI $tabsGUI)
getAnswerFeedbackOutput($active_id, $pass)
Returns the answer generic feedback depending on the results of the question.
This class represents a checkbox property in a property form.
This class represents a number property in a property form.
static _getUsePreviousAnswers($active_id, $user_active_user_setting=false)
Returns if the previous results should be hidden for a learner.
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
This class represents a property form user interface.
special template class to simplify handling of ITX/PEAR
static getReturnToPageLink($q_id=null)
This class represents a text property in a property form.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
$template
if(!array_key_exists('StateId', $_REQUEST)) $id
if(!is_dir( $entity_dir)) exit("Fatal Error ([A-Za-z0-9]+)\s+" &#(? foreach( $entity_files as $file) $output
Interface ilGuiQuestionScoringAdjustable.
$errors
Definition: index.php:6
$url
if(isset($_POST['submit'])) $form
echo;exit;}function LogoutNotification($SessionID){ global $ilDB;$q="SELECT session_id, data FROM usr_session WHERE expires > (\w+)\|/" PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE