ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilGroupParticipantsTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once './Services/Membership/classes/class.ilParticipantsTableGUI.php';
5 include_once './Services/Tracking/classes/class.ilLPStatus.php';
6 
15 {
16  protected $show_learning_progress = false;
17 
18  protected $current_filter = array();
19 
27  public function __construct(
28  $a_parent_obj,
31  ) {
32  global $DIC;
33 
34  $lng = $DIC['lng'];
35  $ilCtrl = $DIC['ilCtrl'];
36 
37  $this->show_learning_progress = $show_learning_progress;
38 
39  $this->lng = $lng;
40  $this->lng->loadLanguageModule('grp');
41  $this->lng->loadLanguageModule('trac');
42  $this->lng->loadLanguageModule('rbac');
43  $this->lng->loadLanguageModule('mmbr');
44 
45  $this->ctrl = $ilCtrl;
46 
47  $this->rep_object = $rep_object;
48 
49  include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
50  $this->privacy = ilPrivacySettings::_getInstance();
51 
52  include_once './Services/Membership/classes/class.ilParticipants.php';
53  $this->participants = ilParticipants::getInstanceByObjId($this->getRepositoryObject()->getId());
54 
55 
56  $this->setPrefix('participants');
57 
58  $this->setId('grp_' . $this->getRepositoryObject()->getId());
59  parent::__construct($a_parent_obj, 'participants');
60 
61  $this->initSettings();
62 
63  $this->setFormName('participants');
64 
65  $this->addColumn('', 'f', "1", true);
66  $this->addColumn($this->lng->txt('name'), 'lastname', '20%');
67 
68  $all_cols = $this->getSelectableColumns();
69  foreach ($this->getSelectedColumns() as $col) {
70  $this->addColumn($all_cols[$col]['txt'], $col);
71  }
72 
73  if ($this->show_learning_progress) {
74  $this->addColumn($this->lng->txt('learning_progress'), 'progress');
75  }
76 
77  if ($this->privacy->enabledGroupAccessTimes()) {
78  $this->addColumn($this->lng->txt('last_access'), 'access_time_unix');
79  }
80  $this->addColumn($this->lng->txt('grp_contact'), 'contact');
81  $this->addColumn($this->lng->txt('grp_notification'), 'notification');
82 
83  $this->addColumn($this->lng->txt(''), 'optional');
84  $this->setDefaultOrderField('roles');
85 
86  $this->setRowTemplate("tpl.show_participants_row.html", "Modules/Group");
87 
88  $this->setShowRowsSelector(true);
89 
90  $this->enable('sort');
91  $this->enable('header');
92  $this->enable('numinfo');
93  $this->enable('select_all');
94 
95  $this->initFilter();
96 
97  $this->addMultiCommand('editParticipants', $this->lng->txt('edit'));
98  $this->addMultiCommand('confirmDeleteParticipants', $this->lng->txt('remove'));
99  $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('mmbr_btn_mail_selected_users'));
100  $this->lng->loadLanguageModule('user');
101  $this->addMultiCommand('addToClipboard', $this->lng->txt('clipboard_add_btn'));
102 
103  $this->setSelectAllCheckbox('participants', true);
104  $this->addCommandButton('updateParticipantsStatus', $this->lng->txt('save'));
105  }
106 
114  public function fillRow($a_set)
115  {
116  global $DIC;
117 
118  $ilUser = $DIC['ilUser'];
119  $ilAccess = $DIC['ilAccess'];
120 
121  $this->tpl->setVariable('VAL_ID', $a_set['usr_id']);
122  $this->tpl->setVariable('VAL_NAME', $a_set['lastname'] . ', ' . $a_set['firstname']);
123  if (!$ilAccess->checkAccessOfUser($a_set['usr_id'], 'read', '', $this->getRepositoryObject()->getRefId()) and
124  is_array($info = $ilAccess->getInfo())) {
125  $this->tpl->setCurrentBlock('access_warning');
126  $this->tpl->setVariable('PARENT_ACCESS', $info[0]['text']);
127  $this->tpl->parseCurrentBlock();
128  }
129 
130  if (!ilObjUser::_lookupActive($a_set['usr_id'])) {
131  $this->tpl->setCurrentBlock('access_warning');
132  $this->tpl->setVariable('PARENT_ACCESS', $this->lng->txt('usr_account_inactive'));
133  $this->tpl->parseCurrentBlock();
134  }
135 
136 
137  foreach ($this->getSelectedColumns() as $field) {
138  switch ($field) {
139  case 'gender':
140  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
141  $this->tpl->setCurrentBlock('custom_fields');
142  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
143  $this->tpl->parseCurrentBlock();
144  break;
145 
146  case 'birthday':
147  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
148  $this->tpl->setCurrentBlock('custom_fields');
149  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
150  $this->tpl->parseCurrentBlock();
151  break;
152 
153  case 'consultation_hour':
154  $this->tpl->setCurrentBlock('custom_fields');
155  $dts = array();
156  foreach ((array) $a_set['consultation_hours'] as $ch) {
158  new ilDateTime($ch['dt'], IL_CAL_UNIX),
159  new ilDateTime($ch['dtend'], IL_CAL_UNIX)
160  );
161  if ($ch['explanation']) {
162  $tmp .= ' ' . $ch['explanation'];
163  }
164  $dts[] = $tmp;
165  }
166  $dt_string = implode('<br />', $dts);
167  $this->tpl->setVariable('VAL_CUST', $dt_string) ;
168  $this->tpl->parseCurrentBlock();
169  break;
170 
171  case 'prtf':
172  $tmp = array();
173  if (is_array($a_set['prtf'])) {
174  foreach ($a_set['prtf'] as $prtf_url => $prtf_txt) {
175  $tmp[] = '<a href="' . $prtf_url . '">' . $prtf_txt . '</a>';
176  }
177  }
178  $this->tpl->setCurrentBlock('custom_fields');
179  $this->tpl->setVariable('VAL_CUST', (string) implode('<br />', $tmp)) ;
180  $this->tpl->parseCurrentBlock();
181  break;
182 
183  case 'odf_last_update':
184  $this->tpl->setCurrentBlock('custom_fields');
185  $this->tpl->setVariable('VAL_CUST', (string) $a_set['odf_info_txt']);
186  $this->tpl->parseCurrentBlock();
187  break;
188 
189  case 'roles':
190  $this->tpl->setCurrentBlock('custom_fields');
191  $this->tpl->setVariable('VAL_CUST', (string) $a_set['roles_label']);
192  $this->tpl->parseCurrentBlock();
193  break;
194 
195  case 'org_units':
196  $this->tpl->setCurrentBlock('custom_fields');
197  include_once './Modules/OrgUnit/classes/PathStorage/class.ilOrgUnitPathStorage.php';
198  $this->tpl->setVariable('VAL_CUST', (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($a_set['usr_id']));
199  $this->tpl->parseCurrentBlock();
200  break;
201 
202  default:
203  $this->tpl->setCurrentBlock('custom_fields');
204  $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
205  $this->tpl->parseCurrentBlock();
206  break;
207  }
208  }
209 
210  if ($this->privacy->enabledGroupAccessTimes()) {
211  $this->tpl->setVariable('VAL_ACCESS', $a_set['access_time']);
212  }
213 
214  if ($this->show_learning_progress) {
215  $this->tpl->setCurrentBlock('lp');
216  switch ($a_set['progress']) {
218  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
219  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/complete.svg'));
220  break;
221 
223  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
224  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/incomplete.svg'));
225  break;
226 
228  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
229  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/not_attempted.svg'));
230  break;
231 
233  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
234  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/failed.svg'));
235  break;
236 
237  }
238  $this->tpl->parseCurrentBlock();
239  }
240 
241  $this->tpl->setVariable('VAL_POSTNAME', 'participants');
242 
243  if ($this->getParticipants()->isAdmin($a_set['usr_id'])) {
244  $this->tpl->setVariable('VAL_CONTACT_ID', $a_set['usr_id']);
245  $this->tpl->setVariable(
246  'VAL_CONTACT_CHECKED',
247  $a_set['contact'] ? 'checked="checked"' : ''
248  );
249  }
250 
251  if (
252  $this->getParticipants()->isAdmin($a_set['usr_id'])
253  ) {
254  $this->tpl->setVariable('VAL_NOTIFICATION_ID', $a_set['usr_id']);
255  $this->tpl->setVariable(
256  'VAL_NOTIFICATION_CHECKED',
257  $a_set['notification'] ? 'checked="checked"' : ''
258  );
259  }
260 
261  $this->showActionLinks($a_set);
262 
263 
264  $this->tpl->setVariable('VAL_LOGIN', $a_set['login']);
265  }
266 
272  public function parse()
273  {
274  $this->determineOffsetAndOrder(true);
275 
276  $part = ilGroupParticipants::_getInstanceByObjId($this->getRepositoryObject()->getId())->getParticipants();
277 
278  $part = $GLOBALS['DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
279  'manage_members',
280  'manage_members',
281  $this->getRepositoryObject()->getRefId(),
282  $part
283  );
284 
285  if (!$part) {
286  $this->setData(array());
287  return;
288  }
289 
290 
291  $group_user_data = (array) $this->getParentObject()->readMemberData(
292  $part,
293  $this->getSelectedColumns()
294  );
295 
296  include_once './Services/User/classes/class.ilUserQuery.php';
297 
298  $additional_fields = $this->getSelectedColumns();
299  unset($additional_fields["firstname"]);
300  unset($additional_fields["lastname"]);
301  unset($additional_fields["last_login"]);
302  unset($additional_fields["access_until"]);
303  unset($additional_fields['consultation_hour']);
304  unset($additional_fields['prtf']);
305  unset($additional_fields['roles']);
306  unset($additional_fields['org_units']);
307 
308 
309 
310  $udf_ids = $usr_data_fields = $odf_ids = array();
311  foreach ($additional_fields as $field) {
312  if (substr($field, 0, 3) == 'udf') {
313  $udf_ids[] = substr($field, 4);
314  continue;
315  }
316  if (substr($field, 0, 3) == 'odf') {
317  $odf_ids[] = substr($field, 4);
318  continue;
319  }
320 
321  $usr_data_fields[] = $field;
322  }
323 
324  $usr_data = ilUserQuery::getUserListData(
325  '',
326  '',
327  0,
328  9999,
329  $this->current_filter['login'],
330  '',
331  null,
332  false,
333  false,
334  0,
335  0,
336  null,
337  $usr_data_fields,
338  $part
339  );
340 
341  $a_user_data = array();
342  $filtered_user_ids = array();
343  $local_roles = $this->getParentObject()->getLocalRoles();
344  foreach ((array) $usr_data['set'] as $ud) {
345  $user_id = $ud['usr_id'];
346  if ($this->current_filter['roles']) {
347  if (!$GLOBALS['DIC']['rbacreview']->isAssigned($user_id, $this->current_filter['roles'])) {
348  continue;
349  }
350  }
351  if ($this->current_filter['org_units']) {
352  $org_unit = $this->current_filter['org_units'];
353  include_once './Modules/OrgUnit/classes/class.ilObjOrgUnitTree.php';
354  $assigned = ilObjOrgUnitTree::_getInstance()->getOrgUnitOfUser($user_id);
355  if (!in_array($org_unit, $assigned)) {
356  continue;
357  }
358  }
359 
360  $filtered_user_ids[] = $user_id;
361  $a_user_data[$user_id] = array_merge($ud, (array) $group_user_data[$user_id]);
362 
363  $roles = array();
364  foreach ($local_roles as $role_id => $role_name) {
365  // @todo fix performance
366  if ($GLOBALS['DIC']['rbacreview']->isAssigned($user_id, $role_id)) {
367  $roles[] = $role_name;
368  }
369  }
370  $a_user_data[$user_id]['name'] = $a_user_data[$user_id]['lastname'] . ', ' . $a_user_data[$user_id]['firstname'];
371  $a_user_data[$user_id]['roles_label'] = implode('<br />', $roles);
372  $a_user_data[$user_id]['roles'] = $this->participants->setRoleOrderPosition($user_id);
373  }
374 
375  // Custom user data fields
376  if ($udf_ids) {
377  include_once './Services/User/classes/class.ilUserDefinedData.php';
378  $data = ilUserDefinedData::lookupData($filtered_user_ids, $udf_ids);
379  foreach ($data as $usr_id => $fields) {
380  if (!$this->checkAcceptance($usr_id)) {
381  continue;
382  }
383 
384  foreach ($fields as $field_id => $value) {
385  $a_user_data[$usr_id]['udf_' . $field_id] = $value;
386  }
387  }
388  }
389  // Object specific user data fields
390  if ($odf_ids) {
391  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
393  foreach ($data as $usr_id => $fields) {
394  if (!$this->checkAcceptance($usr_id)) {
395  continue;
396  }
397 
398  foreach ($fields as $field_id => $value) {
399  if ($a_user_data[$usr_id]) {
400  $a_user_data[$usr_id]['odf_' . $field_id] = $value;
401  }
402  }
403  }
404  // add last edit date
405  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
406  foreach (ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getRepositoryObject()->getId()) as $usr_id => $edit_info) {
407  if (!isset($a_user_data[$usr_id])) {
408  continue;
409  }
410 
411  include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
412  if ($usr_id == $edit_info['update_user']) {
413  $a_user_data[$usr_id]['odf_last_update'] = '';
414  $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['DIC']['lng']->txt('cdf_edited_by_self');
415  if (ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getRepositoryObject()->getType())) {
416  $a_user_data[$usr_id]['odf_last_update'] .= ('_' . $edit_info['editing_time']->get(IL_CAL_UNIX));
417  $a_user_data[$usr_id]['odf_info_txt'] .= (', ' . ilDatePresentation::formatDate($edit_info['editing_time']));
418  }
419  } else {
420  $a_user_data[$usr_id]['odf_last_update'] = $edit_info['edit_user'];
421  $a_user_data[$usr_id]['odf_last_update'] .= ('_' . $edit_info['editing_time']->get(IL_CAL_UNIX));
422 
423  $name = ilObjUser::_lookupName($edit_info['update_user']);
424  $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'] . ' ' . $name['lastname'] . ', ' . ilDatePresentation::formatDate($edit_info['editing_time']));
425  }
426  }
427  }
428 
429  // consultation hours
430  if ($this->isColumnSelected('consultation_hour')) {
431  include_once './Services/Booking/classes/class.ilBookingEntry.php';
432  foreach (ilBookingEntry::lookupManagedBookingsForObject($this->getRepositoryObject()->getId(), $GLOBALS['DIC']['ilUser']->getId()) as $buser => $booking) {
433  if (isset($a_user_data[$buser])) {
434  $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
435  $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
436  $a_user_data[$buser]['consultation_hours'] = $booking;
437  }
438  }
439  }
440 
441  // always sort by name first
442  $a_user_data = ilUtil::sortArray(
443  $a_user_data,
444  'name',
445  $this->getOrderDirection()
446  );
447 
448  return $this->setData($a_user_data);
449  }
450 }
showActionLinks($a_set)
show edit links
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static _lookupName($a_user_id)
lookup user name
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
global $DIC
Definition: saml.php:7
static lookupManagedBookingsForObject($a_obj_id, $a_usr_id)
Lookup bookings for own and managed consultation hours of an object.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
const LP_STATUS_NOT_ATTEMPTED
const IL_CAL_UNIX
getOrderDirection()
Get order direction.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
getParentObject()
Get parent object.
setId($a_val)
Set id.
const LP_STATUS_IN_PROGRESS
global $ilCtrl
Definition: ilias.php:18
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
const LP_STATUS_FAILED
Class for single dates.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
addMultiCommand($a_cmd, $a_text)
Add Command button.
enable($a_module_name)
enables particular modules of table
__construct( $a_parent_obj, ilObject $rep_object, $show_learning_progress=false)
Constructor.
setPrefix($a_prefix)
Date and time handling
$ilUser
Definition: imgupload.php:18
getSelectedColumns()
Get selected columns.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
getSelectableColumns()
Get selectable columns.
isColumnSelected($a_col)
Is given column selected?
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
const IL_CAL_DATE
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
setFormName($a_formname="")
Set Form name.
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.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
checkAcceptance($a_usr_id)
Check acceptance.
static _lookupActive($a_usr_id)
Check user account active.
static _getInstance()
Get instance of ilPrivacySettings.
getId()
Get element id.
$info
Definition: index.php:5
const LP_STATUS_COMPLETED
static lookupEntriesByObjectId($a_obj_id)
Get entries by obj_id type $ilDB.
static getInstanceByObjId($a_obj_id)
Get instance by obj type.
static getUserListData( $a_order_field, $a_order_dir, $a_offset, $a_limit, $a_string_filter="", $a_activation_filter="", $a_last_login_filter=null, $a_limited_access_filter=false, $a_no_courses_filter=false, $a_course_group_filter=0, $a_role_filter=0, $a_user_folder_filter=null, $a_additional_fields='', $a_user_filter=null, $a_first_letter="", $a_authentication_filter=null)
Get data for user administration list.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.