ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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 
4 include_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  public 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  $this->in_group = ilObject::_lookupObjId($this->in_group);
48  } else {
49  $this->in_course = $tree->checkForParentType($this->ref_id, "crs");
50  if ($this->in_course) {
51  $this->in_course = ilObject::_lookupObjId($this->in_course);
52  }
53  }
54 
55  parent::__construct($a_parent_obj, $a_parent_cmd);
56 
57  $this->parseTitle($a_obj_id, "trac_participants");
58 
59  if ($a_print_view) {
60  $this->setPrintMode(true);
61  }
62 
63  if (!$this->getPrintMode()) {
64  // see ilObjCourseGUI::addMailToMemberButton()
65  include_once "Services/Mail/classes/class.ilMail.php";
66  $mail = new ilMail($ilUser->getId());
67  if ($rbacsystem->checkAccess("internal_mail", $mail->getMailObjectReferenceId())) {
68  $this->addMultiCommand("mailselectedusers", $this->lng->txt("send_mail"));
69  }
70  $this->lng->loadLanguageModule('user');
71  $this->addMultiCommand(
72  'addToClipboard',
73  $this->lng->txt('clipboard_add_btn')
74  );
75  $this->addColumn("", "", 1);
76  $this->has_multi = true;
77  }
78 
79  $labels = $this->getSelectableColumns();
80  foreach ($this->getSelectedColumns() as $c) {
81  $first = $c;
82 
83  // list cannot be sorted by udf fields (separate query)
84  // because of pagination only core fields can be sorted
85  $sort_id = (substr($c, 0, 4) == "udf_") ? "" : $c;
86 
87  $this->addColumn($labels[$c]["txt"], $sort_id);
88  }
89 
90  if (!$this->getPrintMode()) {
91  $this->addColumn($this->lng->txt("actions"), "");
92  }
93  $this->setSelectAllCheckbox('uid');
94  $this->setExternalSorting(true);
95  $this->setExternalSegmentation(true);
96  $this->setEnableHeader(true);
97  $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
98  $this->setRowTemplate("tpl.object_users_props_row.html", "Services/Tracking");
99  $this->setEnableTitle(true);
100  $this->setShowTemplates(true);
101  $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
102 
103  if ($first) {
104  $this->setDefaultOrderField($first);
105  $this->setDefaultOrderDirection("asc");
106  }
107 
108  $this->initFilter();
109 
110  $this->getItems();
111 
112  // #13807
113  include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
114  $this->has_edit = ilLearningProgressAccess::checkPermission('edit_learning_progress', $this->ref_id);
115 
116  /* currently not active, needs to be revised
117  include_once "Services/Object/classes/class.ilObjectLP.php";
118  include_once "Services/Tracking/classes/collection/class.ilLPCollection.php";
119  $objlp = ilObjectLP::getInstance($this->obj_id);
120  $this->has_collection = in_array($objlp->getCurrentMode(), ilLPCollection::getCollectionModes());
121  */
122  }
123 
130  public function getSelectableColumns()
131  {
132  if ($this->selectable_columns) {
134  }
135 
136  $cols = $this->getSelectableUserColumns($this->in_course, $this->in_group);
137  $this->user_fields = $cols[1];
138  $this->selectable_columns = $cols[0];
139 
141  }
142 
146  public function getItems()
147  {
148  global $lng;
149 
150  $this->determineOffsetAndOrder();
151 
152  include_once("./Services/Tracking/classes/class.ilTrQuery.php");
153 
154  $additional_fields = $this->getSelectedColumns();
155 
156  // only if object is [part of] course/group
157  $check_agreement = false;
158  if ($this->in_course) {
159  // privacy (if course agreement is activated)
160  include_once "Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
161  $privacy = ilPrivacySettings::_getInstance();
162  if ($privacy->courseConfirmationRequired()) {
163  $check_agreement = $this->in_course;
164  }
165  } elseif ($this->in_group) {
166  // privacy (if group agreement is activated)
167  include_once "Services/PrivacySecurity/classes/class.ilPrivacySettings.php";
168  $privacy = ilPrivacySettings::_getInstance();
169  if ($privacy->groupConfirmationRequired()) {
170  $check_agreement = $this->in_group;
171  }
172  }
173 
175  $this->ref_id,
179  ilUtil::stripSlashes($this->getLimit()),
180  $this->getCurrentFilter(),
181  $additional_fields,
182  $check_agreement,
183  $this->user_fields
184  );
185 
186  if (count($tr_data["set"]) == 0 && $this->getOffset() > 0) {
187  $this->resetOffset();
189  $this->ref_id,
193  ilUtil::stripSlashes($this->getLimit()),
194  $this->getCurrentFilter(),
195  $additional_fields,
196  $check_agreement,
197  $this->user_fields
198  );
199  }
200 
201  $this->setMaxCount($tr_data["cnt"]);
202  $this->setData($tr_data["set"]);
203  }
204 
205 
209  public function initFilter()
210  {
211  global $lng;
212 
213  foreach ($this->getSelectableColumns() as $column => $meta) {
214  // no udf!
215  switch ($column) {
216  case "firstname":
217  case "lastname":
218  case "mark":
219  case "u_comment":
220  case "institution":
221  case "department":
222  case "title":
223  case "street":
224  case "zipcode":
225  case "city":
226  case "country":
227  case "email":
228  case "matriculation":
229  case "login":
230  if ($column != "mark" ||
231  ilObjectLP::supportsMark($this->type)) {
232  $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_TEXT, true, $meta["txt"]);
233  $this->filter[$column] = $item->getValue();
234  }
235  break;
236 
237  case "first_access":
238  case "last_access":
239  case "create_date":
240  case 'status_changed':
241  $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_DATETIME_RANGE, true, $meta["txt"]);
242  $this->filter[$column] = $item->getDate();
243  break;
244 
245  case "birthday":
246  $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_DATE_RANGE, true, $meta["txt"]);
247  $this->filter[$column] = $item->getDate();
248  break;
249 
250  case "read_count":
251  case "percentage":
252  $item = $this->addFilterItemByMetaType($column, ilTable2GUI::FILTER_NUMBER_RANGE, true, $meta["txt"]);
253  $this->filter[$column] = $item->getValue();
254  break;
255 
256  case "gender":
257  $item = $this->addFilterItemByMetaType("gender", ilTable2GUI::FILTER_SELECT, true, $meta["txt"]);
258  $item->setOptions(array(
259  "" => $lng->txt("trac_all"),
260  "n" => $lng->txt("gender_n"),
261  "m" => $lng->txt("gender_m"),
262  "f" => $lng->txt("gender_f"),
263  ));
264  $this->filter["gender"] = $item->getValue();
265  break;
266 
267  case "sel_country":
268  $item = $this->addFilterItemByMetaType("sel_country", ilTable2GUI::FILTER_SELECT, true, $meta["txt"]);
269 
270  $options = array();
271  include_once("./Services/Utilities/classes/class.ilCountry.php");
272  foreach (ilCountry::getCountryCodes() as $c) {
273  $options[$c] = $lng->txt("meta_c_" . $c);
274  }
275  asort($options);
276  $item->setOptions(array("" => $lng->txt("trac_all"))+$options);
277 
278  $this->filter["sel_country"] = $item->getValue();
279  break;
280 
281  case "status":
282  include_once "Services/Tracking/classes/class.ilLPStatus.php";
283  $item = $this->addFilterItemByMetaType("status", ilTable2GUI::FILTER_SELECT, true, $meta["txt"]);
284  $item->setOptions(array("" => $lng->txt("trac_all"),
289  $this->filter["status"] = $item->getValue();
290  if (is_numeric($this->filter["status"])) {
291  $this->filter["status"]--;
292  }
293  break;
294 
295  case "language":
296  $item = $this->addFilterItemByMetaType("language", ilTable2GUI::FILTER_LANGUAGE, true);
297  $this->filter["language"] = $item->getValue();
298  break;
299 
300  case "spent_seconds":
301  if (ilObjectLP::supportsSpentSeconds($this->type)) {
302  $item = $this->addFilterItemByMetaType("spent_seconds", ilTable2GUI::FILTER_DURATION_RANGE, true, $meta["txt"]);
303  $this->filter["spent_seconds"]["from"] = $item->getCombinationItem("from")->getValueInSeconds();
304  $this->filter["spent_seconds"]["to"] = $item->getCombinationItem("to")->getValueInSeconds();
305  }
306  break;
307  }
308  }
309  }
310 
314  protected function fillRow($data)
315  {
316  global $ilCtrl, $lng, $objDefinition;
317 
318  if ($this->has_multi) {
319  $this->tpl->setVariable("USER_ID", $data["usr_id"]);
320  }
321 
322  foreach ($this->getSelectedColumns() as $c) {
323  if (!(bool) $data["privacy_conflict"]) {
324  if ($c == 'status' && $data[$c] != ilLPStatus::LP_STATUS_COMPLETED_NUM) {
325  $timing = $this->showTimingsWarning($this->ref_id, $data["usr_id"]);
326  if ($timing) {
327  if ($timing !== true) {
328  $timing = ": " . ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
329  } else {
330  $timing = "";
331  }
332  $this->tpl->setCurrentBlock('warning_img');
333  $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
334  $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed') . $timing);
335  $this->tpl->parseCurrentBlock();
336  }
337  }
338 
339  // #7694
340  if ($c == 'login' && !$data["active"]) {
341  $this->tpl->setCurrentBlock('inactive_bl');
342  $this->tpl->setVariable('TXT_INACTIVE', $lng->txt("inactive"));
343  $this->tpl->parseCurrentBlock();
344  }
345 
346  $val = $this->parseValue($c, $data[$c], $this->type);
347  } else {
348  if ($c == 'login') {
349  $this->tpl->setCurrentBlock('inactive_bl');
350  $this->tpl->setVariable('TXT_INACTIVE', $lng->txt("status_no_permission"));
351  $this->tpl->parseCurrentBlock();
352  }
353 
354  $val = "&nbsp;";
355  }
356 
357  $this->tpl->setCurrentBlock("user_field");
358  $this->tpl->setVariable("VAL_UF", $val);
359  $this->tpl->parseCurrentBlock();
360  }
361 
362  $ilCtrl->setParameterByClass("illplistofobjectsgui", "user_id", $data["usr_id"]);
363 
364  if (!$this->getPrintMode() && !(bool) $data["privacy_conflict"]) {
365  // details for containers and collections
366  if ($this->has_collection ||
367  $objDefinition->isContainer($this->type)) {
368  $this->tpl->setCurrentBlock("item_command");
369  $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", "userdetails"));
370  $this->tpl->setVariable("TXT_COMMAND", $lng->txt('details'));
371  $this->tpl->parseCurrentBlock();
372  }
373 
374  if ($this->has_edit) {
375  $this->tpl->setCurrentBlock("item_command");
376  $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass("illplistofobjectsgui", "edituser"));
377  $this->tpl->setVariable("TXT_COMMAND", $lng->txt('edit'));
378  $this->tpl->parseCurrentBlock();
379  }
380  }
381 
382  $ilCtrl->setParameterByClass("illplistofobjectsgui", 'user_id', '');
383  }
384 
385  protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
386  {
387  $labels = $this->getSelectableColumns();
388  $cnt = 0;
389  foreach ($this->getSelectedColumns() as $c) {
390  $a_excel->setCell($a_row, $cnt++, $labels[$c]["txt"]);
391  }
392 
393  $a_excel->setBold("A" . $a_row . ":" . $a_excel->getColumnCoord($cnt-1) . $a_row);
394  }
395 
396  protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
397  {
398  $cnt = 0;
399  foreach ($this->getSelectedColumns() as $c) {
400  if ($c != 'status') {
401  $val = $this->parseValue($c, $a_set[$c], $this->type);
402  } else {
403  $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
404  }
405  $a_excel->setCell($a_row, $cnt++, $val);
406  }
407  }
408 
409  protected function fillHeaderCSV($a_csv)
410  {
411  $labels = $this->getSelectableColumns();
412  foreach ($this->getSelectedColumns() as $c) {
413  $a_csv->addColumn($labels[$c]["txt"]);
414  }
415 
416  $a_csv->addRow();
417  }
418 
419  protected function fillRowCSV($a_csv, $a_set)
420  {
421  foreach ($this->getSelectedColumns() as $c) {
422  if ($c != 'status') {
423  $val = $this->parseValue($c, $a_set[$c], $this->type);
424  } else {
425  $val = ilLearningProgressBaseGUI::_getStatusText((int) $a_set[$c]);
426  }
427  $a_csv->addColumn($val);
428  }
429 
430  $a_csv->addRow();
431  }
432 }
const LP_STATUS_COMPLETED_NUM
getSelectableUserColumns($a_in_course=false, $a_in_group=false)
setExternalSorting($a_val)
Set external sorting.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setExportFormats(array $formats)
Set available export formats.
setPrintMode($a_value=false)
Toogle print mode.
setShowTemplates($a_value)
Toggle templates.
const LP_STATUS_NOT_ATTEMPTED
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
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.
setExternalSegmentation($a_val)
Set external segmentation.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date public.
resetOffset($a_in_determination=false)
Reset offset.
const LP_STATUS_IN_PROGRESS_NUM
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=null)
Add filter by standard type.
parseTitle($a_obj_id, $action, $a_user_id=false)
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
const IL_CAL_UNIX
parseValue($id, $value, $type)
getOrderDirection()
Get order direction.
static checkPermission($a_permission, $a_ref_id, $a_user_id=null)
wrapper for rbac access checks
const FILTER_NUMBER_RANGE
setId($a_val)
Set id.
const LP_STATUS_IN_PROGRESS
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
const LP_STATUS_FAILED
const FILTER_DATETIME_RANGE
$column
Definition: 39dropdown.php:62
__construct($a_parent_obj, $a_parent_cmd, $a_obj_id, $a_ref_id, $a_print_view=false)
Constructor.
Class for single dates.
getColumnCoord($a_col)
Get column "name" from number.
TableGUI class for learning progress.
setBold($a_coords)
Set cell(s) to bold.
getOffset()
Get offset.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Learning progress table: One object, rows: users, columns: properties Example: A course, rows: members, columns: name, status, mark, ...
This class handles base functions for mail handling.
const FILTER_DURATION_RANGE
static _lookupObjId($a_id)
addMultiCommand($a_cmd, $a_text)
Add Command button.
$ilUser
Definition: imgupload.php:18
getSelectedColumns()
Get selected columns.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
static supportsMark($a_obj_type)
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
const LP_STATUS_NOT_ATTEMPTED_NUM
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
static supportsSpentSeconds($a_obj_type)
showTimingsWarning($a_ref_id, $a_user_id)
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.
setEnableHeader($a_enableheader)
Set Enable Header.
static getCountryCodes()
Get country codes (DIN EN 3166-1)
getLimit()
Get limit.
static _getInstance()
Get instance of ilPrivacySettings.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
setMaxCount($a_max_count)
set max.
getCurrentFilter($as_query=false)
setEnableTitle($a_enabletitle)
Set Enable Title.
const LP_STATUS_COMPLETED
$cols
Definition: xhr_table.php:11
const LP_STATUS_FAILED_NUM
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20