ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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  {
33  global $lng, $ilCtrl;
34 
35  $this->show_learning_progress = $show_learning_progress;
36 
37  $this->lng = $lng;
38  $this->lng->loadLanguageModule('grp');
39  $this->lng->loadLanguageModule('trac');
40  $this->lng->loadLanguageModule('rbac');
41  $this->lng->loadLanguageModule('mmbr');
42 
43  $this->ctrl = $ilCtrl;
44 
45  $this->rep_object = $rep_object;
46 
47  include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
48  $this->privacy = ilPrivacySettings::_getInstance();
49 
50  include_once './Services/Membership/classes/class.ilParticipants.php';
51  $this->participants = ilParticipants::getInstanceByObjId($this->getRepositoryObject()->getId());
52 
53 
54  $this->setPrefix('participants');
55 
56  $this->setId('grp_' . $this->getRepositoryObject()->getId());
57  parent::__construct($a_parent_obj, 'participants');
58 
59  $this->initSettings();
60 
61  $this->setFormName('participants');
62 
63  $this->addColumn('', 'f', "1");
64  $this->addColumn($this->lng->txt('name'), 'lastname', '20%');
65 
66  $all_cols = $this->getSelectableColumns();
67  foreach($this->getSelectedColumns() as $col)
68  {
69  $this->addColumn($all_cols[$col]['txt'], $col);
70  }
71 
72  if($this->show_learning_progress)
73  {
74  $this->addColumn($this->lng->txt('learning_progress'), 'progress');
75  }
76 
77  if($this->privacy->enabledGroupAccessTimes())
78  {
79  $this->addColumn($this->lng->txt('last_access'), 'access_time_unix');
80  }
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');
104  $this->addCommandButton('updateParticipantsStatus', $this->lng->txt('save'));
105  }
106 
114  public function fillRow($a_set)
115  {
116  global $ilUser,$ilAccess;
117 
118  $this->tpl->setVariable('VAL_ID',$a_set['usr_id']);
119  $this->tpl->setVariable('VAL_NAME',$a_set['lastname'].', '.$a_set['firstname']);
120  if(!$ilAccess->checkAccessOfUser($a_set['usr_id'],'read','',$this->getRepositoryObject()->getRefId()) and
121  is_array($info = $ilAccess->getInfo()))
122  {
123  $this->tpl->setCurrentBlock('access_warning');
124  $this->tpl->setVariable('PARENT_ACCESS',$info[0]['text']);
125  $this->tpl->parseCurrentBlock();
126  }
127 
128  if(!ilObjUser::_lookupActive($a_set['usr_id']))
129  {
130  $this->tpl->setCurrentBlock('access_warning');
131  $this->tpl->setVariable('PARENT_ACCESS',$this->lng->txt('usr_account_inactive'));
132  $this->tpl->parseCurrentBlock();
133  }
134 
135 
136  foreach($this->getSelectedColumns() as $field)
137  {
138  switch($field)
139  {
140  case 'gender':
141  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_'.$a_set['gender']) : '';
142  $this->tpl->setCurrentBlock('custom_fields');
143  $this->tpl->setVariable('VAL_CUST',$a_set[$field]);
144  $this->tpl->parseCurrentBlock();
145  break;
146 
147  case 'birthday':
148  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'],IL_CAL_DATE)) : $this->lng->txt('no_date');
149  $this->tpl->setCurrentBlock('custom_fields');
150  $this->tpl->setVariable('VAL_CUST',$a_set[$field]);
151  $this->tpl->parseCurrentBlock();
152  break;
153 
154  case 'consultation_hour':
155  $this->tpl->setCurrentBlock('custom_field');
156  $dts = array();
157  foreach((array) $a_set['consultation_hours'] as $ch)
158  {
160  new ilDateTime($ch['dt'],IL_CAL_UNIX),
161  new ilDateTime($ch['dtend'],IL_CAL_UNIX)
162  );
163  if($ch['explanation'])
164  {
165  $tmp .= ' ' . $ch['explanation'];
166  }
167  $dts[] = $tmp;
168  }
169  $dt_string = implode('<br />', $dts);
170  $this->tpl->setVariable('VAL_CUST',$dt_string) ;
171  $this->tpl->parseCurrentBlock();
172  break;
173 
174  case 'prtf':
175  $tmp = array();
176  if(is_array($a_set['prtf']))
177  {
178  foreach($a_set['prtf'] as $prtf_url => $prtf_txt)
179  {
180  $tmp[] = '<a href="'.$prtf_url.'">'.$prtf_txt.'</a>';
181  }
182  }
183  $this->tpl->setCurrentBlock('custom_fields');
184  $this->tpl->setVariable('VAL_CUST', (string) implode('<br />', $tmp)) ;
185  $this->tpl->parseCurrentBlock();
186  break;
187 
188  case 'odf_last_update':
189  $this->tpl->setCurrentBlock('custom_fields');
190  $this->tpl->setVariable('VAL_CUST',(string) $a_set['odf_info_txt']);
191  $this->tpl->parseCurrentBlock();
192  break;
193 
194  case 'roles':
195  $this->tpl->setCurrentBlock('custom_fields');
196  $this->tpl->setVariable('VAL_CUST', (string) $a_set['roles_label']);
197  $this->tpl->parseCurrentBlock();
198  break;
199 
200  case 'org_units':
201  $this->tpl->setCurrentBlock('custom_fields');
202  include_once './Modules/OrgUnit/classes/PathStorage/class.ilOrgUnitPathStorage.php';
203  $this->tpl->setVariable('VAL_CUST', (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($a_set['usr_id']));
204  $this->tpl->parseCurrentBlock();
205  break;
206 
207  default:
208  $this->tpl->setCurrentBlock('custom_fields');
209  $this->tpl->setVariable('VAL_CUST',isset($a_set[$field]) ? (string) $a_set[$field] : '');
210  $this->tpl->parseCurrentBlock();
211  break;
212  }
213  }
214 
215  if($this->privacy->enabledGroupAccessTimes())
216  {
217  $this->tpl->setVariable('VAL_ACCESS',$a_set['access_time']);
218  }
219 
220  if($this->show_learning_progress)
221  {
222  $this->tpl->setCurrentBlock('lp');
223  switch($a_set['progress'])
224  {
226  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
227  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/complete.svg'));
228  break;
229 
231  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
232  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/incomplete.svg'));
233  break;
234 
236  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
237  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/not_attempted.svg'));
238  break;
239 
241  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
242  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/failed.svg'));
243  break;
244 
245  }
246  $this->tpl->parseCurrentBlock();
247  }
248 
249  $this->tpl->setVariable('VAL_POSTNAME', 'participants');
250  if(
251  $this->getParticipants()->isAdmin($a_set['usr_id'])
252  )
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  $this->showActionLinks($a_set);
261 
262 
263  $this->tpl->setVariable('VAL_LOGIN',$a_set['login']);
264  }
265 
271  public function parse()
272  {
273  $this->determineOffsetAndOrder(true);
274 
275  $part = ilGroupParticipants::_getInstanceByObjId($this->getRepositoryObject()->getId())->getParticipants();
276 
277  if(!$part)
278  {
279  $this->setData(array());
280  return;
281  }
282 
283 
284  $group_user_data = (array) $this->getParentObject()->readMemberData(
285  $part,
286  $this->getSelectedColumns()
287  );
288 
289  include_once './Services/User/classes/class.ilUserQuery.php';
290 
291  $additional_fields = $this->getSelectedColumns();
292  unset($additional_fields["firstname"]);
293  unset($additional_fields["lastname"]);
294  unset($additional_fields["last_login"]);
295  unset($additional_fields["access_until"]);
296  unset($additional_fields['consultation_hour']);
297  unset($additional_fields['prtf']);
298  unset($additional_fields['roles']);
299  unset($additional_fields['org_units']);
300 
301 
302 
303  $udf_ids = $usr_data_fields = $odf_ids = array();
304  foreach($additional_fields as $field)
305  {
306  if(substr($field,0,3) == 'udf')
307  {
308  $udf_ids[] = substr($field,4);
309  continue;
310  }
311  if(substr($field,0,3) == 'odf')
312  {
313  $odf_ids[] = substr($field,4);
314  continue;
315  }
316 
317  $usr_data_fields[] = $field;
318  }
319 
320  $usr_data = ilUserQuery::getUserListData(
321  $this->getOrderField(),
322  $this->getOrderDirection(),
323  0,
324  9999,
325  $this->current_filter['login'],
326  '',
327  null,
328  false,
329  false,
330  0,
331  0,
332  null,
333  $usr_data_fields,
334  $part
335  );
336 
337  $a_user_data = array();
338  $filtered_user_ids = array();
339  $local_roles = $this->getParentObject()->getLocalRoles();
340  foreach((array) $usr_data['set'] as $ud)
341  {
342  $user_id = $ud['usr_id'];
343  if($this->current_filter['roles'])
344  {
345  if(!$GLOBALS['rbacreview']->isAssigned($user_id, $this->current_filter['roles']))
346  {
347  continue;
348  }
349  }
350  if($this->current_filter['org_units'])
351  {
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  {
357  continue;
358  }
359  }
360 
361  $filtered_user_ids[] = $user_id;
362  $a_user_data[$user_id] = array_merge($ud,(array) $group_user_data[$user_id]);
363 
364  $roles = array();
365  foreach($local_roles as $role_id => $role_name)
366  {
367  // @todo fix performance
368  if($GLOBALS['rbacreview']->isAssigned($user_id, $role_id))
369  {
370  $roles[] = $role_name;
371  }
372  }
373  $a_user_data[$user_id]['name'] = $a_user_data[$user_id]['lastname'].', '.$a_user_data[$user_id]['firstname'];
374  $a_user_data[$user_id]['roles_label'] = implode('<br />', $roles);
375  $a_user_data[$user_id]['roles'] = $this->participants->setRoleOrderPosition($user_id);
376  }
377 
378  // Custom user data fields
379  if($udf_ids)
380  {
381  include_once './Services/User/classes/class.ilUserDefinedData.php';
382  $data = ilUserDefinedData::lookupData($part, $udf_ids);
383  foreach($data as $usr_id => $fields)
384  {
385  if(!$this->checkAcceptance($usr_id))
386  {
387  continue;
388  }
389 
390  foreach($fields as $field_id => $value)
391  {
392  $a_user_data[$usr_id]['udf_'.$field_id] = $value;
393  }
394  }
395  }
396  // Object specific user data fields
397  if($odf_ids)
398  {
399  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
401  foreach($data as $usr_id => $fields)
402  {
403  if(!$this->checkAcceptance($usr_id))
404  {
405  continue;
406  }
407 
408  foreach($fields as $field_id => $value)
409  {
410  if($a_user_data[$usr_id])
411  {
412  $a_user_data[$usr_id]['odf_'.$field_id] = $value;
413  }
414  }
415  }
416  // add last edit date
417  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
418  foreach(ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getRepositoryObject()->getId()) as $usr_id => $edit_info)
419  {
420  if(!isset($a_user_data[$usr_id]))
421  {
422  continue;
423  }
424 
425  include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
426  if($usr_id == $edit_info['update_user'])
427  {
428  $a_user_data[$usr_id]['odf_last_update'] = '';
429  $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
430  if(ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getRepositoryObject()->getType()))
431  {
432  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
433  $a_user_data[$usr_id]['odf_info_txt'] .= (', '.ilDatePresentation::formatDate($edit_info['editing_time']));
434  }
435  }
436  else
437  {
438  $a_user_data[$usr_id]['odf_last_update'] = $edit_info['edit_user'];
439  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
440 
441  $name = ilObjUser::_lookupName($edit_info['update_user']);
442  $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'].' '.$name['lastname'].', '.ilDatePresentation::formatDate($edit_info['editing_time']));
443  }
444  }
445  }
446 
447  // consultation hours
448  if($this->isColumnSelected('consultation_hour'))
449  {
450  include_once './Services/Booking/classes/class.ilBookingEntry.php';
451  foreach(ilBookingEntry::lookupManagedBookingsForObject($this->getRepositoryObject()->getId(), $GLOBALS['ilUser']->getId()) as $buser => $booking)
452  {
453  if(isset($a_user_data[$buser]))
454  {
455  $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
456  $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
457  $a_user_data[$buser]['consultation_hours'] = $booking;
458  }
459  }
460  }
461 
462  // always sort by name first
463  $a_user_data = ilUtil::sortArray(
464  $a_user_data,
465  'name',
466  $this->getOrderDirection()
467  );
468 
469  return $this->setData($a_user_data);
470  }
471 }
472 ?>
showActionLinks($a_set)
show edit links
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static _lookupName($a_user_id)
lookup user name
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="")
Get data for user administration list.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
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
Class ilObject Basic functions for all objects.
static formatPeriod(ilDateTime $start, ilDateTime $end)
Format a period of two date Shows: 14.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
const IL_CAL_UNIX
getOrderDirection()
Get order direction.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
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.
$info
Definition: example_052.php:80
const LP_STATUS_FAILED
Class for single dates.
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
static formatDate(ilDateTime $date)
Format a date public.
__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.
Create styles array
The data for the language used.
getSelectableColumns()
Get selectable columns.
isColumnSelected($a_col)
Is given column selected?
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
const IL_CAL_DATE
setFormName($a_formname="")
Set Form name.
global $lng
Definition: privfeed.php:17
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.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
getId()
Get element id.
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.
static lookupEntriesByObjectId($a_obj_id)
Get entries by obj_id type $ilDB.
static getInstanceByObjId($a_obj_id)
Get instance by obj type.