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
4include_once './Services/Membership/classes/class.ilParticipantsTableGUI.php';
5include_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
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?>
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_DATE
const IL_CAL_UNIX
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)
static formatPeriod(ilDateTime $start, ilDateTime $end)
Format a period of two date Shows: 14.
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
Class for single dates.
__construct( $a_parent_obj, ilObject $rep_object, $show_learning_progress=false)
Constructor.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
const LP_STATUS_COMPLETED
const LP_STATUS_FAILED
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
static _lookupName($a_user_id)
lookup user name
static _lookupActive($a_usr_id)
Check user account active.
static lookupEntriesByObjectId($a_obj_id)
Get entries by obj_id @global type $ilDB.
Class ilObject Basic functions for all objects.
getSelectableColumns()
Get selectable columns.
showActionLinks($a_set)
show edit links
checkAcceptance($a_usr_id)
Check acceptance.
static getInstanceByObjId($a_obj_id)
Get instance by obj type.
static _getInstance()
Get instance of ilPrivacySettings.
getSelectedColumns()
Get selected columns.
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.
getParentObject()
Get parent object.
setPrefix($a_prefix)
set prefix for sort and offset fields (if you have two or more tables on a page that you want to sort...
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
getId()
Get element id.
setData($a_data)
set table data @access public
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
setId($a_val)
Set id.
setFormName($a_formname="")
Set Form name.
isColumnSelected($a_col)
Is given column selected?
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
getOrderDirection()
Get order direction.
enable($a_module_name)
enables particular modules of table
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
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.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
$info
Definition: example_052.php:80
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:17
$ilUser
Definition: imgupload.php:18