ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilTrUserObjectsPropsTableGUI.php
Go to the documentation of this file.
1<?php
18include_once("./Services/Tracking/classes/class.ilLPTableBaseGUI.php");
19
30{
34 public function __construct($a_parent_obj, $a_parent_cmd, $a_user_id, $a_obj_id, $a_ref_id, $a_print_view = false)
35 {
36 global $DIC;
37
38 $ilCtrl = $DIC['ilCtrl'];
39 $lng = $DIC['lng'];
40 $ilAccess = $DIC['ilAccess'];
41 $lng = $DIC['lng'];
42 $rbacsystem = $DIC['rbacsystem'];
43
44 $this->setId("truop");
45 $this->user_id = $a_user_id;
46 $this->obj_id = $a_obj_id;
47 $this->ref_id = $a_ref_id;
48
49 parent::__construct($a_parent_obj, $a_parent_cmd);
50 $this->setLimit(9999);
51
52 $this->parseTitle($this->obj_id, "details", $this->user_id);
53
54 if ($a_print_view) {
55 $this->setPrintMode(true);
56 }
57
58 $this->addColumn($this->lng->txt("title"), "title");
59
60 foreach ($this->getSelectedColumns() as $c) {
61 $l = $c;
62 if (in_array($l, array("last_access", "first_access", "read_count", "spent_seconds", "mark", "status", "percentage"))) {
63 $l = "trac_" . $l;
64 }
65 if ($l == "u_comment") {
66 $l = "trac_comment";
67 }
68 $this->addColumn($this->lng->txt($l), $c);
69 }
70
71 if (!$this->getPrintMode()) {
72 $this->addColumn($this->lng->txt("actions"), "");
73 }
74
75 $this->setExternalSorting(true);
76 $this->setExternalSegmentation(true);
77 $this->setEnableHeader(true);
78 $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
79 $this->setRowTemplate("tpl.user_objects_props_row.html", "Services/Tracking");
80 $this->setEnableTitle(true);
81 $this->setDefaultOrderField("title");
82 $this->setDefaultOrderDirection("asc");
83 $this->setShowTemplates(true);
84
85 $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
86
87 $this->initFilter();
88
89 $this->getItems();
90 }
91
98 public function getSelectableColumns()
99 {
100 global $DIC;
101
102 $lng = $DIC['lng'];
103
104 // default fields
105 $cols = array();
106
107 include_once 'Services/Tracking/classes/class.ilObjUserTracking.php';
108 $tracking = new ilObjUserTracking();
109 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS)) {
110 $cols["first_access"] = array(
111 "txt" => $lng->txt("trac_first_access"),
112 "default" => true);
113 $cols["last_access"] = array(
114 "txt" => $lng->txt("trac_last_access"),
115 "default" => true);
116 }
117 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT)) {
118 $cols["read_count"] = array(
119 "txt" => $lng->txt("trac_read_count"),
120 "default" => true);
121 }
122 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS)) {
123 $cols["spent_seconds"] = array(
124 "txt" => $lng->txt("trac_spent_seconds"),
125 "default" => true);
126 }
127
128 // #15334 - parent object does not matter, sub-objects may have percentage
129 $cols["percentage"] = array(
130 "txt" => $lng->txt("trac_percentage"),
131 "default" => true);
132
133 $cols["status"] = array(
134 "txt" => $lng->txt("trac_status"),
135 "default" => true);
136 $cols["mark"] = array(
137 "txt" => $lng->txt("trac_mark"),
138 "default" => true);
139 $cols["u_comment"] = array(
140 "txt" => $lng->txt("trac_comment"),
141 "default" => false);
142
143 return $cols;
144 }
145
149 public function getItems()
150 {
151 global $DIC;
152
153 $rbacsystem = $DIC['rbacsystem'];
154
156
157 $additional_fields = $this->getSelectedColumns();
158
159 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
160
162 $this->user_id,
163 $this->obj_id,
164 $this->ref_id,
169 $this->filter,
170 $additional_fields,
171 $this->filter["view_mode"]
172 );
173
174 if (count($tr_data["set"]) == 0 && $this->getOffset() > 0) {
175 $this->resetOffset();
177 $this->user_id,
178 $this->obj_id,
179 $this->ref_id,
184 $this->filter,
185 $additional_fields,
186 $this->filter["view_mode"]
187 );
188 }
189
190 // #13807
191 foreach ($tr_data["set"] as $idx => $row) {
192 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
193 if ($row["ref_id"] &&
194 !ilLearningProgressAccess::checkPermission('read_learning_progress', $row['ref_id'])) {
195 foreach (array_keys($row) as $col_id) {
196 if (!in_array($col_id, array("type", "obj_id", "ref_id", "title", "sort_title"))) {
197 $tr_data["set"][$idx][$col_id] = null;
198 }
199 }
200 $tr_data["set"][$idx]["privacy_conflict"] = true;
201 }
202 }
203
204 $this->setMaxCount($tr_data["cnt"]);
205
206 if ($this->getOrderField() == "title") {
207 // sort alphabetically, move parent object to 1st position
208 $set = array();
209 $parent = false;
210 foreach ($tr_data["set"] as $idx => $row) {
211 if ($row['obj_id'] == $this->obj_id) {
212 $parent = $row;
213 } elseif (isset($row["sort_title"])) {
214 $set[strtolower($row["sort_title"]) . "__" . $idx] = $row;
215 } else {
216 $set[strtolower($row["title"]) . "__" . $idx] = $row;
217 }
218 }
219 unset($tr_data["set"]);
220 if ($this->getOrderDirection() == "asc") {
221 ksort($set);
222 } else {
223 krsort($set);
224 }
225 $set = array_values($set);
226 if ($parent) {
227 array_unshift($set, $parent);
228 }
229
230 $this->setData($set);
231 } else {
232 $this->setData($tr_data["set"]);
233 }
234 }
235
239 public function initFilter()
240 {
241 global $DIC;
242
243 $lng = $DIC['lng'];
244
245 // for scorm and objectives this filter does not make sense / is not implemented
246 include_once './Services/Object/classes/class.ilObjectLP.php';
247 $olp = ilObjectLP::getInstance($this->obj_id);
248 $collection = $olp->getCollectionInstance();
249 if ($collection instanceof ilLPCollectionOfRepositoryObjects) {
250 include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
251 include_once("./Services/Table/interfaces/interface.ilTableFilterItem.php");
252
253 // show collection only/all
254 include_once("./Services/Form/classes/class.ilRadioGroupInputGUI.php");
255 include_once("./Services/Form/classes/class.ilRadioOption.php");
256 $ti = new ilRadioGroupInputGUI($lng->txt("trac_view_mode"), "view_mode");
257 $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_all"), ""));
258 $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_collection"), "coll"));
259 $this->addFilterItem($ti);
260 $ti->readFromSession();
261 $this->filter["view_mode"] = $ti->getValue();
262 }
263 }
264
268 protected function fillRow($data)
269 {
270 global $DIC;
272
273 $ilCtrl = $DIC['ilCtrl'];
274 $lng = $DIC['lng'];
275 $rbacsystem = $DIC['rbacsystem'];
276
277 if (!$this->isPercentageAvailable($data["obj_id"])) {
278 $data["percentage"] = null;
279 }
280
281 foreach ($this->getSelectedColumns() as $c) {
282 if (!$data["privacy_conflict"]) {
283 $val = (trim($data[$c]) == "")
284 ? " "
285 : $data[$c];
286
287 if ($data[$c] != "" || $c == "status") {
288 switch ($c) {
289 case "first_access":
291 break;
292
293 case "last_access":
295 break;
296
297 case "status":
298 $val = $icons->renderIconForStatus((int) $data[$c]);
299
300 if ($data["ref_id"] &&
301 $data["type"] != "lobj" &&
302 $data["type"] != "sco" &&
303 $data["type"] != "st" &&
304 $data["type"] != "mob") {
305 $timing = $this->showTimingsWarning($data["ref_id"], $this->user_id);
306 if ($timing) {
307 if ($timing !== true) {
308 $timing = ": " . ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
309 } else {
310 $timing = "";
311 }
312 $this->tpl->setCurrentBlock('warning_img');
313 $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
314 $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed') . $timing);
315 $this->tpl->parseCurrentBlock();
316 }
317 }
318 break;
319
320 case "spent_seconds":
322 $val = "-";
323 } else {
324 $val = ilDatePresentation::secondsToString($data[$c], ($data[$c] < 3600 ? true : false)); // #14858
325 }
326 break;
327
328 case "percentage":
329 $val = $data[$c] . "%";
330 break;
331
332 }
333 }
334 if ($c == "mark" &&
335 !ilObjectLP::supportsMark($this->type)) {
336 $val = "-";
337 }
338 if ($c == "spent_seconds" &&
339 !ilObjectLP::supportsSpentSeconds($this->type)) {
340 $val = "-";
341 }
342 if ($c == "percentage" &&
343 !$this->isPercentageAvailable($data["obj_id"])) {
344 $val = "-";
345 }
346 } else {
347 $val = "&nbsp;";
348 }
349
350 $this->tpl->setCurrentBlock("user_field");
351 $this->tpl->setVariable("VAL_UF", $val);
352 $this->tpl->parseCurrentBlock();
353 }
354
355 if ($data["privacy_conflict"]) {
356 $this->tpl->setCurrentBlock("permission_bl");
357 $this->tpl->setVariable("TXT_NO_PERMISSION", $lng->txt("status_no_permission"));
358 $this->tpl->parseCurrentBlock();
359 }
360
361 if ($data["title"] == "") {
362 $data["title"] = "--" . $lng->txt("none") . "--";
363 }
364 $this->tpl->setVariable("ICON", ilObject::_getIcon("", "tiny", $data["type"]));
365 $this->tpl->setVariable("ICON_ALT", $lng->txt($data["type"]));
366
367 if (in_array($data['type'], array('fold', 'grp')) && $data['obj_id'] != $this->obj_id) {
368 if ($data['type'] == 'fold') {
369 $object_gui = 'ilobjfoldergui';
370 } else {
371 $object_gui = 'ilobjgroupgui';
372 }
373 $this->tpl->setCurrentBlock('title_linked');
374
375 // link structure gets too complicated
376 if ($_GET["baseClass"] != "ilDashboardGUI" && $_GET["baseClass"] != "ilAdministrationGUI") {
377 $old = $ilCtrl->getParameterArrayByClass('illplistofobjectsgui');
378 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $data["ref_id"]);
379 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $data["ref_id"]);
380 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $this->user_id);
381 $url = $ilCtrl->getLinkTargetByClass(array('ilrepositorygui', $object_gui, 'illearningprogressgui', 'illplistofobjectsgui'), 'userdetails');
382 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $old["ref_id"]);
383 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $old["details_id"]);
384 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $old["user_id"]);
385 } else {
386 $url = "#";
387 }
388
389 $this->tpl->setVariable("URL_TITLE", $url);
390 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
391 $this->tpl->parseCurrentBlock();
392 } else {
393 $this->tpl->setCurrentBlock('title_plain');
394 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
395 $this->tpl->parseCurrentBlock();
396 }
397
398 // #16453 / #17163
399 if ($data['ref_id']) {
400 include_once './Services/Tree/classes/class.ilPathGUI.php';
401 $path = new ilPathGUI();
402 $path = $path->getPath($this->ref_id, $data['ref_id']);
403 if ($path) {
404 $this->tpl->setVariable('COLL_PATH', $this->lng->txt('path') . ': ' . $path);
405 }
406 }
407
408 // #13807 / #17069
409 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
410 if ($data["ref_id"] &&
411 ilLearningProgressAccess::checkPermission('edit_learning_progress', $data['ref_id'])) {
412 if (!in_array($data["type"], array("sco", "lobj")) && !$this->getPrintMode()) {
413 $this->tpl->setCurrentBlock("item_command");
414 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", $data["ref_id"]);
415 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", 'edituser'));
416 $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
417 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", "");
418 $this->tpl->parseCurrentBlock();
419 }
420 }
421 }
422
423 protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
424 {
425 $a_excel->setCell($a_row, 0, $this->lng->txt("type"));
426 $a_excel->setCell($a_row, 1, $this->lng->txt("title"));
427
428 $labels = $this->getSelectableColumns();
429 $cnt = 2;
430 foreach ($this->getSelectedColumns() as $c) {
431 $a_excel->setCell($a_row, $cnt++, $labels[$c]["txt"]);
432 }
433
434 $a_excel->setBold("A" . $a_row . ":" . $a_excel->getColumnCoord($cnt - 1) . $a_row);
435 }
436
437 protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
438 {
439 $a_excel->setCell($a_row, 0, $this->lng->txt($a_set["type"]));
440 $a_excel->setCell($a_row, 1, $a_set["title"]);
441
442 $cnt = 2;
443 foreach ($this->getSelectedColumns() as $c) {
444 if ($c != 'status') {
445 $val = $this->parseValue($c, $a_set[$c], $this->type);
446 } else {
447 $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
448 }
449 $a_excel->setCell($a_row, $cnt++, $val);
450 }
451 }
452
453 protected function fillHeaderCSV($a_csv)
454 {
455 $a_csv->addColumn($this->lng->txt("type"));
456 $a_csv->addColumn($this->lng->txt("title"));
457
458 $labels = $this->getSelectableColumns();
459 foreach ($this->getSelectedColumns() as $c) {
460 $a_csv->addColumn($labels[$c]["txt"]);
461 }
462
463 $a_csv->addRow();
464 }
465
466 protected function fillRowCSV($a_csv, $a_set)
467 {
468 $a_csv->addColumn($this->lng->txt($a_set["type"]));
469 $a_csv->addColumn($a_set["title"]);
470
471 foreach ($this->getSelectedColumns() as $c) {
472 if ($c != 'status') {
473 $val = $this->parseValue($c, $a_set[$c], $this->type);
474 } else {
475 $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
476 }
477 $a_csv->addColumn($val);
478 }
479
480 $a_csv->addRow();
481 }
482}
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
const IL_CAL_DATETIME
static secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
@classDescription Date and time handling
Class for single dates.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
setBold($a_coords)
Set cell(s) to bold.
getColumnCoord($a_col)
Get column "name" from number.
static getInstance(int $variant=ilLPStatusIcons::ICON_VARIANT_DEFAULT, ?\ILIAS\UI\Renderer $renderer=null, ?\ILIAS\UI\Factory $factory=null)
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
static _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.
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.
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.
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.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
fillHeaderExcel(ilExcel $a_excel, &$a_row)
Excel Version of Fill Header.
__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.
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Excel Version of Fill Row.
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
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)
$c
Definition: cli.php:37
filter()
Definition: filter.php:2
global $DIC
Definition: goto.php:24
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$url
$cols
Definition: xhr_table.php:11