ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilExerciseSubmissionTableGUI.php
Go to the documentation of this file.
1<?php
2
21
23{
24 public const MODE_BY_ASSIGNMENT = 1;
25 public const MODE_BY_USER = 2;
26 protected \ILIAS\Exercise\InternalDomainService $domain;
27 protected \ILIAS\Exercise\Assignment\DomainService $ass_domain;
29
32 protected int $mode;
33 protected array $filter;
34 protected array $comment_modals = array();
35 protected ?ilExAssignment $ass = null;
36
37 protected array $cols_mandatory = array("name", "status");
38 protected array $cols_default = array("login", "submission", "idl", "calc_deadline");
39 protected array $cols_order = array("image", "name", "login", "team_members",
40 "sent_time", "submission", "calc_deadline", "idl", "status", "mark", "status_time",
41 "feedback_time", "comment", "notice");
42
45
48
49 public function __construct(
50 object $a_parent_obj,
51 string $a_parent_cmd,
52 ilObjExercise $a_exc,
53 int $a_item_id,
55 ) {
56 global $DIC;
57
58 $this->ui_factory = $DIC->ui()->factory();
59 $this->ui_renderer = $DIC->ui()->renderer();
60
61 $this->ctrl = $DIC->ctrl();
62 $this->access = $DIC->access();
63 $this->tpl = $DIC["tpl"];
64 $this->lng = $DIC->language();
65
66 $ilCtrl = $DIC->ctrl();
67
68 $this->exc = $a_exc;
69 $this->feedback_gui = $feedback_gui;
70
71 $this->initMode($a_item_id);
72
73 parent::__construct($a_parent_obj, $a_parent_cmd);
74
75 $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
76 $this->setRowTemplate("tpl.exc_members_row.html", "components/ILIAS/Exercise");
77
78 #25100
79 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
80 $this->setDefaultOrderField("name");
81 $this->setDefaultOrderDirection("asc");
82 }
83
84
85 // columns
86
87 $this->addColumn("", "", "1", true);
88
89 $selected = $this->getSelectedColumns();
90 $columns = $this->parseColumns();
91 foreach ($this->cols_order as $id) {
92 if (in_array($id, $this->cols_mandatory) ||
93 in_array($id, $selected)) {
94 if (array_key_exists($id, $columns)) {
95 $col = $columns[$id];
96 $this->addColumn($col[0], $col[1] ?? "");
97 }
98 }
99 }
100
101 $this->addColumn($this->lng->txt("actions"));
102
103
104 // multi actions
105
106 $this->addMultiCommand("saveStatusSelected", $this->lng->txt("exc_save_selected"));
107
108 // TODO get rid of the constant from ilExAssignment. Get this value from ilExAssignmentTypes
109 if ($this->mode == self::MODE_BY_ASSIGNMENT && $this->ass->getType() == ilExAssignment::TYPE_TEXT) {
110 $this->addMultiCommand("compareTextAssignments", $this->lng->txt("exc_compare_submissions"));
111 }
112
113 $this->setFormName("ilExcIDlForm");
114
115 // see 0021530 and parseRow here with similar action per user
116 if ($this->mode == self::MODE_BY_ASSIGNMENT &&
117 $this->ass->hasActiveIDl() &&
118 !$this->ass->hasReadOnlyIDl()) {
119 $this->addMultiCommand("setIndividualDeadline", $this->lng->txt("exc_individual_deadline_action"));
120 }
121
122 if ($this->exc->hasTutorFeedbackMail() &&
123 $this->mode == self::MODE_BY_ASSIGNMENT) {
124 $this->addMultiCommand("redirectFeedbackMail", $this->lng->txt("exc_tbl_action_feedback_mail"));
125 }
126
127 $this->addMultiCommand("sendMembers", $this->lng->txt("exc_send_assignment"));
128
129 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
130 $this->addMultiCommand("sendGradingNotification", $this->lng->txt("exc_send_grading_notification"));
131 }
132
133 if ($this->mode == self::MODE_BY_ASSIGNMENT &&
134 $this->ass &&
135 $this->ass->hasTeam()) {
136 $this->addMultiCommand("createTeams", $this->lng->txt("exc_team_multi_create"));
137 $this->addMultiCommand("dissolveTeams", $this->lng->txt("exc_team_multi_dissolve"));
138 }
139
140 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
141 $this->addMultiCommand("confirmDeassignMembers", $this->lng->txt("exc_deassign_members"));
142 }
143
144 $this->setFilterCommand($this->getParentCmd() . "Apply");
145 $this->setResetCommand($this->getParentCmd() . "Reset");
146
147 $this->initFilter();
148 $this->setData($this->parseData());
149 $this->ass_domain = $DIC->exercise()->internal()->domain()->assignment();
150 $this->domain = $DIC->exercise()->internal()->domain();
151 }
152
153 public function initFilter(): void
154 {
155 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
156 $item = $this->addFilterItemByMetaType("flt_name", self::FILTER_TEXT, false, $this->lng->txt("name") . " / " . $this->lng->txt("login"));
157 $this->filter["name"] = $item->getValue();
158 }
159
160 $this->lng->loadLanguageModule("search");
161 $options = array(
162 "" => $this->lng->txt("search_any"),
163 "notgraded" => $this->lng->txt("exc_notgraded"),
164 "passed" => $this->lng->txt("exc_passed"),
165 "failed" => $this->lng->txt("exc_failed")
166 );
167 $item = $this->addFilterItemByMetaType("flt_status", self::FILTER_SELECT, false, $this->lng->txt("exc_tbl_status"));
168 $item->setOptions($options);
169 $this->filter["status"] = $item->getValue();
170
171 $options = array(
172 "" => $this->lng->txt("search_any"),
173 "y" => $this->lng->txt("exc_tbl_filter_has_submission"),
174 "n" => $this->lng->txt("exc_tbl_filter_has_no_submission")
175 );
176 $item = $this->addFilterItemByMetaType("flt_subm", self::FILTER_SELECT, false, $this->lng->txt("exc_tbl_filter_submission"));
177 $item->setOptions($options);
178 $this->filter["subm"] = $item->getValue();
179
180 $item = $this->addFilterItemByMetaType("flt_subm_after", self::FILTER_DATE, false, $this->lng->txt("exc_tbl_filter_submission_after"));
181 $this->filter["subm_after"] = $item->getDate();
182
183 $item = $this->addFilterItemByMetaType("flt_subm_before", self::FILTER_DATE, false, $this->lng->txt("exc_tbl_filter_submission_before"));
184 $this->filter["subm_before"] = $item->getDate();
185
186 if ($this->mode == self::MODE_BY_ASSIGNMENT && !$this->ass->hasTeam()) {
187 $this->initCourseGroupFilter();
188 }
189 }
190
191 protected function initCourseGroupFilter(): void
192 {
194 $this->lng->txt('exc_member_of_crs_grp'),
195 'effective_from',
196 false,
197 ($this->isForwardingToFormDispatcher()) ? $this : null
198 );
199 $repo->getExplorerGUI()->setSelectableTypes(["crs", "grp"]);
200 $repo->getExplorerGUI()->setTypeWhiteList(["root", "cat", "crs", "grp"]);
201 $this->addFilterItem($repo);
202 $repo->readFromSession();
203 $this->filter['member_of'] = (int) $repo->getValue();
204 }
205
206 protected function isForwardingToFormDispatcher(): bool
207 {
208 return false;
209 }
210
211
212
213 abstract protected function initMode(int $a_item_id): void;
214
215 abstract protected function parseData(): array;
216
217 abstract protected function parseModeColumns(): array;
218
219 public function getSelectableColumns(): array
220 {
221 $cols = array();
222
223 $columns = $this->parseColumns();
224 foreach ($this->cols_order as $id) {
225 if (in_array($id, $this->cols_mandatory)) {
226 continue;
227 }
228
229 if (array_key_exists($id, $columns)) {
230 $col = $columns[$id];
231
232 $cols[$id] = array(
233 "txt" => $col[0],
234 "default" => in_array($id, $this->cols_default)
235 );
236 }
237 }
238 return $cols;
239 }
240
241 protected function parseColumns(): array
242 {
243 $cols = $this->parseModeColumns();
244
245 $cols["submission"] = array($this->lng->txt("exc_tbl_submission_date"), "submission");
246
247 $cols["status"] = array($this->lng->txt("exc_tbl_status"), "status");
248 $cols["mark"] = array($this->lng->txt("exc_tbl_mark"), "mark");
249 $cols["status_time"] = array($this->lng->txt("exc_tbl_status_time"), "status_time");
250
251 $cols["sent_time"] = array($this->lng->txt("exc_tbl_sent_time"), "sent_time");
252
253 if ($this->exc->hasTutorFeedbackText() ||
254 $this->exc->hasTutorFeedbackMail() ||
255 $this->exc->hasTutorFeedbackFile()) {
256 $cols["feedback_time"] = array($this->lng->txt("exc_tbl_feedback_time"), "feedback_time");
257 }
258
259 if ($this->exc->hasTutorFeedbackText()) {
260 $cols["comment"] = array($this->lng->txt("exc_tbl_comment"), "comment");
261 }
262
263 $cols["notice"] = array($this->lng->txt("exc_tbl_notice"), "notice");
264
265 return $cols;
266 }
267
273 protected function parseRow(
274 int $a_user_id,
275 ilExAssignment $a_ass,
276 array $a_row
277 ): void {
278 $ilCtrl = $this->ctrl;
279 $ilAccess = $this->access;
280
281 $has_no_team_yet = ($a_ass->hasTeam() &&
282 !ilExAssignmentTeam::getTeamId($a_ass->getId(), $a_user_id));
283
284
285 // static columns
286
287 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
288 if (!$a_ass->hasTeam()) {
289 $this->tpl->setVariable("VAL_NAME", $a_row["name"]);
290
291 // #18327
292 if (!$ilAccess->checkAccessOfUser($a_user_id, "read", "", $this->exc->getRefId()) &&
293 is_array($info = $ilAccess->getInfo())) {
294 $this->tpl->setCurrentBlock('access_warning');
295 $this->tpl->setVariable('PARENT_ACCESS', $info[0]["text"]);
296 $this->tpl->parseCurrentBlock();
297 }
298 } else {
299 asort($a_row["team"]);
300 foreach ($a_row["team"] as $team_member_id => $team_member_name) { // #10749
301 if (count($a_row["team"]) > 1) {
302 $ilCtrl->setParameterByClass("ilExSubmissionTeamGUI", "id", $team_member_id);
303 $url = $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "confirmRemoveTeamMember");
304 $ilCtrl->setParameterByClass("ilExSubmissionTeamGUI", "id", "");
305
306 $this->tpl->setCurrentBlock("team_member_removal_bl");
307 $this->tpl->setVariable("URL_TEAM_MEMBER_REMOVAL", $url);
308
309 $rem_gl = $this->ui_factory->symbol()->glyph()->remove($url);
310 $this->tpl->setVariable(
311 "TXT_TEAM_MEMBER_REMOVAL",
312 $this->ui_renderer->render($rem_gl)
313 );
314
315 $this->tpl->parseCurrentBlock();
316 }
317
318 // #18327
319 if (!$ilAccess->checkAccessOfUser($team_member_id, "read", "", $this->exc->getRefId()) &&
320 is_array($info = $ilAccess->getInfo())) {
321 $this->tpl->setCurrentBlock('team_access_warning');
322 $this->tpl->setVariable('TEAM_PARENT_ACCESS', $info[0]["text"]);
323 $this->tpl->parseCurrentBlock();
324 }
325
326 $this->tpl->setCurrentBlock("team_member");
327 $this->tpl->setVariable("TXT_MEMBER_NAME", $team_member_name);
328 $this->tpl->parseCurrentBlock();
329 }
330
331 $this->tpl->setCurrentBlock("team_info");
332 if ($has_no_team_yet) {
333 // #11957
334 $this->tpl->setVariable("TXT_TEAM_INFO", $this->lng->txt("exc_no_team_yet"));
335 } else {
336 $this->tpl->setVariable("TXT_TEAM_INFO", "(" . $a_row["submission_obj"]->getTeam()->getId() . ")");
337 }
338 }
339 } else {
340 $this->tpl->setVariable("VAL_NAME", $a_row["name"]);
341 }
342
343 // do not grade or mark if no team yet
344 if (!$has_no_team_yet) {
345 // status
346 $this->tpl->setVariable("SEL_" . strtoupper($a_row["status"] ?? ""), ' selected="selected" ');
347 $this->tpl->setVariable("TXT_NOTGRADED", $this->lng->txt("exc_notgraded"));
348 $this->tpl->setVariable("TXT_PASSED", $this->lng->txt("exc_passed"));
349 $this->tpl->setVariable("TXT_FAILED", $this->lng->txt("exc_failed"));
350 } else {
351 $nt_colspan = in_array("mark", $this->getSelectedColumns())
352 ? 2
353 : 1;
354
355 $this->tpl->setVariable("NO_TEAM_COLSPAN", $nt_colspan);
356 }
357
358 // selectable columns
359
360 foreach ($this->getSelectedColumns() as $col) {
361 $include_seconds = false;
362 switch ($col) {
363 case "image":
364 if (!$a_ass->hasTeam()) {
366 if ($usr_obj = ilObjectFactory::getInstanceByObjId($a_user_id, false)) {
367 $this->tpl->setVariable("VAL_IMAGE", $usr_obj->getPersonalPicturePath("xxsmall"));
368 $this->tpl->setVariable("TXT_IMAGE", $this->lng->txt("personal_picture"));
369 }
370 }
371 break;
372
373 case "team_members":
374 if ($a_ass->hasTeam()) {
375 if (count($a_row["team"]) === 0) {
376 $this->tpl->setVariable("VAL_TEAM_MEMBER", $this->lng->txt("exc_no_team_yet"));
377 } else {
378 foreach ($a_row["team"] as $name) {
379 $this->tpl->setCurrentBlock("team_member_bl");
380 $this->tpl->setVariable("VAL_TEAM_MEMBER", $name);
381 $this->tpl->parseCurrentBlock();
382 }
383 }
384 } else {
385 $this->tpl->setVariable("VAL_TEAM_MEMBER", "&nbsp;");
386 }
387 break;
388
389 case "calc_deadline":
390 case "idl":
391
392 if ($a_ass->getDeadlineMode() === ilExAssignment::DEADLINE_ABSOLUTE_INDIVIDUAL && ($a_row[$col] ?? 0) == 0) {
393 if ($a_row["requested_idl"] ?? false) {
394 $this->tpl->setVariable(
395 "VAL_" . strtoupper($col),
396 $this->lng->txt("exc_deadline_requested")
397 );
398 } else {
399 $this->tpl->setVariable(
400 "VAL_" . strtoupper($col),
401 "&nbsp;"
402 );
403 }
404 } else {
405 $this->tpl->setVariable(
406 "VAL_" . strtoupper($col),
407 isset($a_row[$col])
409 : "&nbsp;"
410 );
411 }
412 break;
413
414 case "mark":
415 if (!$has_no_team_yet) {
416 $this->tpl->setVariable(
417 "VAL_" . strtoupper($col),
419 trim((string) ($a_row[$col] ?? ""))
420 )
421 );
422 }
423 break;
424
425 case "notice":
426 // see #22076
427 $this->tpl->setVariable(
428 "VAL_" . strtoupper($col),
429 ilLegacyFormElementsUtil::prepareFormOutput(trim((string) ($a_row[$col] ?? "")))
430 );
431 break;
432
433 case "comment":
434 // for js-updating
435 $comment_id = "excasscomm_" . $a_ass->getId() . "_" . $a_user_id;
436 $this->tpl->setVariable("LCOMMENT_ID", $comment_id . "_snip");
437
438 // see #22076
439 $this->tpl->setVariable("VAL_" . strtoupper($col), (trim((string) ($a_row[$col] ?? "")) !== "")
440 ? nl2br(trim((string) $a_row[$col]))
441 : "&nbsp;");
442 break;
443
444 case "feedback_time":
445 case "status_time":
446 case "sent_time":
447 case "submission":
448 if ($col == "submission" && $a_row["submission_obj"]) {
449 $include_seconds = true;
450 $sm = $this->domain->submission($a_row["submission_obj"]->getAssignment()->getId());
451 foreach ($sm->getSubmissionsOfUser($a_row["submission_obj"]->getUserId()) as $sub) {
452 if ($sub->getLate()) {
453 $this->tpl->setVariable("TXT_LATE", $this->lng->txt("exc_late_submission"));
454 break;
455 }
456 }
457 }
458 $this->tpl->setVariable(
459 "VAL_" . strtoupper($col),
460 ($a_row[$col] ?? false)
462 new ilDateTime($a_row[$col], IL_CAL_DATETIME),
463 false,
464 false,
465 $include_seconds
466 )
467 : "&nbsp;"
468 );
469 break;
470
471 case "login":
472 if (!$a_ass->hasTeam()) {
473 $this->tpl->setVariable("VAL_" . strtoupper($col), $a_row[$col]
474 ? trim((string) $a_row[$col])
475 : "&nbsp;");
476 }
477 break;
478
479 default:
480 $this->tpl->setVariable("VAL_" . strtoupper($col), $a_row[$col]
481 ? trim((string) $a_row[$col])
482 : "&nbsp;");
483 break;
484 }
485 }
486
487
488 // actions
489
490 $items = array();
491
492 $file_info = $a_row["submission_obj"]->getDownloadedFilesInfoForTableGUIS();
493
494 $counter = $file_info["files"]["count"];
495 if ($counter) {
496 if (isset($file_info["files"]["download_url"])) {
497 $items[] = $this->ui_factory->button()->shy(
498 $file_info["files"]["download_txt"] . " (" . $counter . ")",
499 $file_info["files"]["download_url"]
500 );
501 }
502
503 if (isset($file_info["files"]["download_new_url"])) {
504 $items[] = $this->ui_factory->button()->shy(
505 $file_info["files"]["download_new_txt"],
506 $file_info["files"]["download_new_url"]
507 );
508 }
509 }
510
511 $ass_type = $this->ass_type ?: ilExAssignmentTypes::getInstance()->getById($a_ass->getType());
512
513 if ($ass_type->supportsWebDirAccess() && $a_row['submission_obj']->hasSubmittedPrintVersion()) {
514 $url = $ilCtrl->getLinkTarget($this->getParentObject(), "openSubmissionView");
515 $items[] = $this->ui_factory->link()->standard($this->lng->txt("exc_tbl_action_open_submission"), $url)->withOpenInNewViewport(true);
516 if ($a_row['submission_obj']->hasSubmittedPrintVersion()) {
517 $url = $ilCtrl->getLinkTarget($this->getParentObject(), "openSubmissionPrintView");
518 $items[] = $this->ui_factory->link()->standard($this->lng->txt("exc_print_pdf"), $url)->withOpenInNewViewport(true);
519 }
520 }
521 $ind_deadline_mode = ($a_ass->getDeadlineMode() === ilExAssignment::DEADLINE_ABSOLUTE_INDIVIDUAL);
522 if (!$has_no_team_yet &&
523 $a_ass->hasActiveIDl() &&
524 !$a_ass->hasReadOnlyIDl() &&
525 (!is_null($a_row["calc_deadline"] ?? null) || $a_ass->getDeadline() || $ind_deadline_mode)) { // calculated or common deadline given
526 $idl_id = $a_ass->hasTeam()
527 ? "t" . ilExAssignmentTeam::getTeamId($a_ass->getId(), $a_user_id)
528 : $a_user_id;
529
530 $this->tpl->setVariable("VAL_IDL_ID", $a_ass->getId() . "_" . $idl_id);
531
532 $assignment_id = $a_ass->getId();
533 $items[] = $this->ui_factory->button()->shy($this->lng->txt("exc_individual_deadline_action"), "#")
534 ->withOnLoadCode(function ($id) use ($idl_id, $assignment_id) {
535 return "$('#$id').on('click', function() {il.ExcIDl.trigger('$idl_id', '$assignment_id'); return false;})";
536 });
537 }
538
539 // feedback mail
540 if ($this->exc->hasTutorFeedbackMail()) {
541 $items[] = $this->ui_factory->button()->shy(
542 $this->lng->txt("exc_tbl_action_feedback_mail"),
543 $ilCtrl->getLinkTarget($this->parent_obj, "redirectFeedbackMail")
544 );
545 }
546
547 // feedback files
548 if ($a_ass->canParticipantReceiveFeedback($a_user_id)) {
549 if ($this->exc->hasTutorFeedbackFile()) {
550 $tutor_feedback_manager = $this->ass_domain->tutorFeedbackFile($a_ass->getId());
551 if ($tutor_feedback_manager->hasCollection($a_user_id)) {
552 // IRSS
553 $counter = $tutor_feedback_manager->count($a_user_id);
555 ? " (" . $counter . ")"
556 : "";
557 $items[] = $this->ui_factory->button()->shy(
558 $this->lng->txt("exc_tbl_action_feedback_file") . $counter,
559 $ilCtrl->getLinkTargetByClass(ilResourceCollectionGUI::class, "")
560 );
561 }
562 }
563
564 // comment (modal)
565 if ($this->exc->hasTutorFeedbackText()) {
566 $components = $this->feedback_gui->getComponents($a_ass->getId(), $a_user_id);
567 foreach ($components as $type => $c) {
568 if ($type === "modal") {
569 $this->comment_modals[] = $this->ui_renderer->render($c);
570 } elseif ($type === "button") {
571 $items[] = $c;
572 }
573 }
574 }
575 }
576
577 // peer review
578 if (($peer_review = $a_row["submission_obj"]->getPeerReview()) && $a_ass->afterDeadlineStrict()) { // see #22246
579 $counter = $peer_review->countGivenFeedback(true, $a_user_id);
581 ? " (" . $counter . ")"
582 : "";
583 $items[] = $this->ui_factory->button()->shy(
584 $this->lng->txt("exc_tbl_action_peer_review_given") . $counter,
585 $ilCtrl->getLinkTargetByClass("ilexpeerreviewgui", "showGivenPeerReview")
586 );
587
588 $counter = count($peer_review->getPeerReviewsByPeerId($a_user_id, true));
589 $counter = $counter !== 0
590 ? " (" . $counter . ")"
591 : "";
592
593 $items[] = $this->ui_factory->button()->shy(
594 $this->lng->txt("exc_tbl_action_peer_review_received") . $counter,
595 $ilCtrl->getLinkTargetByClass("ilexpeerreviewgui", "showReceivedPeerReview")
596 );
597 }
598
599 // team
600 if ($has_no_team_yet) {
601 $items[] = $this->ui_factory->button()->shy(
602 $this->lng->txt("exc_create_team"),
603 $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "createSingleMemberTeam")
604 );
605 } elseif ($a_ass->hasTeam()) {
606 $items[] = $this->ui_factory->button()->shy(
607 $this->lng->txt("exc_tbl_action_team_log"),
608 $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "showTeamLog")
609 );
610 }
611
612 $actions = $this->ui_factory->dropdown()->standard($items);
613
614 $this->tpl->setVariable("ACTIONS", $this->ui_renderer->render($actions));
615 }
616
617 public function render(): string
618 {
619 return parent::render() .
620 implode("\n", $this->comment_modals);
621 }
622}
$components
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
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, ?ilObjUser $user=null,)
@classDescription Date and time handling
static getTeamId(int $a_assignment_id, int $a_user_id, bool $a_create_on_demand=false)
Exercise assignment.
getType()
Get type this will most probably become an non public function in the future (or become obsolete)
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, ilExerciseSubmissionFeedbackGUI $feedback_gui)
ilExerciseSubmissionFeedbackGUI $feedback_gui
ILIAS Exercise InternalDomainService $domain
ILIAS Exercise Assignment DomainService $ass_domain
static prepareFormOutput($a_str, bool $a_strip=false)
Class ilObjExercise.
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
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="")
addFilterItem(ilTableFilterItem $a_input_item, bool $a_optional=false)
setFormName(string $a_name="")
addMultiCommand(string $a_cmd, string $a_text)
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.
$c
Definition: deliver.php:25
$info
Definition: entry_point.php:21
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
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
filter(string $filter_id, $class_path, string $cmd, bool $activated=true, bool $expanded=true)
global $DIC
Definition: shib_login.php:26
$url
Definition: shib_logout.php:68
$counter