ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilTrMatrixTableGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once("./Services/Tracking/classes/class.ilLPTableBaseGUI.php");
5
15{
16 protected $obj_ids = NULL;
17 protected $objective_ids = NULL;
18 protected $sco_ids = NULL;
19 protected $subitem_ids = NULL;
20 protected $in_course; // int
21 protected $in_group; // int
22 protected $privacy_fields; // array
23 protected $privacy_cols = array(); // array
24 protected $has_multi; // bool
25
29 function __construct($a_parent_obj, $a_parent_cmd, $ref_id)
30 {
31 global $ilCtrl, $lng, $tree, $ilUser, $rbacsystem;
32
33 $this->setId("trsmtx_".$ref_id);
34 $this->ref_id = $ref_id;
35 $this->obj_id = ilObject::_lookupObjId($ref_id);
36 $this->type = ilObject::_lookupType($this->obj_id); // #17188
37
38 $this->in_group = $tree->checkForParentType($this->ref_id, "grp");
39 if($this->in_group)
40 {
41 $this->in_group = ilObject::_lookupObjId($this->in_group);
42 }
43 else
44 {
45 $this->in_course = $tree->checkForParentType($this->ref_id, "crs");
46 if($this->in_course)
47 {
48 $this->in_course = ilObject::_lookupObjId($this->in_course);
49 }
50 }
51
52 // has to be before constructor to work
53 $this->initFilter();
54
55 parent::__construct($a_parent_obj, $a_parent_cmd);
56
57 $this->setLimit(9999);
58 $this->parseTitle($this->obj_id, "trac_matrix");
59
60 $this->setEnableHeader(true);
61 $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
62 $this->setRowTemplate("tpl.user_object_matrix_row.html", "Services/Tracking");
63 $this->setDefaultOrderField("login");
64 $this->setDefaultOrderDirection("asc");
65 $this->setShowTemplates(true);
66
67 // see ilObjCourseGUI::addMailToMemberButton()
68 include_once "Services/Mail/classes/class.ilMail.php";
69 $mail = new ilMail($ilUser->getId());
70 if($rbacsystem->checkAccess("internal_mail", $mail->getMailObjectReferenceId()))
71 {
72 $this->addMultiCommand("mailselectedusers", $this->lng->txt("send_mail"));
73 }
74
75 $this->lng->loadLanguageModule('user');
76 $this->addMultiCommand(
77 'addToClipboard',
78 $this->lng->txt('clipboard_add_btn')
79 );
80 $this->addColumn("", "", 1);
81 $this->has_multi = true;
82
83 $this->addColumn($this->lng->txt("login"), "login");
84
85 $labels = $this->getSelectableColumns();
86 $selected = $this->getSelectedColumns();
87 foreach ($selected as $c)
88 {
89 $title = $labels[$c]["txt"];
90
91 if(isset($labels[$c]["no_permission"]) && (bool)$labels[$c]["no_permission"])
92 {
93 $title .= " (".$lng->txt("status_no_permission").")";
94 }
95
96 $tooltip = array();
97 if(isset($labels[$c]["icon"]))
98 {
99 $alt = $lng->txt($labels[$c]["type"]);
100 $icon = '<img src="'.$labels[$c]["icon"].'" alt="'.$alt.'" />';
101 if(sizeof($selected) > 5)
102 {
103 $tooltip[] = $title;
104 $title = $icon;
105 }
106 else
107 {
108 $title = $icon.' '.$title;
109 }
110 if($labels[$c]["path"])
111 {
112 $tooltip[] = $labels[$c]["path"];
113 }
114 }
115
116 if(isset($labels[$c]["id"]))
117 {
118 $sort_id = $labels[$c]["id"];
119 }
120 else
121 {
122 // list cannot be sorted by udf fields (separate query)
123 $sort_id = (substr($c, 0, 4) == "udf_") ? "" : $c;
124 }
125
126 $this->addColumn($title, $sort_id, "", false, "", implode(" - ", $tooltip));
127 }
128
129 $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
130 }
131
132 function initFilter()
133 {
134 global $lng;
135
137 $this->filter["name"] = $item->getValue();
138
139 // #14949 - is called before constructor, so we have to do it ourselves
140 if(isset($_GET[$this->prefix."_tpl"]))
141 {
142 $this->filter["name"] = null;
143 $this->SetFilterValue($item, null);
144 }
145 }
146
148 {
149 global $ilObjDataCache, $rbacsystem;
150
151 $user_cols = $this->getSelectableUserColumns($this->in_course, $this->in_group);
152
153 if($this->obj_ids === NULL)
154 {
155 // we cannot use the selected columns because they are not ready yet
156 // so we use all available columns, should be ok anyways
157 $this->obj_ids = $this->getItems(array_keys($user_cols[0]), $user_cols[1]);
158 }
159 if($this->obj_ids)
160 {
161 $tmp_cols = array();
162 foreach($this->obj_ids as $obj_id)
163 {
164 if($obj_id == $this->obj_id)
165 {
166 $parent = array("txt" => $this->lng->txt("status"),
167 "default" => true);
168 }
169 else
170 {
171 $no_perm = false;
172
173 $ref_id = $this->ref_ids[$obj_id];
174 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
175 if($ref_id &&
176 !ilLearningProgressAccess::checkPermission('read_learning_progress', $ref_id))
177 {
178 $no_perm = true;
179 $this->privacy_cols[] = $obj_id;
180 }
181
182 $title = $ilObjDataCache->lookupTitle($obj_id);
183 $type = $ilObjDataCache->lookupType($obj_id);
184 $icon = ilObject::_getIcon("", "tiny", $type);
185 if($type == "sess")
186 {
187 include_once "Modules/Session/classes/class.ilObjSession.php";
188 $sess = new ilObjSession($obj_id, false);
189 $title = $sess->getPresentationTitle();
190 }
191
192 // #16453
193 $relpath = null;
194 include_once './Services/Tree/classes/class.ilPathGUI.php';
195 $path = new ilPathGUI();
196 $path = $path->getPath($this->ref_id, $ref_id);
197 if($path)
198 {
199 $relpath = $this->lng->txt('path').': '.$path;
200 }
201
202 $tmp_cols[strtolower($title)."#~#obj_".$obj_id] = array(
203 "txt" => $title,
204 "icon" => $icon,
205 "type" => $type,
206 "default" => true,
207 "no_permission" => $no_perm,
208 "path" => $relpath);
209 }
210 }
211 if(sizeof($this->objective_ids))
212 {
213 foreach($this->objective_ids as $obj_id => $title)
214 {
215 $tmp_cols[strtolower($title)."#~#objtv_".$obj_id] = array("txt" => $title, "default" => true);
216 }
217 }
218 if(sizeof($this->sco_ids))
219 {
220 foreach($this->sco_ids as $obj_id => $title)
221 {
222 $icon = ilUtil::getTypeIconPath("sco", $obj_id, "tiny");
223 $tmp_cols[strtolower($title)."#~#objsco_".$obj_id] = array("txt" => $title, "icon"=>$icon, "default" => true);
224 }
225 }
226 if(sizeof($this->subitem_ids))
227 {
228 foreach($this->subitem_ids as $obj_id => $title)
229 {
230 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
231 $icon = ilUtil::getTypeIconPath(ilTrQuery::getSubItemType($this->obj_id), $obj_id, "tiny");
232 $tmp_cols[strtolower($title)."#~#objsub_".$obj_id] = array("txt" => $title, "icon"=>$icon, "default" => true);
233 }
234 }
235
236 // alex, 5 Nov 2011: Do not sort SCORM items or "chapters"
237 if(!sizeof($this->sco_ids) && !sizeof($this->subitem_ids))
238 {
239 ksort($tmp_cols);
240 }
241 foreach($tmp_cols as $id => $def)
242 {
243 $id = explode('#~#', $id);
244 $columns[$id[1]] = $def;
245 }
246 unset($tmp_cols);
247
248 if($parent)
249 {
250 $columns["obj_".$this->obj_id] = $parent;
251 }
252 }
253
254 unset($user_cols[0]["status"]);
255 unset($user_cols[0]["login"]);
256 foreach($user_cols[0] as $col_id => $col_def)
257 {
258 if(!isset($columns[$col_id]))
259 {
260 // these are all additional fields, no default
261 $col_def["default"] = false;
262 $columns[$col_id] = $col_def;
263 }
264 }
265
266 return $columns;
267 }
268
269 function getItems(array $a_user_fields, array $a_privary_fields = null)
270 {
271 // #17081
272 if($this->restore_filter)
273 {
274 $name = $this->restore_filter_values["name"];
275 $this->SetFilterValue($this->filters[0], $name);
276 $this->filter["name"] = $name;
277 }
278
279 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
280 $collection = ilTrQuery::getObjectIds($this->obj_id, $this->ref_id, true);
281 if($collection["object_ids"])
282 {
283 // we need these for the timing warnings
284 $this->ref_ids = $collection["ref_ids"];
285
286 // only if object is [part of] course/group
287 $check_agreement = false;
288 if($this->in_course)
289 {
290 // privacy (if course agreement is activated)
291 include_once "Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
293 if($privacy->courseConfirmationRequired())
294 {
295 $check_agreement = $this->in_course;
296 }
297 }
298 else if($this->in_group)
299 {
300 // privacy (if group agreement is activated)
301 include_once "Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
303 if($privacy->groupConfirmationRequired())
304 {
305 $check_agreement = $this->in_group;
306 }
307 }
308
309 $data = ilTrQuery::getUserObjectMatrix($this->ref_id, $collection["object_ids"], $this->filter["name"], $a_user_fields, $a_privary_fields, $check_agreement);
310 if($collection["objectives_parent_id"] && $data["users"])
311 {
312 // sub-items: learning objectives
313 $objectives = ilTrQuery::getUserObjectiveMatrix($collection["objectives_parent_id"], $data["users"]);
314
315 $this->objective_ids = array();
316
317 foreach($objectives as $user_id => $objectives)
318 {
319 if(isset($data["set"][$user_id]))
320 {
321 foreach($objectives as $objective_id => $status)
322 {
323 $obj_id = "objtv_".$objective_id;
324 $data["set"][$user_id][$obj_id] = $status;
325
326 if(!in_array($obj_id, $this->objective_ids))
327 {
328 $this->objective_ids[$objective_id] = ilCourseObjective::lookupObjectiveTitle($objective_id);
329 }
330 }
331 }
332 }
333 }
334
335 // sub-items: SCOs
336 if($collection["scorm"] && $data["set"])
337 {
338 $this->sco_ids = array();
339 foreach(array_keys($data["set"]) as $user_id)
340 {
341 foreach($collection["scorm"]["scos"] as $sco)
342 {
343 if(!in_array($sco, $this->sco_ids))
344 {
345 $this->sco_ids[$sco] = $collection["scorm"]["scos_title"][$sco];
346 }
347
348 // alex, 5 Nov 2011: we got users being in failed and in
349 // completed status, I changed the setting in: first check failed
350 // then check completed since failed should superseed completed
351 // (before completed has been checked before failed)
353 if(in_array($user_id, $collection["scorm"]["failed"][$sco]))
354 {
356 }
357 else if(in_array($user_id, $collection["scorm"]["completed"][$sco]))
358 {
360 }
361 else if(in_array($user_id, $collection["scorm"]["in_progress"][$sco]))
362 {
364 }
365
366 $obj_id = "objsco_".$sco;
367 $data["set"][$user_id][$obj_id] = $status;
368 }
369 }
370 }
371
372 // sub-items: generic, e.g. lm chapter
373 if($collection["subitems"] && $data["set"])
374 {
375 foreach(array_keys($data["set"]) as $user_id)
376 {
377 foreach($collection["subitems"]["items"] as $item_id)
378 {
379 $this->subitem_ids[$item_id] = $collection["subitems"]["item_titles"][$item_id];
380
382 if(in_array($user_id, $collection["subitems"]["completed"][$item_id]))
383 {
385 }
386 else if(is_array($collection["subitems"]["in_progress"]) &&
387 in_array($user_id, $collection["subitems"]["in_progress"][$item_id]))
388 {
390 }
391
392 $obj_id = "objsub_".$item_id;
393 $data["set"][$user_id][$obj_id] = $status;
394 }
395 }
396 }
397
398 // percentage export
399 if($data["set"])
400 {
401 $this->perc_map = array();
402 foreach($data["set"] as $row_idx => $row)
403 {
404 foreach($row as $column => $value)
405 {
406 if(substr($column, -5) == "_perc")
407 {
408 $obj_id = explode("_", $column);
409 $obj_id = (int)$obj_id[1];
410
411 // #18673
412 if(!$this->isPercentageAvailable($obj_id) ||
413 !(int)$value)
414 {
415 unset($data["set"][$row_idx][$column]);
416 }
417 else
418 {
419 $this->perc_map[$obj_id] = true;
420 }
421 }
422 }
423 }
424 }
425
426 $this->setMaxCount($data["cnt"]);
427 $this->setData($data["set"]);
428
429 return $collection["object_ids"];
430 }
431 return false;
432 }
433
434 function fillRow($a_set)
435 {
436 global $lng;
437
438 if($this->has_multi)
439 {
440 $this->tpl->setVariable("USER_ID", $a_set["usr_id"]);
441 }
442
443 foreach ($this->getSelectedColumns() as $c)
444 {
445 switch($c)
446 {
447 case (substr($c, 0, 4) == "obj_"):
448 $obj_id = substr($c, 4);
449
450 // object without read-lp-permission
451 if(in_array($obj_id, $this->privacy_cols) ||
452 $a_set["privacy_conflict"])
453 {
454 $this->tpl->setCurrentBlock("objects");
455 $this->tpl->setVariable("VAL_STATUS", "&nbsp;");
456 $this->tpl->parseCurrentBlock();
457 continue;
458 }
459
460 $status = isset($a_set[$c])
461 ? (int)$a_set[$c]
463 $percentage = isset($a_set[$c."_perc"])
464 ? (int)$a_set[$c."_perc"]
465 : null;
466
468 {
469 $timing = $this->showTimingsWarning($this->ref_ids[$obj_id], $a_set["usr_id"]);
470 if($timing)
471 {
472 if($timing !== true)
473 {
474 $timing = ": ".ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
475 }
476 else
477 {
478 $timing = "";
479 }
480 $this->tpl->setCurrentBlock('warning_img');
481 $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
482 $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed').$timing);
483 $this->tpl->parseCurrentBlock();
484 }
485 }
486
487 $this->tpl->setCurrentBlock("objects");
488 $this->tpl->setVariable("VAL_STATUS", $this->parseValue("status", $status, ""));
489 $this->tpl->setVariable("VAL_PERCENTAGE", $this->parseValue("percentage", $percentage, ""));
490 $this->tpl->parseCurrentBlock();
491 break;
492
493
494 case (substr($c, 0, 6) == "objtv_"):
495 case (substr($c, 0, 7) == "objsco_"):
496 case (substr($c, 0, 7) == "objsub_"):
497 $status = isset($a_set[$c])
498 ? (int)$a_set[$c]
500
501 $this->tpl->setCurrentBlock("objects");
502 if(!$a_set["privacy_conflict"])
503 {
504 $this->tpl->setVariable("VAL_STATUS", $this->parseValue("status", $status, ""));
505 }
506 else
507 {
508 $this->tpl->setVariable("VAL_STATUS", "&nbsp;");
509 }
510 $this->tpl->parseCurrentBlock();
511 break;
512
513 default:
514 $this->tpl->setCurrentBlock("user_field");
515 if(!$a_set["privacy_conflict"])
516 {
517 $this->tpl->setVariable("VAL_UF", $this->parseValue($c, $a_set[$c], ""));
518 }
519 else
520 {
521 $this->tpl->setVariable("VAL_UF", "&nbsp;");
522 }
523 $this->tpl->parseCurrentBlock();
524 break;
525 }
526 }
527
528 // #7694
529 if(!$a_set["active"] || $a_set["privacy_conflict"])
530 {
531 $mess = array();
532 if($a_set["privacy_conflict"])
533 {
534 $mess[] = $lng->txt("status_no_permission");
535 }
536 else if(!$a_set["active"])
537 {
538 $mess[] = $lng->txt("inactive");
539 }
540 $this->tpl->setCurrentBlock('inactive_bl');
541 $this->tpl->setVariable('TXT_INACTIVE', implode(", ", $mess));
542 $this->tpl->parseCurrentBlock();
543 }
544
545 $login = !$a_set["privacy_conflict"]
546 ? $a_set["login"]
547 : "&nbsp;";
548 $this->tpl->setVariable("VAL_LOGIN", $login);
549 }
550
551 protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
552 {
553 global $ilObjDataCache;
554
555 $a_excel->setCell($a_row, 0, $this->lng->txt("login"));
556
557 $labels = $this->getSelectableColumns();
558 $cnt = 1;
559 foreach ($this->getSelectedColumns() as $c)
560 {
561 if(substr($c, 0, 4) == "obj_")
562 {
563 $obj_id = substr($c, 4);
564 $type = $ilObjDataCache->lookupType($obj_id);
565 $a_excel->setCell($a_row, $cnt, "(".$this->lng->txt($type).") ".$labels[$c]["txt"]);
566
567 if(is_array($this->perc_map) && $this->perc_map[$obj_id])
568 {
569 $cnt++;
570 $a_excel->setCell($a_row, $cnt, $this->lng->txt("trac_percentage")." (%)");
571 }
572 }
573 else
574 {
575 $a_excel->setCell($a_row, $cnt, $labels[$c]["txt"]);
576 }
577 $cnt++;
578 }
579
580 $a_excel->setBold("A".$a_row.":".$a_excel->getColumnCoord($cnt).$a_row);
581 }
582
583 protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
584 {
585 $a_excel->setCell($a_row, 0, $a_set["login"]);
586
587 $cnt = 1;
588 foreach ($this->getSelectedColumns() as $c)
589 {
590 switch($c)
591 {
592 case (substr($c, 0, 4) == "obj_"):
593 $obj_id = substr($c, 4);
594 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
595 $a_excel->setCell($a_row, $cnt, $val);
596
597 if(is_array($this->perc_map) && $this->perc_map[$obj_id])
598 {
599 $cnt++;
600 $perc = (int)$a_set[$c."_perc"];
601 $perc = !$perc
602 ? null
603 : $perc."%";
604 $a_excel->setCell($a_row, $cnt, $perc);
605 }
606 break;
607
608 case (substr($c, 0, 6) == "objtv_"):
609 case (substr($c, 0, 7) == "objsco_"):
610 case (substr($c, 0, 7) == "objsub_"):
611 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
612 $a_excel->setCell($a_row, $cnt, $val);
613 break;
614
615 /* #14142
616 case "last_access":
617 case "spent_seconds":
618 case "status_changed":
619 */
620 default:
621 $val = $this->parseValue($c, $a_set[$c], "user");
622 $a_excel->setCell($a_row, $cnt, $val);
623 break;
624
625 }
626 $cnt++;
627 }
628 }
629
630 protected function fillHeaderCSV($a_csv)
631 {
632 global $ilObjDataCache;
633
634 $a_csv->addColumn($this->lng->txt("login"));
635
636 $labels = $this->getSelectableColumns();
637 foreach ($this->getSelectedColumns() as $c)
638 {
639 if(substr($c, 0, 4) == "obj_")
640 {
641 $obj_id = substr($c, 4);
642 $type = $ilObjDataCache->lookupType($obj_id);
643 $a_csv->addColumn("(".$this->lng->txt($type).") ".$labels[$c]["txt"]);
644
645 if(is_array($this->perc_map) && $this->perc_map[$obj_id])
646 {
647 $a_csv->addColumn($this->lng->txt("trac_percentage")." (%)");
648 }
649 }
650 else
651 {
652 $a_csv->addColumn($labels[$c]["txt"]);
653 }
654 }
655
656 $a_csv->addRow();
657 }
658
659 protected function fillRowCSV($a_csv, $a_set)
660 {
661 $a_csv->addColumn($a_set["login"]);
662
663 foreach ($this->getSelectedColumns() as $c)
664 {
665 switch($c)
666 {
667 case (substr($c, 0, 4) == "obj_"):
668 $obj_id = substr($c, 4);
669 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
670 $a_csv->addColumn($val);
671
672 if(is_array($this->perc_map) && $this->perc_map[$obj_id])
673 {
674 $perc = (int)$a_set[$c."_perc"];
675 if(!$perc)
676 {
677 $perc = null;
678 }
679 $a_csv->addColumn($perc);
680 }
681 break;
682
683 case (substr($c, 0, 6) == "objtv_"):
684 case (substr($c, 0, 7) == "objsco_"):
685 case (substr($c, 0, 7) == "objsub_"):
686 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
687 $a_csv->addColumn($val);
688 break;
689
690 /* #14142
691 case "last_access":
692 case "spent_seconds":
693 case "status_changed":
694 */
695 default:
696 $val = $this->parseValue($c, $a_set[$c], "user");
697 $a_csv->addColumn($val);
698 break;
699
700 }
701 }
702
703 $a_csv->addRow();
704 }
705}
706
707?>
$column
Definition: 39dropdown.php:62
if(! $in) $columns
Definition: Utf8Test.php:45
$path
Definition: aliased.php:25
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
static lookupObjectiveTitle($a_objective_id, $a_add_description=false)
Class for single dates.
setCell($a_row, $a_col, $a_value)
Set cell value.
setBold($a_coords)
Set cell(s) to bold.
getColumnCoord($a_col)
Get column "name" from number.
const LP_STATUS_COMPLETED_NUM
const LP_STATUS_IN_PROGRESS_NUM
const LP_STATUS_NOT_ATTEMPTED_NUM
const LP_STATUS_FAILED_NUM
TableGUI class for learning progress.
parseValue($id, $value, $type)
showTimingsWarning($a_ref_id, $a_user_id)
getSelectableUserColumns($a_in_course=false, $a_in_group=false)
parseTitle($a_obj_id, $action, $a_user_id=false)
static checkPermission($a_permission, $a_ref_id, $a_user_id=null)
wrapper for rbac access checks
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
This class handles base functions for mail handling.
static _lookupObjId($a_id)
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
static _lookupType($a_id, $a_reference=false)
lookup object type
Creates a path for a start and endnode.
static _getInstance()
Get instance of ilPrivacySettings.
getSelectedColumns()
Get selected columns.
setEnableHeader($a_enableheader)
Set Enable Header.
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
setExportFormats(array $formats)
Set available export formats.
SetFilterValue(ilFormPropertyGUI $a_item, $a_value)
Set current filter value.
setData($a_data)
set table data @access public
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setLimit($a_limit=0, $a_default_limit=0)
set max.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setShowTemplates($a_value)
Toggle templates.
setMaxCount($a_max_count)
set max.
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Excel Version of Fill Row.
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
fillRow($a_set)
Standard Version of Fill Row.
fillHeaderCSV($a_csv)
CSV Version of Fill Header.
__construct($a_parent_obj, $a_parent_cmd, $ref_id)
Constructor.
fillHeaderExcel(ilExcel $a_excel, &$a_row)
Excel Version of Fill Header.
getItems(array $a_user_fields, array $a_privary_fields=null)
getSelectableColumns()
Get selectable columns.
static getUserObjectMatrix($a_parent_ref_id, $a_obj_ids, $a_user_filter=NULL, array $a_additional_fields=null, array $a_privacy_fields=null, $a_check_agreement=null)
Get status matrix for users on objects.
static getUserObjectiveMatrix($a_parent_obj_id, $a_users)
static getObjectIds($a_parent_obj_id, $a_parent_ref_id=false, $use_collection=true, $a_refresh_status=true, $a_user_ids=null)
Get (sub)objects for given object, also handles learning objectives (course only)
static getSubItemType($a_parent_obj_id)
Get sub-item object type for parent.
static getTypeIconPath($a_type, $a_obj_id, $a_size='small')
Get type icon path path Return image path for icon_xxx.pngs Or (if enabled) path to custom icon Depre...
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:17
$ref_id
Definition: sahs_server.php:39
$ilUser
Definition: imgupload.php:18