ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilCourseParticipantsTableGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once './Services/Membership/classes/class.ilParticipantsTableGUI.php';
14{
15 protected $show_learning_progress = false;
16 protected $show_timings = false;
17 protected $show_lp_status_sync = false;
18
19
27 public function __construct(
28 $a_parent_obj,
30 $a_show_learning_progress = false,
31 $a_show_timings = false,
32 $a_show_lp_status_sync = false)
33 {
34 global $lng, $ilCtrl;
35
36 $this->show_learning_progress = $a_show_learning_progress;
37 if($this->show_learning_progress)
38 {
39 include_once './Services/Tracking/classes/class.ilLPStatus.php';
40 }
41
42 $this->show_timings = $a_show_timings;
43 $this->show_lp_status_sync = $a_show_lp_status_sync;
44
45 $this->rep_object = $rep_object;
46
47 // #13208
48 include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
50 {
51 $this->show_lp_status_sync = false;
52 }
53
54 $this->lng = $lng;
55 $this->lng->loadLanguageModule('crs');
56 $this->lng->loadLanguageModule('trac');
57 $this->lng->loadLanguageModule('rbac');
58 $this->lng->loadLanguageModule('mmbr');
59
60 $this->ctrl = $ilCtrl;
61
62 include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
63 $this->privacy = ilPrivacySettings::_getInstance();
64
65 include_once './Services/Membership/classes/class.ilParticipants.php';
66 $this->participants = ilParticipants::getInstanceByObjId($this->getRepositoryObject()->getId());
67
68
69 // required before constructor for columns
70 $this->setId('crs_'. $this->getRepositoryObject()->getId());
71 parent::__construct($a_parent_obj, 'participants');
72
73 $this->initSettings();
74
75 $this->setFormName('participants');
76
77 $this->addColumn('', 'f', "1");
78 $this->addColumn($this->lng->txt('name'), 'name', '20%');
79
80 $all_cols = $this->getSelectableColumns();
81 foreach($this->getSelectedColumns() as $col)
82 {
83 $this->addColumn($all_cols[$col]['txt'], $col);
84 }
85
86 if($this->show_learning_progress)
87 {
88 $this->addColumn($this->lng->txt('learning_progress'), 'progress');
89 }
90
91 if($this->privacy->enabledCourseAccessTimes())
92 {
93 $this->addColumn($this->lng->txt('last_access'), 'access_ut', '16em');
94 }
95
96 $this->addColumn($this->lng->txt('crs_member_passed'), 'passed');
97 if($this->show_lp_status_sync)
98 {
99 $this->addColumn($this->lng->txt('crs_member_passed_status_changed'), 'passed_info');
100 }
101
102
103 $this->setSelectAllCheckbox('participants');
104 $this->addColumn($this->lng->txt('crs_mem_contact'),'contact');
105 $this->addColumn($this->lng->txt('crs_blocked'), 'blocked');
106 $this->addColumn($this->lng->txt('crs_notification_list_title'), 'notification');
107
108 $this->addColumn($this->lng->txt(''), 'optional');
109
110 $this->setRowTemplate("tpl.show_participants_row.html", "Modules/Course");
111
112 $this->setDefaultOrderField('roles');
113 $this->enable('sort');
114 $this->enable('header');
115 $this->enable('numinfo');
116 $this->enable('select_all');
117
118 $this->setEnableNumInfo(true);
119 $this->setExternalSegmentation(false);
120
121 $this->getItems();
122 $this->setTopCommands(true);
123 $this->setEnableHeader(true);
124 $this->setEnableTitle(true);
125 $this->initFilter();
126
127 $this->setShowRowsSelector(true);
128
129 include_once "Services/Certificate/classes/class.ilCertificate.php";
130 $this->enable_certificates = ilCertificate::isActive();
131 if($this->enable_certificates)
132 {
133 $this->enable_certificates = ilCertificate::isObjectActive($this->getRepositoryObject()->getId());
134 }
135 if($this->enable_certificates)
136 {
137 $lng->loadLanguageModule('certificate');
138 }
139
140 $this->addMultiCommand('editParticipants', $this->lng->txt('edit'));
141 $this->addMultiCommand('confirmDeleteParticipants', $this->lng->txt('remove'));
142 $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('mmbr_btn_mail_selected_users'));
143 $this->lng->loadLanguageModule('user');
144 $this->addMultiCommand('addToClipboard', $this->lng->txt('clipboard_add_btn'));
145
146 $this->addCommandButton('updateParticipantsStatus', $this->lng->txt('save'));
147
148 }
149
150
151
152 public function getItems()
153 {
154
155 }
156
157
165 public function fillRow($a_set)
166 {
167 global $ilAccess;
168
169 $this->tpl->setVariable('VAL_ID', $a_set['usr_id']);
170 $this->tpl->setVariable('VAL_NAME', $a_set['lastname'] . ', ' . $a_set['firstname']);
171
172 if(!$ilAccess->checkAccessOfUser($a_set['usr_id'], 'read', '', $this->getRepositoryObject()->getRefId()) and
173 is_array($info = $ilAccess->getInfo()))
174 {
175 $this->tpl->setCurrentBlock('access_warning');
176 $this->tpl->setVariable('PARENT_ACCESS', $info[0]['text']);
177 $this->tpl->parseCurrentBlock();
178 }
179
180 if(!ilObjUser::_lookupActive($a_set['usr_id']))
181 {
182 $this->tpl->setCurrentBlock('access_warning');
183 $this->tpl->setVariable('PARENT_ACCESS', $this->lng->txt('usr_account_inactive'));
184 $this->tpl->parseCurrentBlock();
185 }
186
187 foreach($this->getSelectedColumns() as $field)
188 {
189 switch($field)
190 {
191 case 'gender':
192 $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
193 $this->tpl->setCurrentBlock('custom_fields');
194 $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
195 $this->tpl->parseCurrentBlock();
196 break;
197
198 case 'birthday':
199 $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
200 $this->tpl->setCurrentBlock('custom_fields');
201 $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
202 $this->tpl->parseCurrentBlock();
203 break;
204
205 case 'consultation_hour':
206 $this->tpl->setCurrentBlock('custom_fields');
207 $dts = array();
208 foreach((array) $a_set['consultation_hours'] as $ch)
209 {
211 new ilDateTime($ch['dt'],IL_CAL_UNIX),
212 new ilDateTime($ch['dtend'],IL_CAL_UNIX)
213 );
214 if($ch['explanation'])
215 {
216 $tmp .= ' ' . $ch['explanation'];
217 }
218 $dts[] = $tmp;
219 }
220 $dt_string = implode('<br />', $dts);
221 $this->tpl->setVariable('VAL_CUST',$dt_string);
222 $this->tpl->parseCurrentBlock();
223 break;
224
225 case 'prtf':
226 $tmp = array();
227 if(is_array($a_set['prtf']))
228 {
229 foreach($a_set['prtf'] as $prtf_url => $prtf_txt)
230 {
231 $tmp[] = '<a href="'.$prtf_url.'">'.$prtf_txt.'</a>';
232 }
233 }
234 $this->tpl->setCurrentBlock('custom_fields');
235 $this->tpl->setVariable('VAL_CUST', (string) implode('<br />', $tmp)) ;
236 $this->tpl->parseCurrentBlock();
237 break;
238
239
240 case 'odf_last_update':
241 $this->tpl->setCurrentBlock('custom_fields');
242 $this->tpl->setVariable('VAL_CUST',(string) $a_set['odf_info_txt']);
243 $this->tpl->parseCurrentBlock();
244 break;
245
246 case 'roles':
247 $this->tpl->setCurrentBlock('custom_fields');
248 $this->tpl->setVariable('VAL_CUST', (string) $a_set['roles_label']);
249 $this->tpl->parseCurrentBlock();
250 break;
251
252 case 'org_units':
253 $this->tpl->setCurrentBlock('custom_fields');
254 include_once './Modules/OrgUnit/classes/PathStorage/class.ilOrgUnitPathStorage.php';
255 $this->tpl->setVariable('VAL_CUST', (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($a_set['usr_id']));
256 $this->tpl->parseCurrentBlock();
257 break;
258
259 default:
260 $this->tpl->setCurrentBlock('custom_fields');
261 $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
262 $this->tpl->parseCurrentBlock();
263 break;
264 }
265 }
266
267 if($this->privacy->enabledCourseAccessTimes())
268 {
269 $this->tpl->setVariable('VAL_ACCESS', $a_set['access_time']);
270 }
271 if($this->show_learning_progress)
272 {
273
274 $this->tpl->setCurrentBlock('lp');
275 switch($a_set['progress'])
276 {
278 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
279 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/complete.svg'));
280 break;
281
283 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
284 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/incomplete.svg'));
285 break;
286
288 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
289 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/not_attempted.svg'));
290 break;
291
293 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
294 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/failed.svg'));
295 break;
296 }
297 $this->tpl->parseCurrentBlock();
298 }
299
300 $this->tpl->setVariable('VAL_POSTNAME', 'participants');
301 $this->tpl->setVariable('VAL_PASSED_ID',$a_set['usr_id']);
302 $this->tpl->setVariable('VAL_PASSED_CHECKED',($a_set['passed'] ? 'checked="checked"' : ''));
303
304 if(
305 $this->getParticipants()->isAdmin($a_set['usr_id']) ||
306 $this->getParticipants()->isTutor($a_set['usr_id'])
307 )
308 {
309 // cognos-blu-patch: begin
310 $this->tpl->setCurrentBlock('with_contact');
311 $this->tpl->setVariable('VAL_CONTACT_ID',$a_set['usr_id']);
312 $this->tpl->setVariable('VAL_CONTACT_CHECKED',$a_set['contact'] ? 'checked="checked"' : '');
313 $this->tpl->parseCurrentBlock();
314 // cognos-blu-patch: end
315
316 $this->tpl->setCurrentBlock('with_notification');
317 $this->tpl->setVariable('VAL_NOTIFICATION_ID', $a_set['usr_id']);
318 $this->tpl->setVariable('VAL_NOTIFICATION_CHECKED', ($a_set['notification'] ? 'checked="checked"' : ''));
319 $this->tpl->parseCurrentBlock();
320
321 }
322
323 // blocked only for real members
324 if(
325 !$this->getParticipants()->isAdmin($a_set['usr_id']) &&
326 !$this->getParticipants()->isTutor($a_set['usr_id'])
327 )
328 {
329 $this->tpl->setCurrentBlock('with_blocked');
330 $this->tpl->setVariable('VAL_BLOCKED_ID', $a_set['usr_id']);
331 $this->tpl->setVariable('VAL_BLOCKED_CHECKED', ($a_set['blocked'] ? 'checked="checked"' : ''));
332 $this->tpl->parseCurrentBlock();
333 }
334
335
336 if($this->show_lp_status_sync)
337 {
338 $this->tpl->setVariable('PASSED_INFO', $a_set["passed_info"]);
339 }
340
341 $this->showActionLinks($a_set);
342
343 if($a_set['passed'] && $this->enable_certificates)
344 {
345 $this->tpl->setCurrentBlock('link');
346 $this->tpl->setVariable('LINK_NAME', $this->ctrl->getLinkTarget($this->parent_obj, 'deliverCertificate'));
347 $this->tpl->setVariable('LINK_TXT', $this->lng->txt('download_certificate'));
348 $this->tpl->parseCurrentBlock();
349 }
350 $this->ctrl->clearParameters($this->parent_obj);
351
352 if($this->show_timings)
353 {
354 $this->ctrl->setParameterByClass('ilcoursecontentgui', 'member_id', $a_set['usr_id']);
355 $this->tpl->setCurrentBlock('link');
356 $this->tpl->setVariable('LINK_NAME', $this->ctrl->getLinkTargetByClass('ilcoursecontentgui', 'showUserTimings'));
357 $this->tpl->setVariable('LINK_TXT', $this->lng->txt('timings_timings'));
358 $this->tpl->parseCurrentBlock();
359 }
360 }
361
368 public function parse()
369 {
370 global $rbacreview;
371
372 $this->determineOffsetAndOrder(true);
373
374 include_once './Services/User/classes/class.ilUserQuery.php';
375
376 $additional_fields = $this->getSelectedColumns();
377 unset($additional_fields["firstname"]);
378 unset($additional_fields["lastname"]);
379 unset($additional_fields["last_login"]);
380 unset($additional_fields["access_until"]);
381 unset($additional_fields['consultation_hour']);
382 unset($additional_fields['prtf']);
383 unset($additional_fields['roles']);
384 unset($additional_fields['org_units']);
385
386 $part = $this->participants->getParticipants();
387 if(!$part)
388 {
389 $this->setData(array());
390 return;
391 }
392
393 $udf_ids = $usr_data_fields = $odf_ids = array();
394 foreach($additional_fields as $field)
395 {
396 if(substr($field, 0, 3) == 'udf')
397 {
398 $udf_ids[] = substr($field, 4);
399 continue;
400 }
401 if(substr($field, 0, 3) == 'odf')
402 {
403 $odf_ids[] = substr($field, 4);
404 continue;
405 }
406
407 $usr_data_fields[] = $field;
408 }
409
411 $this->getOrderField(),
412 $this->getOrderDirection(),
413 0,
414 9999,
415 $this->current_filter['login'],
416 '',
417 null,
418 false,
419 false,
420 0,
421 0,
422 null,
423 $usr_data_fields,
424 $part
425 );
426 // filter by array
427 $usr_ids = array();
428 $local_roles = $this->getParentObject()->getLocalRoles();
429 foreach((array) $usr_data['set'] as $user)
430 {
431 if($this->current_filter['roles'])
432 {
433 if(!$GLOBALS['rbacreview']->isAssigned($user['usr_id'], $this->current_filter['roles']))
434 {
435 continue;
436 }
437 }
438 if($this->current_filter['org_units'])
439 {
440 $org_unit = $this->current_filter['org_units'];
441
442 include_once './Modules/OrgUnit/classes/class.ilObjOrgUnitTree.php';
443 $assigned = ilObjOrgUnitTree::_getInstance()->getOrgUnitOfUser($user['usr_id']);
444 if(!in_array($org_unit, $assigned))
445 {
446 continue;
447 }
448 }
449
450
451 $usr_ids[] = $user['usr_id'];
452 }
453
454 // merge course data
455 $course_user_data = $this->getParentObject()->readMemberData(
456 $usr_ids,
457 $this->getSelectedColumns()
458 );
459 $a_user_data = array();
460 foreach((array) $usr_data['set'] as $ud)
461 {
462 $user_id = $ud['usr_id'];
463
464 if(!in_array($user_id, $usr_ids))
465 {
466 continue;
467 }
468 // #15434
469 if(!$this->checkAcceptance($user_id))
470 {
471 $ud = array();
472 }
473
474 $a_user_data[$user_id] = array_merge($ud,$course_user_data[$user_id]);
475
476
477 $roles = array();
478 foreach($local_roles as $role_id => $role_name)
479 {
480 // @todo fix performance
481 if($GLOBALS['rbacreview']->isAssigned($user_id, $role_id))
482 {
483 $roles[] = $role_name;
484 }
485 }
486
487 $a_user_data[$user_id]['name'] = ($a_user_data[$user_id]['lastname'].', '.$a_user_data[$user_id]['firstname']);
488 $a_user_data[$user_id]['roles_label'] = implode('<br />', $roles);
489 $a_user_data[$user_id]['roles'] = $this->participants->setRoleOrderPosition($user_id);
490
491
492 if($this->show_lp_status_sync)
493 {
494 // #9912 / #13208
495 $passed_info = "";
496 if($a_user_data[$user_id]["passed_info"])
497 {
498 $pinfo = $a_user_data[$user_id]["passed_info"];
499 if($pinfo["user_id"])
500 {
501 if($pinfo["user_id"] < 0)
502 {
503 $passed_info = $this->lng->txt("crs_passed_status_system");
504 }
505 else if($pinfo["user_id"] > 0)
506 {
507 $name = ilObjUser::_lookupName($pinfo["user_id"]);
508 $passed_info = $this->lng->txt("crs_passed_status_manual_by").": ".$name["login"];
509 }
510 }
511 if($pinfo["timestamp"])
512 {
513 $passed_info .= "<br />".ilDatePresentation::formatDate($pinfo["timestamp"]);
514 }
515 }
516 $a_user_data[$user_id]["passed_info"] = $passed_info;
517 }
518 }
519
520 // Custom user data fields
521 if($udf_ids)
522 {
523 include_once './Services/User/classes/class.ilUserDefinedData.php';
524 $data = ilUserDefinedData::lookupData($usr_ids, $udf_ids);
525 foreach($data as $usr_id => $fields)
526 {
527 if(!$this->checkAcceptance($usr_id))
528 {
529 continue;
530 }
531
532 foreach($fields as $field_id => $value)
533 {
534 $a_user_data[$usr_id]['udf_' . $field_id] = $value;
535 }
536 }
537 }
538 // Object specific user data fields
539 if($odf_ids)
540 {
541 include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
543 foreach($data as $usr_id => $fields)
544 {
545 // #7264: as we get data for all course members filter against user data
546 if(!$this->checkAcceptance($usr_id) || !in_array($usr_id, $usr_ids))
547 {
548 continue;
549 }
550
551 foreach($fields as $field_id => $value)
552 {
553 $a_user_data[$usr_id]['odf_' . $field_id] = $value;
554 }
555 }
556
557
558 // add last edit date
559 include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
560 foreach(ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getRepositoryObject()->getId()) as $usr_id => $edit_info)
561 {
562 if(!isset($a_user_data[$usr_id]))
563 {
564 continue;
565 }
566
567 include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
568 if($usr_id == $edit_info['update_user'])
569 {
570 $a_user_data[$usr_id]['odf_last_update'] = '';
571 $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
572 if(ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getRepositoryObject()->getType()))
573 {
574 $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
575 $a_user_data[$usr_id]['odf_info_txt'] .= (', '.ilDatePresentation::formatDate($edit_info['editing_time']));
576 }
577 }
578 else
579 {
580 $a_user_data[$usr_id]['odf_last_update'] = $edit_info['update_user'];
581 $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
582
583 $name = ilObjUser::_lookupName($edit_info['update_user']);
584 $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'].' '.$name['lastname'].', '.ilDatePresentation::formatDate($edit_info['editing_time']));
585 }
586 }
587 }
588
589 // consultation hours
590 if($this->isColumnSelected('consultation_hour'))
591 {
592 include_once './Services/Booking/classes/class.ilBookingEntry.php';
593 foreach(ilBookingEntry::lookupManagedBookingsForObject($this->getRepositoryObject()->getId(), $GLOBALS['ilUser']->getId()) as $buser => $booking)
594 {
595 if(isset($a_user_data[$buser]))
596 {
597 $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
598 $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
599 $a_user_data[$buser]['consultation_hours'] = $booking;
600 }
601 }
602 }
603
604 // always sort by name first
605 $a_user_data = ilUtil::sortArray(
606 $a_user_data,
607 'name',
608 $this->getOrderDirection()
609 );
610
611 return $this->setData($a_user_data);
612 }
613
614}
615?>
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 isObjectActive($a_obj_id)
__construct( $a_parent_obj, ilObject $rep_object, $a_show_learning_progress=false, $a_show_timings=false, $a_show_lp_status_sync=false)
Constructor.
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.
const LP_STATUS_COMPLETED
const LP_STATUS_FAILED
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
static _enabledLearningProgress()
check wether learing progress is enabled or not
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.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
setEnableHeader($a_enableheader)
Set Enable Header.
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.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
getId()
Get element id.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
setEnableNumInfo($a_val)
Set enable num info.
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.
setExternalSegmentation($a_val)
Set external segmentation.
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