ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
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 public function __construct($a_parent_obj, $a_parent_cmd, $a_user_id, $a_obj_id, $a_ref_id, $a_print_view = false)
21 {
22 global $DIC;
23
24 $ilCtrl = $DIC['ilCtrl'];
25 $lng = $DIC['lng'];
26 $ilAccess = $DIC['ilAccess'];
27 $lng = $DIC['lng'];
28 $rbacsystem = $DIC['rbacsystem'];
29
30 $this->setId("truop");
31 $this->user_id = $a_user_id;
32 $this->obj_id = $a_obj_id;
33 $this->ref_id = $a_ref_id;
34
35 parent::__construct($a_parent_obj, $a_parent_cmd);
36 $this->setLimit(9999);
37
38 $this->parseTitle($this->obj_id, "details", $this->user_id);
39
40 if ($a_print_view) {
41 $this->setPrintMode(true);
42 }
43
44 $this->addColumn($this->lng->txt("title"), "title");
45
46 foreach ($this->getSelectedColumns() as $c) {
47 $l = $c;
48 if (in_array($l, array("last_access", "first_access", "read_count", "spent_seconds", "mark", "status", "percentage"))) {
49 $l = "trac_" . $l;
50 }
51 if ($l == "u_comment") {
52 $l = "trac_comment";
53 }
54 $this->addColumn($this->lng->txt($l), $c);
55 }
56
57 if (!$this->getPrintMode()) {
58 $this->addColumn($this->lng->txt("actions"), "");
59 }
60
61 $this->setExternalSorting(true);
62 $this->setExternalSegmentation(true);
63 $this->setEnableHeader(true);
64 $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
65 $this->setRowTemplate("tpl.user_objects_props_row.html", "Services/Tracking");
66 $this->setEnableTitle(true);
67 $this->setDefaultOrderField("title");
68 $this->setDefaultOrderDirection("asc");
69 $this->setShowTemplates(true);
70
71 $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
72
73 $this->initFilter();
74
75 $this->getItems();
76 }
77
84 public function getSelectableColumns()
85 {
86 global $DIC;
87
88 $lng = $DIC['lng'];
89
90 // default fields
91 $cols = array();
92
93 include_once 'Services/Tracking/classes/class.ilObjUserTracking.php';
94 $tracking = new ilObjUserTracking();
95 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS)) {
96 $cols["first_access"] = array(
97 "txt" => $lng->txt("trac_first_access"),
98 "default" => true);
99 $cols["last_access"] = array(
100 "txt" => $lng->txt("trac_last_access"),
101 "default" => true);
102 }
103 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT)) {
104 $cols["read_count"] = array(
105 "txt" => $lng->txt("trac_read_count"),
106 "default" => true);
107 }
108 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS)) {
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 public function getItems()
136 {
137 global $DIC;
138
139 $rbacsystem = $DIC['rbacsystem'];
140
142
143 $additional_fields = $this->getSelectedColumns();
144
145 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
146
148 $this->user_id,
149 $this->obj_id,
150 $this->ref_id,
155 $this->filter,
156 $additional_fields,
157 $this->filter["view_mode"]
158 );
159
160 if (count($tr_data["set"]) == 0 && $this->getOffset() > 0) {
161 $this->resetOffset();
163 $this->user_id,
164 $this->obj_id,
165 $this->ref_id,
170 $this->filter,
171 $additional_fields,
172 $this->filter["view_mode"]
173 );
174 }
175
176 // #13807
177 foreach ($tr_data["set"] as $idx => $row) {
178 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
179 if ($row["ref_id"] &&
180 !ilLearningProgressAccess::checkPermission('read_learning_progress', $row['ref_id'])) {
181 foreach (array_keys($row) as $col_id) {
182 if (!in_array($col_id, array("type", "obj_id", "ref_id", "title", "sort_title"))) {
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 // sort alphabetically, move parent object to 1st position
194 $set = array();
195 $parent = false;
196 foreach ($tr_data["set"] as $idx => $row) {
197 if ($row['obj_id'] == $this->obj_id) {
198 $parent = $row;
199 } elseif (isset($row["sort_title"])) {
200 $set[strtolower($row["sort_title"]) . "__" . $idx] = $row;
201 } else {
202 $set[strtolower($row["title"]) . "__" . $idx] = $row;
203 }
204 }
205 unset($tr_data["set"]);
206 if ($this->getOrderDirection() == "asc") {
207 ksort($set);
208 } else {
209 krsort($set);
210 }
211 $set = array_values($set);
212 if ($parent) {
213 array_unshift($set, $parent);
214 }
215
216 $this->setData($set);
217 } else {
218 $this->setData($tr_data["set"]);
219 }
220 }
221
225 public function initFilter()
226 {
227 global $DIC;
228
229 $lng = $DIC['lng'];
230
231 // for scorm and objectives this filter does not make sense / is not implemented
232 include_once './Services/Object/classes/class.ilObjectLP.php';
233 $olp = ilObjectLP::getInstance($this->obj_id);
234 $collection = $olp->getCollectionInstance();
235 if ($collection instanceof ilLPCollectionOfRepositoryObjects) {
236 include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
237 include_once("./Services/Table/interfaces/interface.ilTableFilterItem.php");
238
239 // show collection only/all
240 include_once("./Services/Form/classes/class.ilRadioGroupInputGUI.php");
241 include_once("./Services/Form/classes/class.ilRadioOption.php");
242 $ti = new ilRadioGroupInputGUI($lng->txt("trac_view_mode"), "view_mode");
243 $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_all"), ""));
244 $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_collection"), "coll"));
245 $this->addFilterItem($ti);
246 $ti->readFromSession();
247 $this->filter["view_mode"] = $ti->getValue();
248 }
249 }
250
254 protected function fillRow($data)
255 {
256 global $DIC;
257
258 $ilCtrl = $DIC['ilCtrl'];
259 $lng = $DIC['lng'];
260 $rbacsystem = $DIC['rbacsystem'];
261
262 if (!$this->isPercentageAvailable($data["obj_id"])) {
263 $data["percentage"] = null;
264 }
265
266 foreach ($this->getSelectedColumns() as $c) {
267 if (!$data["privacy_conflict"]) {
268 $val = (trim($data[$c]) == "")
269 ? " "
270 : $data[$c];
271
272 if ($data[$c] != "" || $c == "status") {
273 switch ($c) {
274 case "first_access":
276 break;
277
278 case "last_access":
280 break;
281
282 case "status":
283 include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
286 $val = ilUtil::img($path, $text);
287
288 if ($data["ref_id"] &&
289 $data["type"] != "lobj" &&
290 $data["type"] != "sco" &&
291 $data["type"] != "st" &&
292 $data["type"] != "mob") {
293 $timing = $this->showTimingsWarning($data["ref_id"], $this->user_id);
294 if ($timing) {
295 if ($timing !== true) {
296 $timing = ": " . ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
297 } else {
298 $timing = "";
299 }
300 $this->tpl->setCurrentBlock('warning_img');
301 $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
302 $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed') . $timing);
303 $this->tpl->parseCurrentBlock();
304 }
305 }
306 break;
307
308 case "spent_seconds":
310 $val = "-";
311 } else {
312 $val = ilDatePresentation::secondsToString($data[$c], ($data[$c] < 3600 ? true : false)); // #14858
313 }
314 break;
315
316 case "percentage":
317 $val = $data[$c] . "%";
318 break;
319
320 }
321 }
322 if ($c == "mark" &&
323 !ilObjectLP::supportsMark($this->type)) {
324 $val = "-";
325 }
326 if ($c == "spent_seconds" &&
327 !ilObjectLP::supportsSpentSeconds($this->type)) {
328 $val = "-";
329 }
330 if ($c == "percentage" &&
331 !$this->isPercentageAvailable($data["obj_id"])) {
332 $val = "-";
333 }
334 } else {
335 $val = "&nbsp;";
336 }
337
338 $this->tpl->setCurrentBlock("user_field");
339 $this->tpl->setVariable("VAL_UF", $val);
340 $this->tpl->parseCurrentBlock();
341 }
342
343 if ($data["privacy_conflict"]) {
344 $this->tpl->setCurrentBlock("permission_bl");
345 $this->tpl->setVariable("TXT_NO_PERMISSION", $lng->txt("status_no_permission"));
346 $this->tpl->parseCurrentBlock();
347 }
348
349 if ($data["title"] == "") {
350 $data["title"] = "--" . $lng->txt("none") . "--";
351 }
352 $this->tpl->setVariable("ICON", ilObject::_getIcon("", "tiny", $data["type"]));
353 $this->tpl->setVariable("ICON_ALT", $lng->txt($data["type"]));
354
355 if (in_array($data['type'], array('fold', 'grp')) && $data['obj_id'] != $this->obj_id) {
356 if ($data['type'] == 'fold') {
357 $object_gui = 'ilobjfoldergui';
358 } else {
359 $object_gui = 'ilobjgroupgui';
360 }
361 $this->tpl->setCurrentBlock('title_linked');
362
363 // link structure gets too complicated
364 if ($_GET["baseClass"] != "ilDashboardGUI" && $_GET["baseClass"] != "ilAdministrationGUI") {
365 $old = $ilCtrl->getParameterArrayByClass('illplistofobjectsgui');
366 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $data["ref_id"]);
367 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $data["ref_id"]);
368 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $this->user_id);
369 $url = $ilCtrl->getLinkTargetByClass(array('ilrepositorygui', $object_gui, 'illearningprogressgui', 'illplistofobjectsgui'), 'userdetails');
370 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $old["ref_id"]);
371 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $old["details_id"]);
372 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $old["user_id"]);
373 } else {
374 $url = "#";
375 }
376
377 $this->tpl->setVariable("URL_TITLE", $url);
378 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
379 $this->tpl->parseCurrentBlock();
380 } else {
381 $this->tpl->setCurrentBlock('title_plain');
382 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
383 $this->tpl->parseCurrentBlock();
384 }
385
386 // #16453 / #17163
387 if ($data['ref_id']) {
388 include_once './Services/Tree/classes/class.ilPathGUI.php';
389 $path = new ilPathGUI();
390 $path = $path->getPath($this->ref_id, $data['ref_id']);
391 if ($path) {
392 $this->tpl->setVariable('COLL_PATH', $this->lng->txt('path') . ': ' . $path);
393 }
394 }
395
396 // #13807 / #17069
397 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
398 if ($data["ref_id"] &&
399 ilLearningProgressAccess::checkPermission('edit_learning_progress', $data['ref_id'])) {
400 if (!in_array($data["type"], array("sco", "lobj")) && !$this->getPrintMode()) {
401 $this->tpl->setCurrentBlock("item_command");
402 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", $data["ref_id"]);
403 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", 'edituser'));
404 $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
405 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", "");
406 $this->tpl->parseCurrentBlock();
407 }
408 }
409 }
410
411 protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
412 {
413 $a_excel->setCell($a_row, 0, $this->lng->txt("type"));
414 $a_excel->setCell($a_row, 1, $this->lng->txt("title"));
415
416 $labels = $this->getSelectableColumns();
417 $cnt = 2;
418 foreach ($this->getSelectedColumns() as $c) {
419 $a_excel->setCell($a_row, $cnt++, $labels[$c]["txt"]);
420 }
421
422 $a_excel->setBold("A" . $a_row . ":" . $a_excel->getColumnCoord($cnt - 1) . $a_row);
423 }
424
425 protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
426 {
427 $a_excel->setCell($a_row, 0, $this->lng->txt($a_set["type"]));
428 $a_excel->setCell($a_row, 1, $a_set["title"]);
429
430 $cnt = 2;
431 foreach ($this->getSelectedColumns() as $c) {
432 if ($c != 'status') {
433 $val = $this->parseValue($c, $a_set[$c], $this->type);
434 } else {
435 $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
436 }
437 $a_excel->setCell($a_row, $cnt++, $val);
438 }
439 }
440
441 protected function fillHeaderCSV($a_csv)
442 {
443 $a_csv->addColumn($this->lng->txt("type"));
444 $a_csv->addColumn($this->lng->txt("title"));
445
446 $labels = $this->getSelectableColumns();
447 foreach ($this->getSelectedColumns() as $c) {
448 $a_csv->addColumn($labels[$c]["txt"]);
449 }
450
451 $a_csv->addRow();
452 }
453
454 protected function fillRowCSV($a_csv, $a_set)
455 {
456 $a_csv->addColumn($this->lng->txt($a_set["type"]));
457 $a_csv->addColumn($a_set["title"]);
458
459 foreach ($this->getSelectedColumns() as $c) {
460 if ($c != 'status') {
461 $val = $this->parseValue($c, $a_set[$c], $this->type);
462 } else {
463 $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
464 }
465 $a_csv->addColumn($val);
466 }
467
468 $a_csv->addRow();
469 }
470}
$_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.
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 _getImagePathForStatus($a_status)
Get image path for status.
static supportsMark($a_obj_type)
static supportsSpentSeconds($a_obj_type)
static getInstance($a_obj_id)
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.
Build table list for objects of given user.
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 img($a_src, $a_alt=null, $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)
global $ilCtrl
Definition: ilias.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$url
$DIC
Definition: xapitoken.php:46
$cols
Definition: xhr_table.php:11