ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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  include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
177  if($row["ref_id"] &&
178  !ilLearningProgressAccess::checkPermission('read_learning_progress', $row['ref_id']))
179  {
180  foreach(array_keys($row) as $col_id)
181  {
182  if(!in_array($col_id, array("type", "obj_id", "ref_id", "title", "sort_title")))
183  {
184  $tr_data["set"][$idx][$col_id] = null;
185  }
186  }
187  $tr_data["set"][$idx]["privacy_conflict"] = true;
188  }
189  }
190 
191  $this->setMaxCount($tr_data["cnt"]);
192 
193  if($this->getOrderField() == "title")
194  {
195  // sort alphabetically, move parent object to 1st position
196  $set = array();
197  $parent = false;
198  foreach($tr_data["set"] as $idx => $row)
199  {
200  if($row['obj_id'] == $this->obj_id)
201  {
202  $parent = $row;
203  }
204  else if(isset($row["sort_title"]))
205  {
206  $set[strtolower($row["sort_title"])."__".$idx] = $row;
207  }
208  else
209  {
210  $set[strtolower($row["title"])."__".$idx] = $row;
211  }
212  }
213  unset($tr_data["set"]);
214  if($this->getOrderDirection() == "asc")
215  {
216  ksort($set);
217  }
218  else
219  {
220  krsort($set);
221  }
222  $set = array_values($set);
223  if($parent)
224  {
225  array_unshift($set, $parent);
226  }
227 
228  $this->setData($set);
229  }
230  else
231  {
232  $this->setData($tr_data["set"]);
233  }
234  }
235 
239  function initFilter()
240  {
241  global $lng;
242 
243  // for scorm and objectives this filter does not make sense / is not implemented
244  include_once './Services/Object/classes/class.ilObjectLP.php';
245  $olp = ilObjectLP::getInstance($this->obj_id);
246  $collection = $olp->getCollectionInstance();
247  if($collection instanceof ilLPCollectionOfRepositoryObjects)
248  {
249  include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
250  include_once("./Services/Table/interfaces/interface.ilTableFilterItem.php");
251 
252  // show collection only/all
253  include_once("./Services/Form/classes/class.ilRadioGroupInputGUI.php");
254  include_once("./Services/Form/classes/class.ilRadioOption.php");
255  $ti = new ilRadioGroupInputGUI($lng->txt("trac_view_mode"), "view_mode");
256  $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_all"), ""));
257  $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_collection"), "coll"));
258  $this->addFilterItem($ti);
259  $ti->readFromSession();
260  $this->filter["view_mode"] = $ti->getValue();
261  }
262  }
263 
267  protected function fillRow($data)
268  {
269  global $ilCtrl, $lng, $rbacsystem;
270 
271  if(!$this->isPercentageAvailable($data["obj_id"]))
272  {
273  $data["percentage"] = NULL;
274  }
275 
276  foreach ($this->getSelectedColumns() as $c)
277  {
278  if(!$data["privacy_conflict"])
279  {
280  $val = (trim($data[$c]) == "")
281  ? " "
282  : $data[$c];
283 
284  if ($data[$c] != "" || $c == "status")
285  {
286  switch ($c)
287  {
288  case "first_access":
290  break;
291 
292  case "last_access":
294  break;
295 
296  case "status":
297  include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
300  $val = ilUtil::img($path, $text);
301 
302  if($data["ref_id"] &&
303  $data["type"] != "lobj" &&
304  $data["type"] != "sco" &&
305  $data["type"] != "st" &&
306  $data["type"] != "mob")
307  {
308  $timing = $this->showTimingsWarning($data["ref_id"], $this->user_id);
309  if($timing)
310  {
311  if($timing !== true)
312  {
313  $timing = ": ".ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
314  }
315  else
316  {
317  $timing = "";
318  }
319  $this->tpl->setCurrentBlock('warning_img');
320  $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
321  $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed').$timing);
322  $this->tpl->parseCurrentBlock();
323  }
324  }
325  break;
326 
327  case "spent_seconds":
329  {
330  $val = "-";
331  }
332  else
333  {
334  $val = ilDatePresentation::secondsToString($data[$c], ($data[$c] < 3600 ? true : false)); // #14858
335  }
336  break;
337 
338  case "percentage":
339  $val = $data[$c]."%";
340  break;
341 
342  }
343  }
344  if ($c == "mark" &&
345  !ilObjectLP::supportsMark($this->type))
346  {
347  $val = "-";
348  }
349  if ($c == "spent_seconds" &&
350  !ilObjectLP::supportsSpentSeconds($this->type))
351  {
352  $val = "-";
353  }
354  if ($c == "percentage" &&
355  !$this->isPercentageAvailable($data["obj_id"]))
356  {
357  $val = "-";
358  }
359  }
360  else
361  {
362  $val = "&nbsp;";
363  }
364 
365  $this->tpl->setCurrentBlock("user_field");
366  $this->tpl->setVariable("VAL_UF", $val);
367  $this->tpl->parseCurrentBlock();
368  }
369 
370  if($data["privacy_conflict"])
371  {
372  $this->tpl->setCurrentBlock("permission_bl");
373  $this->tpl->setVariable("TXT_NO_PERMISSION", $lng->txt("status_no_permission"));
374  $this->tpl->parseCurrentBlock();
375  }
376 
377  if($data["title"] == "")
378  {
379  $data["title"] = "--".$lng->txt("none")."--";
380  }
381  $this->tpl->setVariable("ICON",ilObject::_getIcon("", "tiny", $data["type"]));
382  $this->tpl->setVariable("ICON_ALT", $lng->txt($data["type"]));
383 
384  if(in_array($data['type'], array('fold', 'grp')) && $data['obj_id'] != $this->obj_id)
385  {
386  if($data['type'] == 'fold')
387  {
388  $object_gui = 'ilobjfoldergui';
389  }
390  else
391  {
392  $object_gui = 'ilobjgroupgui';
393  }
394  $this->tpl->setCurrentBlock('title_linked');
395 
396  // link structure gets too complicated
397  if($_GET["baseClass"] != "ilPersonalDesktopGUI" && $_GET["baseClass"] != "ilAdministrationGUI")
398  {
399  $old = $ilCtrl->getParameterArrayByClass('illplistofobjectsgui');
400  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $data["ref_id"]);
401  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $data["ref_id"]);
402  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $this->user_id);
403  $url = $ilCtrl->getLinkTargetByClass(array('ilrepositorygui', $object_gui, 'illearningprogressgui', 'illplistofobjectsgui'), 'userdetails');
404  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $old["ref_id"]);
405  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $old["details_id"]);
406  $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $old["user_id"]);
407  }
408  else
409  {
410  $url = "#";
411  }
412 
413  $this->tpl->setVariable("URL_TITLE", $url);
414  $this->tpl->setVariable("VAL_TITLE", $data["title"]);
415  $this->tpl->parseCurrentBlock();
416  }
417  else
418  {
419  $this->tpl->setCurrentBlock('title_plain');
420  $this->tpl->setVariable("VAL_TITLE", $data["title"]);
421  $this->tpl->parseCurrentBlock();
422  }
423 
424  // #16453 / #17163
425  if($data['ref_id'])
426  {
427  include_once './Services/Tree/classes/class.ilPathGUI.php';
428  $path = new ilPathGUI();
429  $path = $path->getPath($this->ref_id, $data['ref_id']);
430  if($path)
431  {
432  $this->tpl->setVariable('COLL_PATH', $this->lng->txt('path').': '.$path);
433  }
434  }
435 
436  // #13807 / #17069
437  include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
438  if($data["ref_id"] &&
439  ilLearningProgressAccess::checkPermission('edit_learning_progress', $data['ref_id']))
440  {
441  if(!in_array($data["type"], array("sco", "lobj")) && !$this->getPrintMode())
442  {
443  $this->tpl->setCurrentBlock("item_command");
444  $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", $data["ref_id"]);
445  $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", 'edituser'));
446  $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
447  $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", "");
448  $this->tpl->parseCurrentBlock();
449  }
450  }
451  }
452 
453  protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
454  {
455  $a_excel->setCell($a_row, 0, $this->lng->txt("type"));
456  $a_excel->setCell($a_row, 1, $this->lng->txt("title"));
457 
458  $labels = $this->getSelectableColumns();
459  $cnt = 2;
460  foreach ($this->getSelectedColumns() as $c)
461  {
462  $a_excel->setCell($a_row, $cnt++, $labels[$c]["txt"]);
463  }
464 
465  $a_excel->setBold("A".$a_row.":".$a_excel->getColumnCoord($cnt-1).$a_row);
466  }
467 
468  protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
469  {
470  $a_excel->setCell($a_row, 0, $this->lng->txt($a_set["type"]));
471  $a_excel->setCell($a_row, 1, $a_set["title"]);
472 
473  $cnt = 2;
474  foreach ($this->getSelectedColumns() as $c)
475  {
476  if($c != 'status')
477  {
478  $val = $this->parseValue($c, $a_set[$c], $this->type);
479  }
480  else
481  {
482  $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
483  }
484  $a_excel->setCell($a_row, $cnt++, $val);
485  }
486  }
487 
488  protected function fillHeaderCSV($a_csv)
489  {
490  $a_csv->addColumn($this->lng->txt("type"));
491  $a_csv->addColumn($this->lng->txt("title"));
492 
493  $labels = $this->getSelectableColumns();
494  foreach ($this->getSelectedColumns() as $c)
495  {
496  $a_csv->addColumn($labels[$c]["txt"]);
497  }
498 
499  $a_csv->addRow();
500  }
501 
502  protected function fillRowCSV($a_csv, $a_set)
503  {
504  $a_csv->addColumn($this->lng->txt($a_set["type"]));
505  $a_csv->addColumn($a_set["title"]);
506 
507  foreach ($this->getSelectedColumns() as $c)
508  {
509  if($c != 'status')
510  {
511  $val = $this->parseValue($c, $a_set[$c], $this->type);
512  }
513  else
514  {
515  $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
516  }
517  $a_csv->addColumn($val);
518  }
519 
520  $a_csv->addRow();
521  }
522 }
523 ?>
Creates a path for a start and endnode.
This class represents an option in a radio group.
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
$path
Definition: aliased.php:25
setExternalSorting($a_val)
Set external sorting.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setExportFormats(array $formats)
Set available export formats.
const IL_CAL_DATETIME
static _getImagePathForStatus($a_status)
Get image path for status.
setPrintMode($a_value=false)
Toogle print mode.
$_GET["client_id"]
setShowTemplates($a_value)
Toggle templates.
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
setExternalSegmentation($a_val)
Set external segmentation.
resetOffset($a_in_determination=false)
Reset offset.
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
__construct($a_parent_obj, $a_parent_cmd, $a_user_id, $a_obj_id, $a_ref_id, $a_print_view=false)
Constructor.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
$url
Definition: shib_logout.php:72
parseTitle($a_obj_id, $action, $a_user_id=false)
const IL_CAL_UNIX
parseValue($id, $value, $type)
getOrderDirection()
Get order direction.
static checkPermission($a_permission, $a_ref_id, $a_user_id=null)
wrapper for rbac access checks
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
This class represents a property in a property form.
addOption($a_option)
Add Option.
static secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
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.
getOffset()
Get offset.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static getObjectsDataForUser($a_user_id, $a_parent_obj_id, $a_parent_ref_id, $a_order_field="", $a_order_dir="", $a_offset=0, $a_limit=9999, array $a_filters=NULL, array $a_additional_fields=NULL, $use_collection=true)
Get all object-based tracking data for user and parent object.
static formatDate(ilDateTime $date)
Format a date public.
Date and time handling
getSelectedColumns()
Get selected columns.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
$old
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
Build table list for objects of given user.
static supportsMark($a_obj_type)
setCell($a_row, $a_col, $a_value)
Set cell value.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
static supportsSpentSeconds($a_obj_type)
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
global $l
Definition: afr.php:30
global $lng
Definition: privfeed.php:17
showTimingsWarning($a_ref_id, $a_user_id)
$text
getPrintMode()
Get print mode.
setEnableHeader($a_enableheader)
Set Enable Header.
getLimit()
Get limit.
setMaxCount($a_max_count)
set max.
setEnableTitle($a_enabletitle)
Set Enable Title.
static getInstance($a_obj_id)
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)