ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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
4include_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
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,
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,
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 include_once("./Services/Utilities/classes/class.ilFormat.php");
335 $val = ilFormat::_secondsToString($data[$c], ($data[$c] < 3600 ? true : false)); // #14858
336 }
337 break;
338
339 case "percentage":
340 $val = $data[$c]."%";
341 break;
342
343 }
344 }
345 if ($c == "mark" &&
346 !ilObjectLP::supportsMark($this->type))
347 {
348 $val = "-";
349 }
350 if ($c == "spent_seconds" &&
352 {
353 $val = "-";
354 }
355 if ($c == "percentage" &&
356 !$this->isPercentageAvailable($data["obj_id"]))
357 {
358 $val = "-";
359 }
360 }
361 else
362 {
363 $val = "&nbsp;";
364 }
365
366 $this->tpl->setCurrentBlock("user_field");
367 $this->tpl->setVariable("VAL_UF", $val);
368 $this->tpl->parseCurrentBlock();
369 }
370
371 if($data["privacy_conflict"])
372 {
373 $this->tpl->setCurrentBlock("permission_bl");
374 $this->tpl->setVariable("TXT_NO_PERMISSION", $lng->txt("status_no_permission"));
375 $this->tpl->parseCurrentBlock();
376 }
377
378 if($data["title"] == "")
379 {
380 $data["title"] = "--".$lng->txt("none")."--";
381 }
382 $this->tpl->setVariable("ICON",ilObject::_getIcon("", "tiny", $data["type"]));
383 $this->tpl->setVariable("ICON_ALT", $lng->txt($data["type"]));
384
385 if(in_array($data['type'], array('fold', 'grp')) && $data['obj_id'] != $this->obj_id)
386 {
387 if($data['type'] == 'fold')
388 {
389 $object_gui = 'ilobjfoldergui';
390 }
391 else
392 {
393 $object_gui = 'ilobjgroupgui';
394 }
395 $this->tpl->setCurrentBlock('title_linked');
396
397 // link structure gets too complicated
398 if($_GET["baseClass"] != "ilPersonalDesktopGUI" && $_GET["baseClass"] != "ilAdministrationGUI")
399 {
400 $old = $ilCtrl->getParameterArrayByClass('illplistofobjectsgui');
401 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $data["ref_id"]);
402 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $data["ref_id"]);
403 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $this->user_id);
404 $url = $ilCtrl->getLinkTargetByClass(array('ilrepositorygui', $object_gui, 'illearningprogressgui', 'illplistofobjectsgui'), 'userdetails');
405 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $old["ref_id"]);
406 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $old["details_id"]);
407 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $old["user_id"]);
408 }
409 else
410 {
411 $url = "#";
412 }
413
414 $this->tpl->setVariable("URL_TITLE", $url);
415 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
416 $this->tpl->parseCurrentBlock();
417 }
418 else
419 {
420 $this->tpl->setCurrentBlock('title_plain');
421 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
422 $this->tpl->parseCurrentBlock();
423 }
424
425 // #16453 / #17163
426 if($data['ref_id'])
427 {
428 include_once './Services/Tree/classes/class.ilPathGUI.php';
429 $path = new ilPathGUI();
430 $path = $path->getPath($this->ref_id, $data['ref_id']);
431 if($path)
432 {
433 $this->tpl->setVariable('COLL_PATH', $this->lng->txt('path').': '.$path);
434 }
435 }
436
437 // #13807 / #17069
438 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
439 if($data["ref_id"] &&
440 ilLearningProgressAccess::checkPermission('edit_learning_progress', $data['ref_id']))
441 {
442 if(!in_array($data["type"], array("sco", "lobj")) && !$this->getPrintMode())
443 {
444 $this->tpl->setCurrentBlock("item_command");
445 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", $data["ref_id"]);
446 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", 'edituser'));
447 $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
448 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", "");
449 $this->tpl->parseCurrentBlock();
450 }
451 }
452 }
453
454 protected function fillHeaderExcel($worksheet, &$a_row)
455 {
456 $worksheet->write($a_row, 0, $this->lng->txt("type"));
457 $worksheet->write($a_row, 1, $this->lng->txt("title"));
458
459 $labels = $this->getSelectableColumns();
460 $cnt = 2;
461 foreach ($this->getSelectedColumns() as $c)
462 {
463 $worksheet->write($a_row, $cnt, $labels[$c]["txt"]);
464 $cnt++;
465 }
466 }
467
468 protected function fillRowExcel($worksheet, &$a_row, $a_set)
469 {
470 $worksheet->write($a_row, 0, $this->lng->txt($a_set["type"]));
471 $worksheet->write($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 $worksheet->write($a_row, $cnt, $val);
485 $cnt++;
486 }
487 }
488
489 protected function fillHeaderCSV($a_csv)
490 {
491 $a_csv->addColumn($this->lng->txt("type"));
492 $a_csv->addColumn($this->lng->txt("title"));
493
494 $labels = $this->getSelectableColumns();
495 foreach ($this->getSelectedColumns() as $c)
496 {
497 $a_csv->addColumn($labels[$c]["txt"]);
498 }
499
500 $a_csv->addRow();
501 }
502
503 protected function fillRowCSV($a_csv, $a_set)
504 {
505 $a_csv->addColumn($this->lng->txt($a_set["type"]));
506 $a_csv->addColumn($a_set["title"]);
507
508 foreach ($this->getSelectedColumns() as $c)
509 {
510 if($c != 'status')
511 {
512 $val = $this->parseValue($c, $a_set[$c], $this->type);
513 }
514 else
515 {
516 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
517 }
518 $a_csv->addColumn($val);
519 }
520
521 $a_csv->addRow();
522 }
523}
524?>
global $l
Definition: afr.php:30
$_GET["client_id"]
const IL_CAL_UNIX
const IL_CAL_DATETIME
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
Class for single dates.
_secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
TableGUI class for learning progress.
parseValue($id, $value, $type)
showTimingsWarning($a_ref_id, $a_user_id)
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
_getImagePathForStatus($a_status)
Get image path for status.
_getStatusText($a_status, $a_lng=null)
Get status alt text.
static supportsMark($a_obj_type)
static supportsSpentSeconds($a_obj_type)
static getInstance($a_obj_id)
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
Creates a path for a start and endnode.
This class represents a property in a property form.
This class represents an option in a radio group.
getSelectedColumns()
Get selected columns.
setEnableHeader($a_enableheader)
Set Enable Header.
setExternalSorting($a_val)
Set external sorting.
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.
setPrintMode($a_value=false)
Toogle print mode.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
getLimit()
Get limit.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
resetOffset($a_in_determination=false)
Reset offset.
setLimit($a_limit=0, $a_default_limit=0)
set max.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
getPrintMode()
Get print mode.
getOffset()
Get offset.
setExternalSegmentation($a_val)
Set external segmentation.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setShowTemplates($a_value)
Toggle templates.
getOrderDirection()
Get order direction.
setMaxCount($a_max_count)
set max.
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.
Build table list for objects of given user.
__construct($a_parent_obj, $a_parent_cmd, $a_user_id, $a_obj_id, $a_ref_id, $a_print_view=false)
Constructor.
fillHeaderCSV($a_csv)
CSV Version of Fill Header.
fillHeaderExcel($worksheet, &$a_row)
Excel Version of Fill Header.
fillRowExcel($worksheet, &$a_row, $a_set)
Excel Version of Fill Row.
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
$text
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40
$url
Definition: shib_logout.php:72
$path
Definition: index.php:22