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 
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  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 
156  $this->determineOffsetAndOrder();
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";
168  $privacy = ilPrivacySettings::_getInstance();
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";
178  $privacy = ilPrivacySettings::_getInstance();
179  if($privacy->groupConfirmationRequired())
180  {
181  $check_agreement = $this->in_group;
182  }
183  }
184 
186  $this->ref_id,
190  ilUtil::stripSlashes($this->getLimit()),
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,
205  ilUtil::stripSlashes($this->getLimit()),
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 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.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
setPrintMode($a_value=false)
Toogle print mode.
setShowTemplates($a_value)
Toggle templates.
const LP_STATUS_NOT_ATTEMPTED
setExternalSegmentation($a_val)
Set external segmentation.
resetOffset($a_in_determination=false)
Reset offset.
const LP_STATUS_IN_PROGRESS_NUM
parseTitle($a_obj_id, $action, $a_user_id=false)
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
__construct($a_parent_obj, $a_parent_cmd, $a_obj_id, $a_ref_id, $a_print_view=false)
Constructor.
Class for single dates.
TableGUI class for learning progress.
if(!is_array($argv)) $options
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, ...
Class Mail this class handles base functions for mail handling.
const FILTER_DURATION_RANGE
static _lookupObjId($a_id)
_getStatusText($a_status, $a_lng=null)
Get status alt text.
addMultiCommand($a_cmd, $a_text)
Add Command button.
getSelectedColumns()
Get selected columns.
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.
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
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.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
static supportsSpentSeconds($a_obj_type)
global $ilUser
Definition: imgupload.php:15
global $lng
Definition: privfeed.php:40
showTimingsWarning($a_ref_id, $a_user_id)
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
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.
const LP_STATUS_FAILED_NUM