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
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 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
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}
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 formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
@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.
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.
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.
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.
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.
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="", $a_authentication_filter=null)
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)
global $ilCtrl
Definition: ilias.php:18
$info
Definition: index.php:5
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
global $DIC
Definition: saml.php:7
$ilUser
Definition: imgupload.php:18