ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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 $lng, $ilCtrl;
33 
34  $this->show_learning_progress = $show_learning_progress;
35 
36  $this->lng = $lng;
37  $this->lng->loadLanguageModule('grp');
38  $this->lng->loadLanguageModule('trac');
39  $this->lng->loadLanguageModule('rbac');
40  $this->lng->loadLanguageModule('mmbr');
41 
42  $this->ctrl = $ilCtrl;
43 
44  $this->rep_object = $rep_object;
45 
46  include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
47  $this->privacy = ilPrivacySettings::_getInstance();
48 
49  include_once './Services/Membership/classes/class.ilParticipants.php';
50  $this->participants = ilParticipants::getInstanceByObjId($this->getRepositoryObject()->getId());
51 
52 
53  $this->setPrefix('participants');
54 
55  $this->setId('grp_' . $this->getRepositoryObject()->getId());
56  parent::__construct($a_parent_obj, 'participants');
57 
58  $this->initSettings();
59 
60  $this->setFormName('participants');
61 
62  $this->addColumn('', 'f', "1");
63  $this->addColumn($this->lng->txt('name'), 'lastname', '20%');
64 
65  $all_cols = $this->getSelectableColumns();
66  foreach ($this->getSelectedColumns() as $col) {
67  $this->addColumn($all_cols[$col]['txt'], $col);
68  }
69 
70  if ($this->show_learning_progress) {
71  $this->addColumn($this->lng->txt('learning_progress'), 'progress');
72  }
73 
74  if ($this->privacy->enabledGroupAccessTimes()) {
75  $this->addColumn($this->lng->txt('last_access'), 'access_time_unix');
76  }
77  $this->addColumn($this->lng->txt('grp_notification'), 'notification');
78 
79  $this->addColumn($this->lng->txt(''), 'optional');
80  $this->setDefaultOrderField('roles');
81 
82  $this->setRowTemplate("tpl.show_participants_row.html", "Modules/Group");
83 
84  $this->setShowRowsSelector(true);
85 
86  $this->enable('sort');
87  $this->enable('header');
88  $this->enable('numinfo');
89  $this->enable('select_all');
90 
91  $this->initFilter();
92 
93  $this->addMultiCommand('editParticipants', $this->lng->txt('edit'));
94  $this->addMultiCommand('confirmDeleteParticipants', $this->lng->txt('remove'));
95  $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('mmbr_btn_mail_selected_users'));
96  $this->lng->loadLanguageModule('user');
97  $this->addMultiCommand('addToClipboard', $this->lng->txt('clipboard_add_btn'));
98 
99  $this->setSelectAllCheckbox('participants');
100  $this->addCommandButton('updateParticipantsStatus', $this->lng->txt('save'));
101  }
102 
110  public function fillRow($a_set)
111  {
112  global $ilUser,$ilAccess;
113 
114  $this->tpl->setVariable('VAL_ID', $a_set['usr_id']);
115  $this->tpl->setVariable('VAL_NAME', $a_set['lastname'] . ', ' . $a_set['firstname']);
116  if (!$ilAccess->checkAccessOfUser($a_set['usr_id'], 'read', '', $this->getRepositoryObject()->getRefId()) and
117  is_array($info = $ilAccess->getInfo())) {
118  $this->tpl->setCurrentBlock('access_warning');
119  $this->tpl->setVariable('PARENT_ACCESS', $info[0]['text']);
120  $this->tpl->parseCurrentBlock();
121  }
122 
123  if (!ilObjUser::_lookupActive($a_set['usr_id'])) {
124  $this->tpl->setCurrentBlock('access_warning');
125  $this->tpl->setVariable('PARENT_ACCESS', $this->lng->txt('usr_account_inactive'));
126  $this->tpl->parseCurrentBlock();
127  }
128 
129 
130  foreach ($this->getSelectedColumns() as $field) {
131  switch ($field) {
132  case 'gender':
133  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
134  $this->tpl->setCurrentBlock('custom_fields');
135  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
136  $this->tpl->parseCurrentBlock();
137  break;
138 
139  case 'birthday':
140  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
141  $this->tpl->setCurrentBlock('custom_fields');
142  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
143  $this->tpl->parseCurrentBlock();
144  break;
145 
146  case 'consultation_hour':
147  $this->tpl->setCurrentBlock('custom_fields');
148  $dts = array();
149  foreach ((array) $a_set['consultation_hours'] as $ch) {
151  new ilDateTime($ch['dt'], IL_CAL_UNIX),
152  new ilDateTime($ch['dtend'], IL_CAL_UNIX)
153  );
154  if ($ch['explanation']) {
155  $tmp .= ' ' . $ch['explanation'];
156  }
157  $dts[] = $tmp;
158  }
159  $dt_string = implode('<br />', $dts);
160  $this->tpl->setVariable('VAL_CUST', $dt_string) ;
161  $this->tpl->parseCurrentBlock();
162  break;
163 
164  case 'prtf':
165  $tmp = array();
166  if (is_array($a_set['prtf'])) {
167  foreach ($a_set['prtf'] as $prtf_url => $prtf_txt) {
168  $tmp[] = '<a href="' . $prtf_url . '">' . $prtf_txt . '</a>';
169  }
170  }
171  $this->tpl->setCurrentBlock('custom_fields');
172  $this->tpl->setVariable('VAL_CUST', (string) implode('<br />', $tmp)) ;
173  $this->tpl->parseCurrentBlock();
174  break;
175 
176  case 'odf_last_update':
177  $this->tpl->setCurrentBlock('custom_fields');
178  $this->tpl->setVariable('VAL_CUST', (string) $a_set['odf_info_txt']);
179  $this->tpl->parseCurrentBlock();
180  break;
181 
182  case 'roles':
183  $this->tpl->setCurrentBlock('custom_fields');
184  $this->tpl->setVariable('VAL_CUST', (string) $a_set['roles_label']);
185  $this->tpl->parseCurrentBlock();
186  break;
187 
188  case 'org_units':
189  $this->tpl->setCurrentBlock('custom_fields');
190  include_once './Modules/OrgUnit/classes/PathStorage/class.ilOrgUnitPathStorage.php';
191  $this->tpl->setVariable('VAL_CUST', (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($a_set['usr_id']));
192  $this->tpl->parseCurrentBlock();
193  break;
194 
195  default:
196  $this->tpl->setCurrentBlock('custom_fields');
197  $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
198  $this->tpl->parseCurrentBlock();
199  break;
200  }
201  }
202 
203  if ($this->privacy->enabledGroupAccessTimes()) {
204  $this->tpl->setVariable('VAL_ACCESS', $a_set['access_time']);
205  }
206 
207  if ($this->show_learning_progress) {
208  $this->tpl->setCurrentBlock('lp');
209  switch ($a_set['progress']) {
211  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
212  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/complete.svg'));
213  break;
214 
216  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
217  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/incomplete.svg'));
218  break;
219 
221  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
222  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/not_attempted.svg'));
223  break;
224 
226  $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
227  $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/failed.svg'));
228  break;
229 
230  }
231  $this->tpl->parseCurrentBlock();
232  }
233 
234  $this->tpl->setVariable('VAL_POSTNAME', 'participants');
235  if (
236  $this->getParticipants()->isAdmin($a_set['usr_id'])
237  ) {
238  $this->tpl->setVariable('VAL_NOTIFICATION_ID', $a_set['usr_id']);
239  $this->tpl->setVariable(
240  'VAL_NOTIFICATION_CHECKED',
241  $a_set['notification'] ? 'checked="checked"' : ''
242  );
243  }
244 
245  $this->showActionLinks($a_set);
246 
247 
248  $this->tpl->setVariable('VAL_LOGIN', $a_set['login']);
249  }
250 
256  public function parse()
257  {
258  $this->determineOffsetAndOrder(true);
259 
260  $part = ilGroupParticipants::_getInstanceByObjId($this->getRepositoryObject()->getId())->getParticipants();
261 
262  $part = $GLOBALS['DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
263  'manage_members',
264  'manage_members',
265  $this->getRepositoryObject()->getRefId(),
266  $part
267  );
268 
269  if (!$part) {
270  $this->setData(array());
271  return;
272  }
273 
274 
275  $group_user_data = (array) $this->getParentObject()->readMemberData(
276  $part,
277  $this->getSelectedColumns()
278  );
279 
280  include_once './Services/User/classes/class.ilUserQuery.php';
281 
282  $additional_fields = $this->getSelectedColumns();
283  unset($additional_fields["firstname"]);
284  unset($additional_fields["lastname"]);
285  unset($additional_fields["last_login"]);
286  unset($additional_fields["access_until"]);
287  unset($additional_fields['consultation_hour']);
288  unset($additional_fields['prtf']);
289  unset($additional_fields['roles']);
290  unset($additional_fields['org_units']);
291 
292 
293 
294  $udf_ids = $usr_data_fields = $odf_ids = array();
295  foreach ($additional_fields as $field) {
296  if (substr($field, 0, 3) == 'udf') {
297  $udf_ids[] = substr($field, 4);
298  continue;
299  }
300  if (substr($field, 0, 3) == 'odf') {
301  $odf_ids[] = substr($field, 4);
302  continue;
303  }
304 
305  $usr_data_fields[] = $field;
306  }
307 
308  $usr_data = ilUserQuery::getUserListData(
309  '',
310  '',
311  0,
312  9999,
313  $this->current_filter['login'],
314  '',
315  null,
316  false,
317  false,
318  0,
319  0,
320  null,
321  $usr_data_fields,
322  $part
323  );
324 
325  $a_user_data = array();
326  $filtered_user_ids = array();
327  $local_roles = $this->getParentObject()->getLocalRoles();
328  foreach ((array) $usr_data['set'] as $ud) {
329  $user_id = $ud['usr_id'];
330  if ($this->current_filter['roles']) {
331  if (!$GLOBALS['rbacreview']->isAssigned($user_id, $this->current_filter['roles'])) {
332  continue;
333  }
334  }
335  if ($this->current_filter['org_units']) {
336  $org_unit = $this->current_filter['org_units'];
337  include_once './Modules/OrgUnit/classes/class.ilObjOrgUnitTree.php';
338  $assigned = ilObjOrgUnitTree::_getInstance()->getOrgUnitOfUser($user_id);
339  if (!in_array($org_unit, $assigned)) {
340  continue;
341  }
342  }
343 
344  $filtered_user_ids[] = $user_id;
345  $a_user_data[$user_id] = array_merge($ud, (array) $group_user_data[$user_id]);
346 
347  $roles = array();
348  foreach ($local_roles as $role_id => $role_name) {
349  // @todo fix performance
350  if ($GLOBALS['rbacreview']->isAssigned($user_id, $role_id)) {
351  $roles[] = $role_name;
352  }
353  }
354  $a_user_data[$user_id]['name'] = $a_user_data[$user_id]['lastname'] . ', ' . $a_user_data[$user_id]['firstname'];
355  $a_user_data[$user_id]['roles_label'] = implode('<br />', $roles);
356  $a_user_data[$user_id]['roles'] = $this->participants->setRoleOrderPosition($user_id);
357  }
358 
359  // Custom user data fields
360  if ($udf_ids) {
361  include_once './Services/User/classes/class.ilUserDefinedData.php';
362  $data = ilUserDefinedData::lookupData($filtered_user_ids, $udf_ids);
363  foreach ($data as $usr_id => $fields) {
364  if (!$this->checkAcceptance($usr_id)) {
365  continue;
366  }
367 
368  foreach ($fields as $field_id => $value) {
369  $a_user_data[$usr_id]['udf_' . $field_id] = $value;
370  }
371  }
372  }
373  // Object specific user data fields
374  if ($odf_ids) {
375  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
377  foreach ($data as $usr_id => $fields) {
378  if (!$this->checkAcceptance($usr_id)) {
379  continue;
380  }
381 
382  foreach ($fields as $field_id => $value) {
383  if ($a_user_data[$usr_id]) {
384  $a_user_data[$usr_id]['odf_' . $field_id] = $value;
385  }
386  }
387  }
388  // add last edit date
389  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
390  foreach (ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getRepositoryObject()->getId()) as $usr_id => $edit_info) {
391  if (!isset($a_user_data[$usr_id])) {
392  continue;
393  }
394 
395  include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
396  if ($usr_id == $edit_info['update_user']) {
397  $a_user_data[$usr_id]['odf_last_update'] = '';
398  $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
399  if (ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getRepositoryObject()->getType())) {
400  $a_user_data[$usr_id]['odf_last_update'] .= ('_' . $edit_info['editing_time']->get(IL_CAL_UNIX));
401  $a_user_data[$usr_id]['odf_info_txt'] .= (', ' . ilDatePresentation::formatDate($edit_info['editing_time']));
402  }
403  } else {
404  $a_user_data[$usr_id]['odf_last_update'] = $edit_info['edit_user'];
405  $a_user_data[$usr_id]['odf_last_update'] .= ('_' . $edit_info['editing_time']->get(IL_CAL_UNIX));
406 
407  $name = ilObjUser::_lookupName($edit_info['update_user']);
408  $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'] . ' ' . $name['lastname'] . ', ' . ilDatePresentation::formatDate($edit_info['editing_time']));
409  }
410  }
411  }
412 
413  // consultation hours
414  if ($this->isColumnSelected('consultation_hour')) {
415  include_once './Services/Booking/classes/class.ilBookingEntry.php';
416  foreach (ilBookingEntry::lookupManagedBookingsForObject($this->getRepositoryObject()->getId(), $GLOBALS['ilUser']->getId()) as $buser => $booking) {
417  if (isset($a_user_data[$buser])) {
418  $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
419  $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
420  $a_user_data[$buser]['consultation_hours'] = $booking;
421  }
422  }
423  }
424 
425  // always sort by name first
426  $a_user_data = ilUtil::sortArray(
427  $a_user_data,
428  'name',
429  $this->getOrderDirection()
430  );
431 
432  return $this->setData($a_user_data);
433  }
434 }
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.
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
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date public.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
const IL_CAL_UNIX
getOrderDirection()
Get order direction.
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.
if($format !==null) $name
Definition: metadata.php:146
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
__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
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.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
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.