ILIAS  release_8 Revision v8.24
class.ilExerciseSubmissionTableGUI.php
Go to the documentation of this file.
1<?php
2
21
29{
30 public const MODE_BY_ASSIGNMENT = 1;
31 public const MODE_BY_USER = 2;
32
35 protected int $mode;
36 protected array $filter;
37 protected array $comment_modals = array();
38 protected ?ilExAssignment $ass = null;
39
40 protected array $cols_mandatory = array("name", "status");
41 protected array $cols_default = array("login", "submission", "idl", "calc_deadline");
42 protected array $cols_order = array("image", "name", "login", "team_members",
43 "sent_time", "submission", "calc_deadline", "idl", "status", "mark", "status_time",
44 "feedback_time", "comment", "notice");
45
48
51
52 public function __construct(
53 object $a_parent_obj,
54 string $a_parent_cmd,
55 ilObjExercise $a_exc,
56 int $a_item_id
57 ) {
58 global $DIC;
59
60 $this->ui_factory = $DIC->ui()->factory();
61 $this->ui_renderer = $DIC->ui()->renderer();
62
63 $this->ctrl = $DIC->ctrl();
64 $this->access = $DIC->access();
65 $this->tpl = $DIC["tpl"];
66 $this->lng = $DIC->language();
67
68 $ilCtrl = $DIC->ctrl();
69
70 $this->exc = $a_exc;
71
72 $this->initMode($a_item_id);
73
74 parent::__construct($a_parent_obj, $a_parent_cmd);
75
76 $this->setShowTemplates(true);
77
78 $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
79 $this->setRowTemplate("tpl.exc_members_row.html", "Modules/Exercise");
80
81 #25100
82 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
83 $this->setDefaultOrderField("name");
84 $this->setDefaultOrderDirection("asc");
85 }
86
87
88 // columns
89
90 $this->addColumn("", "", "1", true);
91
92 $selected = $this->getSelectedColumns();
93 $columns = $this->parseColumns();
94 foreach ($this->cols_order as $id) {
95 if (in_array($id, $this->cols_mandatory) ||
96 in_array($id, $selected)) {
97 if (array_key_exists($id, $columns)) {
98 $col = $columns[$id];
99 $this->addColumn($col[0], $col[1] ?? "");
100 }
101 }
102 }
103
104 $this->addColumn($this->lng->txt("actions"));
105
106
107 // multi actions
108
109 $this->addMultiCommand("saveStatusSelected", $this->lng->txt("exc_save_selected"));
110
111 // TODO get rid of the constant from ilExAssignment. Get this value from ilExAssignmentTypes
112 if ($this->mode == self::MODE_BY_ASSIGNMENT && $this->ass->getType() == ilExAssignment::TYPE_TEXT) {
113 $this->addMultiCommand("compareTextAssignments", $this->lng->txt("exc_compare_submissions"));
114 }
115
116 $this->setFormName("ilExcIDlForm");
117
118 // see 0021530 and parseRow here with similar action per user
119 if ($this->mode == self::MODE_BY_ASSIGNMENT &&
120 $this->ass->hasActiveIDl() &&
121 !$this->ass->hasReadOnlyIDl()) {
122 $this->addMultiCommand("setIndividualDeadline", $this->lng->txt("exc_individual_deadline_action"));
123 }
124
125 if ($this->exc->hasTutorFeedbackMail() &&
126 $this->mode == self::MODE_BY_ASSIGNMENT) {
127 $this->addMultiCommand("redirectFeedbackMail", $this->lng->txt("exc_tbl_action_feedback_mail"));
128 }
129
130 $this->addMultiCommand("sendMembers", $this->lng->txt("exc_send_assignment"));
131
132 if ($this->mode == self::MODE_BY_ASSIGNMENT &&
133 $this->ass &&
134 $this->ass->hasTeam()) {
135 $this->addMultiCommand("createTeams", $this->lng->txt("exc_team_multi_create"));
136 $this->addMultiCommand("dissolveTeams", $this->lng->txt("exc_team_multi_dissolve"));
137 }
138
139 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
140 $this->addMultiCommand("confirmDeassignMembers", $this->lng->txt("exc_deassign_members"));
141 }
142
143 $this->setFilterCommand($this->getParentCmd() . "Apply");
144 $this->setResetCommand($this->getParentCmd() . "Reset");
145
146 $this->initFilter();
147 $this->setData($this->parseData());
148 }
149
150 public function initFilter(): void
151 {
152 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
153 $item = $this->addFilterItemByMetaType("flt_name", self::FILTER_TEXT, false, $this->lng->txt("name") . " / " . $this->lng->txt("login"));
154 $this->filter["name"] = $item->getValue();
155 }
156
157 $this->lng->loadLanguageModule("search");
158 $options = array(
159 "" => $this->lng->txt("search_any"),
160 "notgraded" => $this->lng->txt("exc_notgraded"),
161 "passed" => $this->lng->txt("exc_passed"),
162 "failed" => $this->lng->txt("exc_failed")
163 );
164 $item = $this->addFilterItemByMetaType("flt_status", self::FILTER_SELECT, false, $this->lng->txt("exc_tbl_status"));
165 $item->setOptions($options);
166 $this->filter["status"] = $item->getValue();
167
168 $options = array(
169 "" => $this->lng->txt("search_any"),
170 "y" => $this->lng->txt("exc_tbl_filter_has_submission"),
171 "n" => $this->lng->txt("exc_tbl_filter_has_no_submission")
172 );
173 $item = $this->addFilterItemByMetaType("flt_subm", self::FILTER_SELECT, false, $this->lng->txt("exc_tbl_filter_submission"));
174 $item->setOptions($options);
175 $this->filter["subm"] = $item->getValue();
176 }
177
178 abstract protected function initMode(int $a_item_id): void;
179
180 abstract protected function parseData(): array;
181
182 abstract protected function parseModeColumns(): array;
183
184 public function getSelectableColumns(): array
185 {
186 $cols = array();
187
188 $columns = $this->parseColumns();
189 foreach ($this->cols_order as $id) {
190 if (in_array($id, $this->cols_mandatory)) {
191 continue;
192 }
193
194 if (array_key_exists($id, $columns)) {
195 $col = $columns[$id];
196
197 $cols[$id] = array(
198 "txt" => $col[0],
199 "default" => in_array($id, $this->cols_default)
200 );
201 }
202 }
203 return $cols;
204 }
205
206 protected function parseColumns(): array
207 {
208 $cols = $this->parseModeColumns();
209
210 $cols["submission"] = array($this->lng->txt("exc_tbl_submission_date"), "submission");
211
212 $cols["status"] = array($this->lng->txt("exc_tbl_status"), "status");
213 $cols["mark"] = array($this->lng->txt("exc_tbl_mark"), "mark");
214 $cols["status_time"] = array($this->lng->txt("exc_tbl_status_time"), "status_time");
215
216 $cols["sent_time"] = array($this->lng->txt("exc_tbl_sent_time"), "sent_time");
217
218 if ($this->exc->hasTutorFeedbackText() ||
219 $this->exc->hasTutorFeedbackMail() ||
220 $this->exc->hasTutorFeedbackFile()) {
221 $cols["feedback_time"] = array($this->lng->txt("exc_tbl_feedback_time"), "feedback_time");
222 }
223
224 if ($this->exc->hasTutorFeedbackText()) {
225 $cols["comment"] = array($this->lng->txt("exc_tbl_comment"), "comment");
226 }
227
228 $cols["notice"] = array($this->lng->txt("exc_tbl_notice"), "notice");
229
230 return $cols;
231 }
232
238 protected function parseRow(
239 int $a_user_id,
240 ilExAssignment $a_ass,
241 array $a_row
242 ): void {
243 $ilCtrl = $this->ctrl;
244 $ilAccess = $this->access;
245
246 $has_no_team_yet = ($a_ass->hasTeam() &&
247 !ilExAssignmentTeam::getTeamId($a_ass->getId(), $a_user_id));
248
249
250 // static columns
251
252 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
253 if (!$a_ass->hasTeam()) {
254 $this->tpl->setVariable("VAL_NAME", $a_row["name"]);
255
256 // #18327
257 if (!$ilAccess->checkAccessOfUser($a_user_id, "read", "", $this->exc->getRefId()) &&
258 is_array($info = $ilAccess->getInfo())) {
259 $this->tpl->setCurrentBlock('access_warning');
260 $this->tpl->setVariable('PARENT_ACCESS', $info[0]["text"]);
261 $this->tpl->parseCurrentBlock();
262 }
263 } else {
264 asort($a_row["team"]);
265 foreach ($a_row["team"] as $team_member_id => $team_member_name) { // #10749
266 if (count($a_row["team"]) > 1) {
267 $ilCtrl->setParameterByClass("ilExSubmissionTeamGUI", "id", $team_member_id);
268 $url = $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "confirmRemoveTeamMember");
269 $ilCtrl->setParameterByClass("ilExSubmissionTeamGUI", "id", "");
270
271 $this->tpl->setCurrentBlock("team_member_removal_bl");
272 $this->tpl->setVariable("URL_TEAM_MEMBER_REMOVAL", $url);
273 $this->tpl->setVariable(
274 "TXT_TEAM_MEMBER_REMOVAL",
275 ilGlyphGUI::get(ilGlyphGUI::CLOSE, $this->lng->txt("remove"))
276 );
277 $this->tpl->parseCurrentBlock();
278 }
279
280 // #18327
281 if (!$ilAccess->checkAccessOfUser($team_member_id, "read", "", $this->exc->getRefId()) &&
282 is_array($info = $ilAccess->getInfo())) {
283 $this->tpl->setCurrentBlock('team_access_warning');
284 $this->tpl->setVariable('TEAM_PARENT_ACCESS', $info[0]["text"]);
285 $this->tpl->parseCurrentBlock();
286 }
287
288 $this->tpl->setCurrentBlock("team_member");
289 $this->tpl->setVariable("TXT_MEMBER_NAME", $team_member_name);
290 $this->tpl->parseCurrentBlock();
291 }
292
293 $this->tpl->setCurrentBlock("team_info");
294 if ($has_no_team_yet) {
295 // #11957
296 $this->tpl->setVariable("TXT_TEAM_INFO", $this->lng->txt("exc_no_team_yet"));
297 } else {
298 $this->tpl->setVariable("TXT_TEAM_INFO", "(" . $a_row["submission_obj"]->getTeam()->getId() . ")");
299 }
300 }
301 } else {
302 $this->tpl->setVariable("VAL_NAME", $a_row["name"]);
303 }
304
305 // do not grade or mark if no team yet
306 if (!$has_no_team_yet) {
307 // status
308 $this->tpl->setVariable("SEL_" . strtoupper($a_row["status"] ?? ""), ' selected="selected" ');
309 $this->tpl->setVariable("TXT_NOTGRADED", $this->lng->txt("exc_notgraded"));
310 $this->tpl->setVariable("TXT_PASSED", $this->lng->txt("exc_passed"));
311 $this->tpl->setVariable("TXT_FAILED", $this->lng->txt("exc_failed"));
312 } else {
313 $nt_colspan = in_array("mark", $this->getSelectedColumns())
314 ? 2
315 : 1;
316
317 $this->tpl->setVariable("NO_TEAM_COLSPAN", $nt_colspan);
318 }
319
320
321 // comment modal
322 $comment_id = "excasscomm_" . $a_ass->getId() . "_" . $a_user_id;
323 if ($this->exc->hasTutorFeedbackText()) {
324 $modal = ilModalGUI::getInstance();
325 $modal->setId($comment_id);
326 $modal->setHeading($this->lng->txt("exc_tbl_action_feedback_text"));
327
328 $lcomment_form = new ilPropertyFormGUI();
329 $lcomment_form->setId($comment_id);
330 $lcomment_form->setPreventDoubleSubmission(false);
331
332 $lcomment = new ilTextAreaInputGUI($this->lng->txt("exc_comment_for_learner"), "lcomment_" . $a_ass->getId() . "_" . $a_user_id);
333 $lcomment->setInfo($this->lng->txt("exc_comment_for_learner_info"));
334 $lcomment->setValue((string) ($a_row["comment"] ?? ""));
335 $lcomment->setRows(10);
336 $lcomment_form->addItem($lcomment);
337
338 $lcomment_form->addCommandButton("save", $this->lng->txt("save"));
339 // $lcomment_form->addCommandButton("cancel", $lng->txt("cancel"));
340
341 $modal->setBody($lcomment_form->getHTML());
342
343 $this->comment_modals[] = $modal->getHTML();
344 unset($modal);
345 }
346
347
348 // selectable columns
349
350 foreach ($this->getSelectedColumns() as $col) {
351 $include_seconds = false;
352 switch ($col) {
353 case "image":
354 if (!$a_ass->hasTeam()) {
356 if ($usr_obj = ilObjectFactory::getInstanceByObjId($a_user_id, false)) {
357 $this->tpl->setVariable("VAL_IMAGE", $usr_obj->getPersonalPicturePath("xxsmall"));
358 $this->tpl->setVariable("TXT_IMAGE", $this->lng->txt("personal_picture"));
359 }
360 }
361 break;
362
363 case "team_members":
364 if ($a_ass->hasTeam()) {
365 if (count($a_row["team"]) === 0) {
366 $this->tpl->setVariable("VAL_TEAM_MEMBER", $this->lng->txt("exc_no_team_yet"));
367 } else {
368 foreach ($a_row["team"] as $name) {
369 $this->tpl->setCurrentBlock("team_member_bl");
370 $this->tpl->setVariable("VAL_TEAM_MEMBER", $name);
371 $this->tpl->parseCurrentBlock();
372 }
373 }
374 } else {
375 $this->tpl->setVariable("VAL_TEAM_MEMBER", "&nbsp;");
376 }
377 break;
378
379 case "calc_deadline":
380 case "idl":
381
382 $this->tpl->setVariable(
383 "VAL_" . strtoupper($col),
384 isset($a_row[$col])
386 : "&nbsp;"
387 );
388 break;
389
390 case "mark":
391 if (!$has_no_team_yet) {
392 $this->tpl->setVariable(
393 "VAL_" . strtoupper($col),
394 ilLegacyFormElementsUtil::prepareFormOutput(trim($a_row[$col] ?? ""))
395 );
396 }
397 break;
398
399 case "notice":
400 // see #22076
401 $this->tpl->setVariable(
402 "VAL_" . strtoupper($col),
403 ilLegacyFormElementsUtil::prepareFormOutput(trim($a_row[$col] ?? ""))
404 );
405 break;
406
407 case "comment":
408 // for js-updating
409 $this->tpl->setVariable("LCOMMENT_ID", $comment_id . "_snip");
410
411 // see #22076
412 $this->tpl->setVariable("VAL_" . strtoupper($col), (trim($a_row[$col] ?? "") !== "")
413 ? nl2br(trim($a_row[$col]))
414 : "&nbsp;");
415 break;
416
417 case "feedback_time":
418 case "status_time":
419 case "sent_time":
420 case "submission":
421 if ($col == "submission" && $a_row["submission_obj"]) {
422 $include_seconds = true;
423 foreach ($a_row["submission_obj"]->getFiles() as $file) {
424 if ($file["late"]) {
425 $this->tpl->setVariable("TXT_LATE", $this->lng->txt("exc_late_submission"));
426 break;
427 }
428 }
429 }
430 $this->tpl->setVariable(
431 "VAL_" . strtoupper($col),
432 ($a_row[$col] ?? false)
434 new ilDateTime($a_row[$col], IL_CAL_DATETIME),
435 false,
436 false,
437 $include_seconds
438 )
439 : "&nbsp;"
440 );
441 break;
442
443 case "login":
444 if (!$a_ass->hasTeam()) {
445 $this->tpl->setVariable("VAL_" . strtoupper($col), $a_row[$col]
446 ? trim($a_row[$col])
447 : "&nbsp;");
448 }
449 break;
450
451 default:
452 $this->tpl->setVariable("VAL_" . strtoupper($col), $a_row[$col]
453 ? trim($a_row[$col])
454 : "&nbsp;");
455 break;
456 }
457 }
458
459
460 // actions
461
462 $items = array();
463
464 $file_info = $a_row["submission_obj"]->getDownloadedFilesInfoForTableGUIS();
465
466 $counter = $file_info["files"]["count"];
467 if ($counter) {
468 if (isset($file_info["files"]["download_url"])) {
469 $items[] = $this->ui_factory->button()->shy(
470 $file_info["files"]["download_txt"] . " (" . $counter . ")",
471 $file_info["files"]["download_url"]
472 );
473 }
474
475 if (isset($file_info["files"]["download_new_url"])) {
476 $items[] = $this->ui_factory->button()->shy(
477 $file_info["files"]["download_new_txt"],
478 $file_info["files"]["download_new_url"]
479 );
480 }
481 }
482
483 if ($this->ass_type != null && $this->ass_type->supportsWebDirAccess() && $a_row['submission_obj']->hasSubmittedPrintVersion()) {
484 $url = $ilCtrl->getLinkTarget($this->getParentObject(), "openSubmissionView");
485 $items[] = $this->ui_factory->link()->standard($this->lng->txt("exc_tbl_action_open_submission"), $url)->withOpenInNewViewport(true);
486 if ($a_row['submission_obj']->hasSubmittedPrintVersion()) {
487 $url = $ilCtrl->getLinkTarget($this->getParentObject(), "openSubmissionPrintView");
488 $items[] = $this->ui_factory->link()->standard($this->lng->txt("exc_print_pdf"), $url)->withOpenInNewViewport(true);
489 }
490 }
491
492 if (!$has_no_team_yet &&
493 $a_ass->hasActiveIDl() &&
494 !$a_ass->hasReadOnlyIDl() &&
495 (!is_null($a_row["calc_deadline"] ?? null) || $a_ass->getDeadline())) { // calculated or common deadline given
496 $idl_id = $a_ass->hasTeam()
497 ? "t" . ilExAssignmentTeam::getTeamId($a_ass->getId(), $a_user_id)
498 : $a_user_id;
499
500 $this->tpl->setVariable("VAL_IDL_ID", $a_ass->getId() . "_" . $idl_id);
501
502 $assignment_id = $a_ass->getId();
503 $items[] = $this->ui_factory->button()->shy($this->lng->txt("exc_individual_deadline_action"), "#")
504 ->withOnLoadCode(function ($id) use ($idl_id, $assignment_id) {
505 return "$('#$id').on('click', function() {il.ExcIDl.trigger('$idl_id', '$assignment_id'); return false;})";
506 });
507 }
508
509 // feedback mail
510 if ($this->exc->hasTutorFeedbackMail()) {
511 $items[] = $this->ui_factory->button()->shy(
512 $this->lng->txt("exc_tbl_action_feedback_mail"),
513 $ilCtrl->getLinkTarget($this->parent_obj, "redirectFeedbackMail")
514 );
515 }
516
517 // feedback files
518 if ($a_ass->canParticipantReceiveFeedback($a_user_id)) {
519 if ($this->exc->hasTutorFeedbackFile()) {
520 $storage = new ilFSStorageExercise($this->exc->getId(), $a_ass->getId());
521 $counter = $storage->countFeedbackFiles($a_row["submission_obj"]->getFeedbackId());
522 $counter = $counter
523 ? " (" . $counter . ")"
524 : "";
525
526 $items[] = $this->ui_factory->button()->shy(
527 $this->lng->txt("exc_tbl_action_feedback_file") . $counter,
528 $ilCtrl->getLinkTargetByClass("ilfilesystemgui", "listFiles")
529 );
530 }
531
532 // comment (modal - see above)
533 if ($this->exc->hasTutorFeedbackText()) {
534 $items[] = $this->ui_factory->button()->shy($this->lng->txt("exc_tbl_action_feedback_text"), "#")
535 ->withOnLoadCode(function ($id) use ($comment_id) {
536 return "$('#$id').on('click', function() {il.ExcManagement.showComment('$comment_id'); return false;})";
537 });
538 }
539 }
540
541 // peer review
542 if (($peer_review = $a_row["submission_obj"]->getPeerReview()) && $a_ass->afterDeadlineStrict()) { // see #22246
543 $counter = $peer_review->countGivenFeedback(true, $a_user_id);
544 $counter = $counter
545 ? " (" . $counter . ")"
546 : "";
547 $items[] = $this->ui_factory->button()->shy(
548 $this->lng->txt("exc_tbl_action_peer_review_given") . $counter,
549 $ilCtrl->getLinkTargetByClass("ilexpeerreviewgui", "showGivenPeerReview")
550 );
551
552 $counter = count($peer_review->getPeerReviewsByPeerId($a_user_id, true));
553 $counter = $counter !== 0
554 ? " (" . $counter . ")"
555 : "";
556
557 $items[] = $this->ui_factory->button()->shy(
558 $this->lng->txt("exc_tbl_action_peer_review_received") . $counter,
559 $ilCtrl->getLinkTargetByClass("ilexpeerreviewgui", "showReceivedPeerReview")
560 );
561 }
562
563 // team
564 if ($has_no_team_yet) {
565 $items[] = $this->ui_factory->button()->shy(
566 $this->lng->txt("exc_create_team"),
567 $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "createSingleMemberTeam")
568 );
569 } elseif ($a_ass->hasTeam()) {
570 $items[] = $this->ui_factory->button()->shy(
571 $this->lng->txt("exc_tbl_action_team_log"),
572 $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "showTeamLog")
573 );
574 }
575
576 $actions = $this->ui_factory->dropdown()->standard($items)->withLabel($this->lng->txt("actions"));
577
578 $this->tpl->setVariable("ACTIONS", $this->ui_renderer->render($actions));
579 }
580
581 public function render(): string
582 {
583 global $DIC;
584 $ilCtrl = $this->ctrl;
585 $tpl = $DIC->ui()->mainTemplate();
586
587 $url = $ilCtrl->getLinkTarget($this->getParentObject(), "saveCommentForLearners", "", true, false);
588
589 $tpl->addJavaScript("Modules/Exercise/js/ilExcManagement.js");
590 $tpl->addOnLoadCode('il.ExcManagement.init("' . $url . '");');
591
592 return parent::render() .
593 implode("\n", $this->comment_modals);
594 }
595}
const IL_CAL_UNIX
const IL_CAL_DATETIME
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
@classDescription Date and time handling
static getTeamId(int $a_assignment_id, int $a_user_id, bool $a_create_on_demand=false)
Exercise assignment.
canParticipantReceiveFeedback(int $part_id)
afterDeadlineStrict(bool $a_include_personal=true)
__construct(object $a_parent_obj, string $a_parent_cmd, ilObjExercise $a_exc, int $a_item_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static get(string $a_glyph, string $a_text="")
static prepareFormOutput($a_str, bool $a_strip=false)
static getInstance()
Class ilObjExercise.
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
This class represents a property form user interface.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setFilterCommand(string $a_val, string $a_caption="")
setFormName(string $a_name="")
addMultiCommand(string $a_cmd, string $a_text)
setShowTemplates(bool $a_value)
addFilterItemByMetaType(string $id, int $type=self::FILTER_TEXT, bool $a_optional=false, string $caption="")
Add filter by standard type.
setFormAction(string $a_form_action, bool $a_multipart=false)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
setDefaultOrderField(string $a_defaultorderfield)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setDefaultOrderDirection(string $a_defaultorderdirection)
setResetCommand(string $a_val, string $a_caption="")
setData(array $a_data)
Set table data.
This class represents a text area property in a property form.
global $DIC
Definition: feed.php:28
This is how the factory for UI elements looks.
Definition: Factory.php:38
An entity that renders components to a string output.
Definition: Renderer.php:31
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41
if($format !==null) $name
Definition: metadata.php:247
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$url
$cols
Definition: xhr_table.php:11