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
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 $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
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}
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)
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.
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.
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)
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
global $ilCtrl
Definition: ilias.php:18
if($format !==null) $name
Definition: metadata.php:146
$info
Definition: index.php:5
$ilUser
Definition: imgupload.php:18