ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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 $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 $this->setPrintMode(true);
36 }
37
38 $this->addColumn($this->lng->txt("title"), "title");
39
40 foreach ($this->getSelectedColumns() as $c) {
41 $l = $c;
42 if (in_array($l, array("last_access", "first_access", "read_count", "spent_seconds", "mark", "status", "percentage"))) {
43 $l = "trac_" . $l;
44 }
45 if ($l == "u_comment") {
46 $l = "trac_comment";
47 }
48 $this->addColumn($this->lng->txt($l), $c);
49 }
50
51 if (!$this->getPrintMode()) {
52 $this->addColumn($this->lng->txt("actions"), "");
53 }
54
55 $this->setExternalSorting(true);
56 $this->setExternalSegmentation(true);
57 $this->setEnableHeader(true);
58 $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
59 $this->setRowTemplate("tpl.user_objects_props_row.html", "Services/Tracking");
60 $this->setEnableTitle(true);
61 $this->setDefaultOrderField("title");
62 $this->setDefaultOrderDirection("asc");
63 $this->setShowTemplates(true);
64
65 $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
66
67 $this->initFilter();
68
69 $this->getItems();
70 }
71
78 public function getSelectableColumns()
79 {
80 global $lng;
81
82 // default fields
83 $cols = array();
84
85 include_once 'Services/Tracking/classes/class.ilObjUserTracking.php';
86 $tracking = new ilObjUserTracking();
87 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS)) {
88 $cols["first_access"] = array(
89 "txt" => $lng->txt("trac_first_access"),
90 "default" => true);
91 $cols["last_access"] = array(
92 "txt" => $lng->txt("trac_last_access"),
93 "default" => true);
94 }
95 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT)) {
96 $cols["read_count"] = array(
97 "txt" => $lng->txt("trac_read_count"),
98 "default" => true);
99 }
100 if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS)) {
101 $cols["spent_seconds"] = array(
102 "txt" => $lng->txt("trac_spent_seconds"),
103 "default" => true);
104 }
105
106 // #15334 - parent object does not matter, sub-objects may have percentage
107 $cols["percentage"] = array(
108 "txt" => $lng->txt("trac_percentage"),
109 "default" => true);
110
111 $cols["status"] = array(
112 "txt" => $lng->txt("trac_status"),
113 "default" => true);
114 $cols["mark"] = array(
115 "txt" => $lng->txt("trac_mark"),
116 "default" => true);
117 $cols["u_comment"] = array(
118 "txt" => $lng->txt("trac_comment"),
119 "default" => false);
120
121 return $cols;
122 }
123
127 public function getItems()
128 {
129 global $rbacsystem;
130
132
133 $additional_fields = $this->getSelectedColumns();
134
135 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
136
138 $this->user_id,
139 $this->obj_id,
140 $this->ref_id,
145 $this->filter,
146 $additional_fields,
147 $this->filter["view_mode"]
148 );
149
150 if (count($tr_data["set"]) == 0 && $this->getOffset() > 0) {
151 $this->resetOffset();
153 $this->user_id,
154 $this->obj_id,
155 $this->ref_id,
160 $this->filter,
161 $additional_fields,
162 $this->filter["view_mode"]
163 );
164 }
165
166 // #13807
167 foreach ($tr_data["set"] as $idx => $row) {
168 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
169 if ($row["ref_id"] &&
170 !ilLearningProgressAccess::checkPermission('read_learning_progress', $row['ref_id'])) {
171 foreach (array_keys($row) as $col_id) {
172 if (!in_array($col_id, array("type", "obj_id", "ref_id", "title", "sort_title"))) {
173 $tr_data["set"][$idx][$col_id] = null;
174 }
175 }
176 $tr_data["set"][$idx]["privacy_conflict"] = true;
177 }
178 }
179
180 $this->setMaxCount($tr_data["cnt"]);
181
182 if ($this->getOrderField() == "title") {
183 // sort alphabetically, move parent object to 1st position
184 $set = array();
185 $parent = false;
186 foreach ($tr_data["set"] as $idx => $row) {
187 if ($row['obj_id'] == $this->obj_id) {
188 $parent = $row;
189 } elseif (isset($row["sort_title"])) {
190 $set[strtolower($row["sort_title"]) . "__" . $idx] = $row;
191 } else {
192 $set[strtolower($row["title"]) . "__" . $idx] = $row;
193 }
194 }
195 unset($tr_data["set"]);
196 if ($this->getOrderDirection() == "asc") {
197 ksort($set);
198 } else {
199 krsort($set);
200 }
201 $set = array_values($set);
202 if ($parent) {
203 array_unshift($set, $parent);
204 }
205
206 $this->setData($set);
207 } else {
208 $this->setData($tr_data["set"]);
209 }
210 }
211
215 public function initFilter()
216 {
217 global $lng;
218
219 // for scorm and objectives this filter does not make sense / is not implemented
220 include_once './Services/Object/classes/class.ilObjectLP.php';
221 $olp = ilObjectLP::getInstance($this->obj_id);
222 $collection = $olp->getCollectionInstance();
223 if ($collection instanceof ilLPCollectionOfRepositoryObjects) {
224 include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
225 include_once("./Services/Table/interfaces/interface.ilTableFilterItem.php");
226
227 // show collection only/all
228 include_once("./Services/Form/classes/class.ilRadioGroupInputGUI.php");
229 include_once("./Services/Form/classes/class.ilRadioOption.php");
230 $ti = new ilRadioGroupInputGUI($lng->txt("trac_view_mode"), "view_mode");
231 $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_all"), ""));
232 $ti->addOption(new ilRadioOption($lng->txt("trac_view_mode_collection"), "coll"));
233 $this->addFilterItem($ti);
234 $ti->readFromSession();
235 $this->filter["view_mode"] = $ti->getValue();
236 }
237 }
238
242 protected function fillRow($data)
243 {
244 global $ilCtrl, $lng, $rbacsystem;
245
246 if (!$this->isPercentageAvailable($data["obj_id"])) {
247 $data["percentage"] = null;
248 }
249
250 foreach ($this->getSelectedColumns() as $c) {
251 if (!$data["privacy_conflict"]) {
252 $val = (trim($data[$c]) == "")
253 ? " "
254 : $data[$c];
255
256 if ($data[$c] != "" || $c == "status") {
257 switch ($c) {
258 case "first_access":
260 break;
261
262 case "last_access":
264 break;
265
266 case "status":
267 include_once("./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php");
270 $val = ilUtil::img($path, $text);
271
272 if ($data["ref_id"] &&
273 $data["type"] != "lobj" &&
274 $data["type"] != "sco" &&
275 $data["type"] != "st" &&
276 $data["type"] != "mob") {
277 $timing = $this->showTimingsWarning($data["ref_id"], $this->user_id);
278 if ($timing) {
279 if ($timing !== true) {
280 $timing = ": " . ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
281 } else {
282 $timing = "";
283 }
284 $this->tpl->setCurrentBlock('warning_img');
285 $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
286 $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed') . $timing);
287 $this->tpl->parseCurrentBlock();
288 }
289 }
290 break;
291
292 case "spent_seconds":
294 $val = "-";
295 } else {
296 $val = ilDatePresentation::secondsToString($data[$c], ($data[$c] < 3600 ? true : false)); // #14858
297 }
298 break;
299
300 case "percentage":
301 $val = $data[$c] . "%";
302 break;
303
304 }
305 }
306 if ($c == "mark" &&
307 !ilObjectLP::supportsMark($this->type)) {
308 $val = "-";
309 }
310 if ($c == "spent_seconds" &&
311 !ilObjectLP::supportsSpentSeconds($this->type)) {
312 $val = "-";
313 }
314 if ($c == "percentage" &&
315 !$this->isPercentageAvailable($data["obj_id"])) {
316 $val = "-";
317 }
318 } else {
319 $val = "&nbsp;";
320 }
321
322 $this->tpl->setCurrentBlock("user_field");
323 $this->tpl->setVariable("VAL_UF", $val);
324 $this->tpl->parseCurrentBlock();
325 }
326
327 if ($data["privacy_conflict"]) {
328 $this->tpl->setCurrentBlock("permission_bl");
329 $this->tpl->setVariable("TXT_NO_PERMISSION", $lng->txt("status_no_permission"));
330 $this->tpl->parseCurrentBlock();
331 }
332
333 if ($data["title"] == "") {
334 $data["title"] = "--" . $lng->txt("none") . "--";
335 }
336 $this->tpl->setVariable("ICON", ilObject::_getIcon("", "tiny", $data["type"]));
337 $this->tpl->setVariable("ICON_ALT", $lng->txt($data["type"]));
338
339 if (in_array($data['type'], array('fold', 'grp')) && $data['obj_id'] != $this->obj_id) {
340 if ($data['type'] == 'fold') {
341 $object_gui = 'ilobjfoldergui';
342 } else {
343 $object_gui = 'ilobjgroupgui';
344 }
345 $this->tpl->setCurrentBlock('title_linked');
346
347 // link structure gets too complicated
348 if ($_GET["baseClass"] != "ilPersonalDesktopGUI" && $_GET["baseClass"] != "ilAdministrationGUI") {
349 $old = $ilCtrl->getParameterArrayByClass('illplistofobjectsgui');
350 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $data["ref_id"]);
351 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $data["ref_id"]);
352 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $this->user_id);
353 $url = $ilCtrl->getLinkTargetByClass(array('ilrepositorygui', $object_gui, 'illearningprogressgui', 'illplistofobjectsgui'), 'userdetails');
354 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'ref_id', $old["ref_id"]);
355 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'details_id', $old["details_id"]);
356 $ilCtrl->setParameterByClass('illplistofobjectsgui', 'user_id', $old["user_id"]);
357 } else {
358 $url = "#";
359 }
360
361 $this->tpl->setVariable("URL_TITLE", $url);
362 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
363 $this->tpl->parseCurrentBlock();
364 } else {
365 $this->tpl->setCurrentBlock('title_plain');
366 $this->tpl->setVariable("VAL_TITLE", $data["title"]);
367 $this->tpl->parseCurrentBlock();
368 }
369
370 // #16453 / #17163
371 if ($data['ref_id']) {
372 include_once './Services/Tree/classes/class.ilPathGUI.php';
373 $path = new ilPathGUI();
374 $path = $path->getPath($this->ref_id, $data['ref_id']);
375 if ($path) {
376 $this->tpl->setVariable('COLL_PATH', $this->lng->txt('path') . ': ' . $path);
377 }
378 }
379
380 // #13807 / #17069
381 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
382 if ($data["ref_id"] &&
383 ilLearningProgressAccess::checkPermission('edit_learning_progress', $data['ref_id'])) {
384 if (!in_array($data["type"], array("sco", "lobj")) && !$this->getPrintMode()) {
385 $this->tpl->setCurrentBlock("item_command");
386 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", $data["ref_id"]);
387 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", 'edituser'));
388 $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
389 $ilCtrl->setParameterByClass("illplistofobjectsgui", "userdetails_id", "");
390 $this->tpl->parseCurrentBlock();
391 }
392 }
393 }
394
395 protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
396 {
397 $a_excel->setCell($a_row, 0, $this->lng->txt("type"));
398 $a_excel->setCell($a_row, 1, $this->lng->txt("title"));
399
400 $labels = $this->getSelectableColumns();
401 $cnt = 2;
402 foreach ($this->getSelectedColumns() as $c) {
403 $a_excel->setCell($a_row, $cnt++, $labels[$c]["txt"]);
404 }
405
406 $a_excel->setBold("A" . $a_row . ":" . $a_excel->getColumnCoord($cnt-1) . $a_row);
407 }
408
409 protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
410 {
411 $a_excel->setCell($a_row, 0, $this->lng->txt($a_set["type"]));
412 $a_excel->setCell($a_row, 1, $a_set["title"]);
413
414 $cnt = 2;
415 foreach ($this->getSelectedColumns() as $c) {
416 if ($c != 'status') {
417 $val = $this->parseValue($c, $a_set[$c], $this->type);
418 } else {
419 $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
420 }
421 $a_excel->setCell($a_row, $cnt++, $val);
422 }
423 }
424
425 protected function fillHeaderCSV($a_csv)
426 {
427 $a_csv->addColumn($this->lng->txt("type"));
428 $a_csv->addColumn($this->lng->txt("title"));
429
430 $labels = $this->getSelectableColumns();
431 foreach ($this->getSelectedColumns() as $c) {
432 $a_csv->addColumn($labels[$c]["txt"]);
433 }
434
435 $a_csv->addRow();
436 }
437
438 protected function fillRowCSV($a_csv, $a_set)
439 {
440 $a_csv->addColumn($this->lng->txt($a_set["type"]));
441 $a_csv->addColumn($a_set["title"]);
442
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_csv->addColumn($val);
450 }
451
452 $a_csv->addRow();
453 }
454}
global $l
Definition: afr.php:30
$_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)
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)
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.
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="", $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
$url
$old
$text
Definition: errorreport.php:18
$cols
Definition: xhr_table.php:11