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 
4 include_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 
136  $item = $this->addFilterItemByMetaType("name", ilTable2GUI::FILTER_TEXT);
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";
292  $privacy = ilPrivacySettings::_getInstance();
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";
302  $privacy = ilPrivacySettings::_getInstance();
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 ?>
const LP_STATUS_COMPLETED_NUM
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Creates a path for a start and endnode.
getSelectableUserColumns($a_in_course=false, $a_in_group=false)
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
$path
Definition: aliased.php:25
static lookupObjectiveTitle($a_objective_id, $a_add_description=false)
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setExportFormats(array $formats)
Set available export formats.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
fillHeaderExcel(ilExcel $a_excel, &$a_row)
$_GET["client_id"]
setShowTemplates($a_value)
Toggle templates.
__construct($a_parent_obj, $a_parent_cmd, $ref_id)
Constructor.
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
static getSubItemType($a_parent_obj_id)
Get sub-item object type for parent.
const LP_STATUS_IN_PROGRESS_NUM
parseTitle($a_obj_id, $action, $a_user_id=false)
const IL_CAL_UNIX
parseValue($id, $value, $type)
static checkPermission($a_permission, $a_ref_id, $a_user_id=null)
wrapper for rbac access checks
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...
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
getItems(array $a_user_fields, array $a_privary_fields=null)
$column
Definition: 39dropdown.php:62
Class for single dates.
getColumnCoord($a_col)
Get column "name" from number.
TableGUI class for learning progress.
setBold($a_coords)
Set cell(s) to bold.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
This class handles base functions for mail handling.
static _lookupObjId($a_id)
addMultiCommand($a_cmd, $a_text)
Add Command button.
$ilUser
Definition: imgupload.php:18
getSelectedColumns()
Get selected columns.
SetFilterValue(ilFormPropertyGUI $a_item, $a_value)
Set current filter value.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
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 getUserObjectiveMatrix($a_parent_obj_id, $a_users)
setCell($a_row, $a_col, $a_value)
Set cell value.
const LP_STATUS_NOT_ATTEMPTED_NUM
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
$ref_id
Definition: sahs_server.php:39
global $lng
Definition: privfeed.php:17
showTimingsWarning($a_ref_id, $a_user_id)
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.
setEnableHeader($a_enableheader)
Set Enable Header.
static _getInstance()
Get instance of ilPrivacySettings.
setMaxCount($a_max_count)
set max.
if(! $in) $columns
Definition: Utf8Test.php:45
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.
setLimit($a_limit=0, $a_default_limit=0)
const LP_STATUS_FAILED_NUM