ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilTrObjectUsersPropsTableGUI.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
24{
25 protected $user_fields; // array
26 protected $filter; // array
27 protected $in_course; // int
28 protected $in_group; // int
29 protected $has_edit; // bool
30 protected $has_collection; // bool
31 protected $has_multi; // bool
32
36 function __construct($a_parent_obj, $a_parent_cmd, $a_obj_id, $a_ref_id, $a_print_view = false)
37 {
38 global $ilCtrl, $ilUser, $tree, $rbacsystem;
39
40 $this->setId("troup");
41 $this->obj_id = $a_obj_id;
42 $this->ref_id = $a_ref_id;
43 $this->type = ilObject::_lookupType($a_obj_id);
44
45 $this->in_group = $tree->checkForParentType($this->ref_id, "grp");
46 if($this->in_group)
47 {
48 $this->in_group = ilObject::_lookupObjId($this->in_group);
49 }
50 else
51 {
52 $this->in_course = $tree->checkForParentType($this->ref_id, "crs");
53 if($this->in_course)
54 {
55 $this->in_course = ilObject::_lookupObjId($this->in_course);
56 }
57 }
58
59 parent::__construct($a_parent_obj, $a_parent_cmd);
60
61 $this->parseTitle($a_obj_id, "trac_participants");
62
63 if($a_print_view)
64 {
65 $this->setPrintMode(true);
66 }
67
68 if(!$this->getPrintMode())
69 {
70 // see ilObjCourseGUI::addMailToMemberButton()
71 include_once "Services/Mail/classes/class.ilMail.php";
72 $mail = new ilMail($ilUser->getId());
73 if($rbacsystem->checkAccess("internal_mail", $mail->getMailObjectReferenceId()))
74 {
75 $this->addMultiCommand("mailselectedusers", $this->lng->txt("send_mail"));
76 $this->addColumn("", "", 1);
77 $this->has_multi = true;
78 }
79 }
80
81 $labels = $this->getSelectableColumns();
82 foreach ($this->getSelectedColumns() as $c)
83 {
84 $first = $c;
85
86 // list cannot be sorted by udf fields (separate query)
87 // because of pagination only core fields can be sorted
88 $sort_id = (substr($c, 0, 4) == "udf_") ? "" : $c;
89
90 $this->addColumn($labels[$c]["txt"], $sort_id);
91 }
92
93 if(!$this->getPrintMode())
94 {
95 $this->addColumn($this->lng->txt("actions"), "");
96 }
97 $this->setSelectAllCheckbox('uid');
98 $this->setExternalSorting(true);
99 $this->setExternalSegmentation(true);
100 $this->setEnableHeader(true);
101 $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
102 $this->setRowTemplate("tpl.object_users_props_row.html", "Services/Tracking");
103 $this->setEnableTitle(true);
104 $this->setShowTemplates(true);
105 $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
106
107 if($first)
108 {
109 $this->setDefaultOrderField($first);
110 $this->setDefaultOrderDirection("asc");
111 }
112
113 $this->initFilter();
114
115 $this->getItems();
116
117 // #13807
118 include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
119 $this->has_edit = ilLearningProgressAccess::checkPermission('edit_learning_progress', $this->ref_id);
120
121 /* currently not active, needs to be revised
122 include_once "Services/Object/classes/class.ilObjectLP.php";
123 include_once "Services/Tracking/classes/collection/class.ilLPCollection.php";
124 $objlp = ilObjectLP::getInstance($this->obj_id);
125 $this->has_collection = in_array($objlp->getCurrentMode(), ilLPCollection::getCollectionModes());
126 */
127 }
128
136 {
137 if($this->selectable_columns)
138 {
140 }
141
142 $cols = $this->getSelectableUserColumns($this->in_course, $this->in_group);
143 $this->user_fields = $cols[1];
144 $this->selectable_columns = $cols[0];
145
147 }
148
152 function getItems()
153 {
154 global $lng;
155
157
158 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
159
160 $additional_fields = $this->getSelectedColumns();
161
162 // only if object is [part of] course/group
163 $check_agreement = false;
164 if($this->in_course)
165 {
166 // privacy (if course agreement is activated)
167 include_once "Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
169 if($privacy->courseConfirmationRequired())
170 {
171 $check_agreement = $this->in_course;
172 }
173 }
174 else if($this->in_group)
175 {
176 // privacy (if group agreement is activated)
177 include_once "Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
179 if($privacy->groupConfirmationRequired())
180 {
181 $check_agreement = $this->in_group;
182 }
183 }
184
186 $this->ref_id,
191 $this->getCurrentFilter(),
192 $additional_fields,
193 $check_agreement,
194 $this->user_fields
195 );
196
197 if (count($tr_data["set"]) == 0 && $this->getOffset() > 0)
198 {
199 $this->resetOffset();
201 $this->ref_id,
206 $this->getCurrentFilter(),
207 $additional_fields,
208 $check_agreement,
209 $this->user_fields
210 );
211 }
212
213 $this->setMaxCount($tr_data["cnt"]);
214 $this->setData($tr_data["set"]);
215 }
216
217
221 function initFilter()
222 {
223 global $lng;
224
225 foreach($this->getSelectableColumns() as $column => $meta)
226 {
227 // no udf!
228 switch($column)
229 {
230 case "firstname":
231 case "lastname":
232 case "mark":
233 case "u_comment":
234 case "institution":
235 case "department":
236 case "title":
237 case "street":
238 case "zipcode":
239 case "city":
240 case "country":
241 case "email":
242 case "matriculation":
243 case "login":
244 if($column != "mark" ||
245 ilObjectLP::supportsMark($this->type))
246 {
247 $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_TEXT, true, $meta["txt"]);
248 $this->filter[$column] = $item->getValue();
249 }
250 break;
251
252 case "first_access":
253 case "last_access":
254 case "create_date":
255 case 'status_changed':
256 $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_DATETIME_RANGE, true, $meta["txt"]);
257 $this->filter[$column] = $item->getDate();
258 break;
259
260 case "birthday":
261 $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_DATE_RANGE, true, $meta["txt"]);
262 $this->filter[$column] = $item->getDate();
263 break;
264
265 case "read_count":
266 case "percentage":
267 $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_NUMBER_RANGE, true, $meta["txt"]);
268 $this->filter[$column] = $item->getValue();
269 break;
270
271 case "gender":
272 $item = $this->addFilterItemByMetaType("gender", ilTable2GUI::FILTER_SELECT, true, $meta["txt"]);
273 $item->setOptions(array("" => $lng->txt("trac_all"), "m" => $lng->txt("gender_m"), "f" => $lng->txt("gender_f")));
274 $this->filter["gender"] = $item->getValue();
275 break;
276
277 case "sel_country":
278 $item = $this->addFilterItemByMetaType("sel_country", ilTable2GUI::FILTER_SELECT, true, $meta["txt"]);
279
280 $options = array();
281 include_once("./Services/Utilities/classes/class.ilCountry.php");
282 foreach (ilCountry::getCountryCodes() as $c)
283 {
284 $options[$c] = $lng->txt("meta_c_".$c);
285 }
286 asort($options);
287 $item->setOptions(array("" => $lng->txt("trac_all"))+$options);
288
289 $this->filter["sel_country"] = $item->getValue();
290 break;
291
292 case "status":
293 include_once "Services/Tracking/classes/class.ilLPStatus.php";
294 $item = $this->addFilterItemByMetaType("status", ilTable2GUI::FILTER_SELECT, true, $meta["txt"]);
295 $item->setOptions(array("" => $lng->txt("trac_all"),
300 $this->filter["status"] = $item->getValue();
301 if($this->filter["status"])
302 {
303 $this->filter["status"]--;
304 }
305 break;
306
307 case "language":
308 $item = $this->addFilterItemByMetaType("language", ilTable2GUI::FILTER_LANGUAGE, true);
309 $this->filter["language"] = $item->getValue();
310 break;
311
312 case "spent_seconds":
313 if(ilObjectLP::supportsSpentSeconds($this->type))
314 {
315 $item = $this->addFilterItemByMetaType("spent_seconds", ilTable2GUI::FILTER_DURATION_RANGE, true, $meta["txt"]);
316 $this->filter["spent_seconds"]["from"] = $item->getCombinationItem("from")->getValueInSeconds();
317 $this->filter["spent_seconds"]["to"] = $item->getCombinationItem("to")->getValueInSeconds();
318 }
319 break;
320 }
321 }
322 }
323
327 protected function fillRow($data)
328 {
329 global $ilCtrl, $lng, $objDefinition;
330
331 if($this->has_multi)
332 {
333 $this->tpl->setVariable("USER_ID", $data["usr_id"]);
334 }
335
336 foreach ($this->getSelectedColumns() as $c)
337 {
338 if(!(bool)$data["privacy_conflict"])
339 {
340 if($c == 'status' && $data[$c] != ilLPStatus::LP_STATUS_COMPLETED_NUM)
341 {
342 $timing = $this->showTimingsWarning($this->ref_id, $data["usr_id"]);
343 if($timing)
344 {
345 if($timing !== true)
346 {
347 $timing = ": ".ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
348 }
349 else
350 {
351 $timing = "";
352 }
353 $this->tpl->setCurrentBlock('warning_img');
354 $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
355 $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed').$timing);
356 $this->tpl->parseCurrentBlock();
357 }
358 }
359
360 // #7694
361 if($c == 'login' && !$data["active"])
362 {
363 $this->tpl->setCurrentBlock('inactive_bl');
364 $this->tpl->setVariable('TXT_INACTIVE', $lng->txt("inactive"));
365 $this->tpl->parseCurrentBlock();
366 }
367
368 $val = $this->parseValue($c, $data[$c], $this->type);
369 }
370 else
371 {
372 if($c == 'login')
373 {
374 $this->tpl->setCurrentBlock('inactive_bl');
375 $this->tpl->setVariable('TXT_INACTIVE', $lng->txt("status_no_permission"));
376 $this->tpl->parseCurrentBlock();
377 }
378
379 $val = "&nbsp;";
380 }
381
382 $this->tpl->setCurrentBlock("user_field");
383 $this->tpl->setVariable("VAL_UF", $val);
384 $this->tpl->parseCurrentBlock();
385 }
386
387 $ilCtrl->setParameterByClass("illplistofobjectsgui", "user_id", $data["usr_id"]);
388
389 if(!$this->getPrintMode() && !(bool)$data["privacy_conflict"])
390 {
391 // details for containers and collections
392 if($this->has_collection ||
393 $objDefinition->isContainer($this->type))
394 {
395 $this->tpl->setCurrentBlock("item_command");
396 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", "userdetails"));
397 $this->tpl->setVariable("TXT_COMMAND", $lng->txt('details'));
398 $this->tpl->parseCurrentBlock();
399 }
400
401 if($this->has_edit)
402 {
403 $this->tpl->setCurrentBlock("item_command");
404 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", "edituser"));
405 $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
406 $this->tpl->parseCurrentBlock();
407 }
408 }
409
410 $ilCtrl->setParameterByClass("illplistofobjectsgui", 'user_id', '');
411 }
412
413 protected function fillHeaderExcel($worksheet, &$a_row)
414 {
415 $labels = $this->getSelectableColumns();
416 $cnt = 0;
417 foreach ($this->getSelectedColumns() as $c)
418 {
419 $worksheet->write($a_row, $cnt, $labels[$c]["txt"]);
420 $cnt++;
421 }
422 }
423
424 protected function fillRowExcel($worksheet, &$a_row, $a_set)
425 {
426 $cnt = 0;
427 foreach ($this->getSelectedColumns() as $c)
428 {
429 if($c != 'status')
430 {
431 $val = $this->parseValue($c, $a_set[$c], $this->type);
432 }
433 else
434 {
435 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
436 }
437 $worksheet->write($a_row, $cnt, $val);
438 $cnt++;
439 }
440 }
441
442 protected function fillHeaderCSV($a_csv)
443 {
444 $labels = $this->getSelectableColumns();
445 foreach ($this->getSelectedColumns() as $c)
446 {
447 $a_csv->addColumn($labels[$c]["txt"]);
448 }
449
450 $a_csv->addRow();
451 }
452
453 protected function fillRowCSV($a_csv, $a_set)
454 {
455 foreach ($this->getSelectedColumns() as $c)
456 {
457 if($c != 'status')
458 {
459 $val = $this->parseValue($c, $a_set[$c], $this->type);
460 }
461 else
462 {
463 $val = ilLearningProgressBaseGUI::_getStatusText((int)$a_set[$c]);
464 }
465 $a_csv->addColumn($val);
466 }
467
468 $a_csv->addRow();
469 }
470}
471?>
const IL_CAL_UNIX
static getCountryCodes()
Get country codes (DIN EN 3166-1)
Class for single dates.
const LP_STATUS_COMPLETED_NUM
const LP_STATUS_COMPLETED
const LP_STATUS_FAILED
const LP_STATUS_IN_PROGRESS_NUM
const LP_STATUS_NOT_ATTEMPTED_NUM
const LP_STATUS_FAILED_NUM
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
TableGUI class for learning progress.
parseValue($id, $value, $type)
getCurrentFilter($as_query=false)
showTimingsWarning($a_ref_id, $a_user_id)
getSelectableUserColumns($a_in_course=false, $a_in_group=false)
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
_getStatusText($a_status, $a_lng=null)
Get status alt text.
Class Mail this class handles base functions for mail handling.
static supportsMark($a_obj_type)
static supportsSpentSeconds($a_obj_type)
static _lookupObjId($a_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
static _getInstance()
Get instance of ilPrivacySettings.
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.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
getPrintMode()
Get print mode.
getOffset()
Get offset.
const FILTER_DURATION_RANGE
setExternalSegmentation($a_val)
Set external segmentation.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
const FILTER_NUMBER_RANGE
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setShowTemplates($a_value)
Toggle templates.
const FILTER_DATETIME_RANGE
getOrderDirection()
Get order direction.
setMaxCount($a_max_count)
set max.
Learning progress table: One object, rows: users, columns: properties Example: A course,...
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
fillHeaderExcel($worksheet, &$a_row)
Excel Version of Fill Header.
fillHeaderCSV($a_csv)
CSV Version of Fill Header.
__construct($a_parent_obj, $a_parent_cmd, $a_obj_id, $a_ref_id, $a_print_view=false)
Constructor.
fillRowExcel($worksheet, &$a_row, $a_set)
Excel Version of Fill Row.
static getUserDataForObject($a_ref_id, $a_order_field="", $a_order_dir="", $a_offset=0, $a_limit=9999, array $a_filters=NULL, array $a_additional_fields=NULL, $check_agreement=false, $privacy_fields=NULL)
Get all user-based tracking data for object.
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
global $lng
Definition: privfeed.php:40
if(!is_array($argv)) $options
global $ilUser
Definition: imgupload.php:15