ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilTrUserObjectsPropsTableGUI.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 
16 {
20  function __construct($a_parent_obj, $a_parent_cmd, $a_user_id, $a_obj_id, $a_ref_id, $a_print_view = false)
21  {
22  global $ilCtrl, $lng, $ilAccess, $lng, $rbacsystem;
23 
24  $this->setId("truop");
25  $this->user_id = $a_user_id;
26  $this->obj_id = $a_obj_id;
27  $this->ref_id = $a_ref_id;
28 
29  parent::__construct($a_parent_obj, $a_parent_cmd);
30  $this->setLimit(9999);
31 
32  $this->parseTitle($this->obj_id, "details", $this->user_id);
33 
34  if($a_print_view)
35  {
36  $this->setPrintMode(true);
37  }
38 
39  $this->addColumn($this->lng->txt("title"), "title");
40 
41  foreach ($this->getSelectedColumns() as $c)
42  {
43  $l = $c;
44  if (in_array($l, array("last_access", "first_access", "read_count", "spent_seconds", "mark", "status", "percentage")))
45  {
46  $l = "trac_".$l;
47  }
48  if ($l == "u_comment")
49  {
50  $l = "trac_comment";
51  }
52  $this->addColumn($this->lng->txt($l), $c);
53  }
54 
55  if(!$this->getPrintMode())
56  {
57  $this->addColumn($this->lng->txt("actions"), "");
58  }
59 
60  $this->setExternalSorting(true);
61  $this->setExternalSegmentation(true);
62  $this->setEnableHeader(true);
63  $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
64  $this->setRowTemplate("tpl.user_objects_props_row.html", "Services/Tracking");
65  $this->setEnableTitle(true);
66  $this->setDefaultOrderField("title");
67  $this->setDefaultOrderDirection("asc");
68  $this->setShowTemplates(true);
69 
70  $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
71 
72  $this->initFilter();
73 
74  $this->getItems();
75  }
76 
84  {
85  global $lng;
86 
87  // default fields
88  $cols = array();
89 
90  include_once 'Services/Tracking/classes/class.ilObjUserTracking.php';
91  $tracking = new ilObjUserTracking();
92  if($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS))
93  {
94  $cols["first_access"] = array(
95  "txt" => $lng->txt("trac_first_access"),
96  "default" => true);
97  $cols["last_access"] = array(
98  "txt" => $lng->txt("trac_last_access"),
99  "default" => true);
100  }
101  if($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT))
102  {
103  $cols["read_count"] = array(
104  "txt" => $lng->txt("trac_read_count"),
105  "default" => true);
106  }
107  if($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS))
108  {
109  $cols["spent_seconds"] = array(
110  "txt" => $lng->txt("trac_spent_seconds"),
111  "default" => true);
112  }
113 
114  // #15334 - parent object does not matter, sub-objects may have percentage
115  $cols["percentage"] = array(
116  "txt" => $lng->txt("trac_percentage"),
117  "default" => true);
118 
119  $cols["status"] = array(
120  "txt" => $lng->txt("trac_status"),
121  "default" => true);
122  $cols["mark"] = array(
123  "txt" => $lng->txt("trac_mark"),
124  "default" => true);
125  $cols["u_comment"] = array(
126  "txt" => $lng->txt("trac_comment"),
127  "default" => false);
128 
129  return $cols;
130  }
131 
135  function getItems()
136  {
137  global $rbacsystem;
138 
139  $this->determineOffsetAndOrder();
140 
141  $additional_fields = $this->getSelectedColumns();
142 
143  include_once("./Services/Tracking/classes/class.ilTrQuery.php");
144 
146  $this->user_id,
147  $this->obj_id,
148  $this->ref_id,
152  ilUtil::stripSlashes($this->getLimit()),
153  $this->filter,
154  $additional_fields,
155  $this->filter["view_mode"]);
156 
157  if (count($tr_data["set"]) == 0 && $this->getOffset() > 0)
158  {
159  $this->resetOffset();
161  $this->user_id,
162  $this->obj_id,
163  $this->ref_id,
167  ilUtil::stripSlashes($this->getLimit()),
168  $this->filter,
169  $additional_fields,
170  $this->filter["view_mode"]);
171  }
172 
173  // #13807
174  foreach($tr_data["set"] as $idx => $row)
175  {
176  if($row["ref_id"] &&
177  !$rbacsystem->checkAccess("read_learning_progress", $row["ref_id"]))
178  {
179  foreach(array_keys($row) as $col_id)
180  {
181  if(!in_array($col_id, array("type", "obj_id", "ref_id", "title", "sort_title")))
182  {
183  $tr_data["set"][$idx][$col_id] = null;
184  }
185  }
186  $tr_data["set"][$idx]["privacy_conflict"] = true;
187  }
188  }
189 
190  $this->setMaxCount($tr_data["cnt"]);
191 
192  if($this->getOrderField() == "title")
193  {
194  // sort alphabetically, move parent object to 1st position
195  $set = array();
196  $parent = false;
197  foreach($tr_data["set"] as $idx => $row)
198  {
199  if($row['obj_id'] == $this->obj_id)
200  {
201  $parent = $row;
202  }
203  else if(isset($row["sort_title"]))
204  {
205  $set[strtolower($row["sort_title"])."__".$idx] = $row;
206  }
207  else
208  {
209  $set[strtolower($row["title"])."__".$idx] = $row;
210  }
211  }
212  unset($tr_data["set"]);
213  if($this->getOrderDirection() == "asc")
214  {
215  ksort($set);
216  }
217  else
218  {
219  krsort($set);
220  }
221  $set = array_values($set);
222  if($parent)
223  {
224  array_unshift($set, $parent);
225  }
226 
227  $this->setData($set);
228  }
229  else
230  {
231  $this->setData($tr_data["set"]);
232  }
233  }
234 
238  function initFilter()
239  {
240  global $lng;
241 
242  // for scorm and objectives this filter does not make sense / is not implemented
243  include_once './Services/Object/classes/class.ilObjectLP.php';
244  $olp = ilObjectLP::getInstance($this->obj_id);
245  $collection = $olp->getCollectionInstance();
246  if($collection instanceof ilLPCollectionOfRepositoryObjects)
247  {
248  include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
249  include_once("./Services/Table/interfaces/interface.ilTableFilterItem.php");
250 
251  // show collection only/all
252  include_once("./Services/Form/classes/class.ilRadioGroupInputGUI.php");
253  include_once("./Services/Form/classes/class.ilRadioOption.php");
254  $ti = new ilRadioGroupInputGUI($lng->txt("trac_view_mode"), "view_mode");
255  $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_all"), ""));
256  $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_collection"), "coll"));
257  $this->addFilterItem($ti);
258  $ti->readFromSession();
259  $this->filter["view_mode"] = $ti->getValue();
260  }
261  }
262 
266  protected function fillRow($data)
267  {
268  global $ilCtrl, $lng, $rbacsystem;
269 
270  if(!$this->isPercentageAvailable($data["obj_id"]))
271  {
272  $data["percentage"] = NULL;
273  }
274 
275  foreach ($this->getSelectedColumns() as $c)
276  {
277  if(!$data["privacy_conflict"])
278  {
279  $val = (trim($data[$c]) == "")
280  ? " "
281  : $data[$c];
282 
283  if ($data[$c] != "" || $c == "status")
284  {
285  switch ($c)
286  {
287  case "first_access":
289  break;
290 
291  case "last_access":
293  break;
294 
295  case "status":
296  include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
299  $val = ilUtil::img($path, $text);
300 
301  if($data["type"] != "lobj" && $data["type"] != "sco")
302  {
303  $timing = $this->showTimingsWarning($data["ref_id"], $this->user_id);
304  if($timing)
305  {
306  if($timing !== true)
307  {
308  $timing = ": ".ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
309  }
310  else
311  {
312  $timing = "";
313  }
314  $this->tpl->setCurrentBlock('warning_img');
315  $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
316  $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed').$timing);
317  $this->tpl->parseCurrentBlock();
318  }
319  }
320  break;
321 
322  case "spent_seconds":
323  include_once("./Services/Utilities/classes/class.ilFormat.php");
324  $val = ilFormat::_secondsToString($data[$c], ($data[$c] < 3600 ? true : false)); // #14858
325  break;
326 
327  case "percentage":
328  $val = $data[$c]."%";
329  break;
330 
331  }
332  }
333  if ($c == "mark" && in_array($this->type, array("lm", "dbk")))
334  {
335  $val = "-";
336  }
337  if ($c == "spent_seconds" && in_array($this->type, array("exc")))
338  {
339  $val = "-";
340  }
341  if ($c == "percentage" &&
342  (in_array(strtolower($this->status_class),
343  array("illpstatusmanual", "illpstatusscormpackage", "illpstatustestfinished")) ||
344  $this->type == "exc"))
345  {
346  $val = "-";
347  }
348  }
349  else
350  {
351  $val = "&nbsp;";
352  }
353 
354  $this->tpl->setCurrentBlock("user_field");
355  $this->tpl->setVariable("VAL_UF", $val);
356  $this->tpl->parseCurrentBlock();
357  }
358 
359  if($data["privacy_conflict"])
360  {
361  $this->tpl->setCurrentBlock("permission_bl");
362  $this->tpl->setVariable("TXT_NO_PERMISSION", $lng->txt("status_no_permission"));
363  $this->tpl->parseCurrentBlock();
364  }
365 
366  if($data["title"] == "")
367  {
368  $data["title"] = "--".$lng->txt("none")."--";
369  }
370  $this->tpl->setVariable("ICON",ilObject::_getIcon("", "tiny", $data["type"]));
371  $this->tpl->setVariable("ICON_ALT", $lng->txt($data["type"]));
372 
373  if(in_array($data['type'], array('fold', 'grp')) && $data['obj_id'] != $this->obj_id)
374  {
375  if($data['type'] == 'fold')
376  {
377  $object_gui = 'ilobjfoldergui';
378  }
379  else
380  {
381  $object_gui = 'ilobjgroupgui';
382  }
383  $this->tpl->setCurrentBlock('title_linked');
384 
385  // link structure gets too complicated
386  if($_GET["baseClass"] != "ilPersonalDesktopGUI" && $_GET["baseClass"] != "ilAdministrationGUI")
387  {
388  $old = $ilCtrl->getParameterArrayByClass('illplistofobjectsgui');
389  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $data["ref_id"]);
390  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $data["ref_id"]);
391  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $this->user_id);
392  $url = $ilCtrl->getLinkTargetByClass(array('ilrepositorygui', $object_gui, 'illearningprogressgui', 'illplistofobjectsgui'), 'userdetails');
393  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $old["ref_id"]);
394  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $old["details_id"]);
395  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $old["user_id"]);
396  }
397  else
398  {
399  $url = "#";
400  }
401 
402  $this->tpl->setVariable("URL_TITLE", $url);
403  $this->tpl->setVariable("VAL_TITLE", $data["title"]);
404  $this->tpl->parseCurrentBlock();
405  }
406  else
407  {
408  $this->tpl->setCurrentBlock('title_plain');
409  $this->tpl->setVariable("VAL_TITLE", $data["title"]);
410  $this->tpl->parseCurrentBlock();
411  }
412 
413  // #13807 / #17069
414  if($data["ref_id"] &&
415  $rbacsystem->checkAccess('edit_learning_progress', $data["ref_id"]))
416  {
417  if(!in_array($data["type"], array("sco", "lobj")) && !$this->getPrintMode())
418  {
419  $this->tpl->setCurrentBlock("item_command");
420  $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", $data["ref_id"]);
421  $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", 'edituser'));
422  $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
423  $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", "");
424  $this->tpl->parseCurrentBlock();
425  }
426  }
427  }
428 
429  protected function fillHeaderExcel($worksheet, &$a_row)
430  {
431  $worksheet->write($a_row, 0, $this->lng->txt("type"));
432  $worksheet->write($a_row, 1, $this->lng->txt("title"));
433 
434  $labels = $this->getSelectableColumns();
435  $cnt = 2;
436  foreach ($this->getSelectedColumns() as $c)
437  {
438  $worksheet->write($a_row, $cnt, $labels[$c]["txt"]);
439  $cnt++;
440  }
441  }
442 
443  protected function fillRowExcel($worksheet, &$a_row, $a_set)
444  {
445  $worksheet->write($a_row, 0, $this->lng->txt($a_set["type"]));
446  $worksheet->write($a_row, 1, $a_set["title"]);
447 
448  $cnt = 2;
449  foreach ($this->getSelectedColumns() as $c)
450  {
451  if($c != 'status')
452  {
453  $val = $this->parseValue($c, $a_set[$c], "user");
454  }
455  else
456  {
457  $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
458  }
459  $worksheet->write($a_row, $cnt, $val);
460  $cnt++;
461  }
462  }
463 
464  protected function fillHeaderCSV($a_csv)
465  {
466  $a_csv->addColumn($this->lng->txt("type"));
467  $a_csv->addColumn($this->lng->txt("title"));
468 
469  $labels = $this->getSelectableColumns();
470  foreach ($this->getSelectedColumns() as $c)
471  {
472  $a_csv->addColumn($labels[$c]["txt"]);
473  }
474 
475  $a_csv->addRow();
476  }
477 
478  protected function fillRowCSV($a_csv, $a_set)
479  {
480  $a_csv->addColumn($this->lng->txt($a_set["type"]));
481  $a_csv->addColumn($a_set["title"]);
482 
483  foreach ($this->getSelectedColumns() as $c)
484  {
485  if($c != 'status')
486  {
487  $val = $this->parseValue($c, $a_set[$c], "user");
488  }
489  else
490  {
491  $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
492  }
493  $a_csv->addColumn($val);
494  }
495 
496  $a_csv->addRow();
497  }
498 }
499 ?>