ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilCourseParticipantsTableGUI.php
Go to the documentation of this file.
1<?php
2
3/*
4 +-----------------------------------------------------------------------------+
5 | ILIAS open source |
6 +-----------------------------------------------------------------------------+
7 | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
8 | |
9 | This program is free software; you can redistribute it and/or |
10 | modify it under the terms of the GNU General Public License |
11 | as published by the Free Software Foundation; either version 2 |
12 | of the License, or (at your option) any later version. |
13 | |
14 | This program is distributed in the hope that it will be useful, |
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 | GNU General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU General Public License |
20 | along with this program; if not, write to the Free Software |
21 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
22 +-----------------------------------------------------------------------------+
23 */
24
25include_once './Services/Membership/classes/class.ilParticipantsTableGUI.php';
34{
35 protected $type = 'admin';
36 protected $show_learning_progress = false;
37 protected $show_timings = false;
38 protected $show_edit_link = true;
39
40 protected $role_id = 0;
41
49 public function __construct(
50 $a_parent_obj,
51 $a_type = 'admin',
52 $show_content = true,
53 $a_show_learning_progress = false,
54 $a_show_timings = false,
55 $a_show_edit_link= true,
56 $a_role_id = 0,
57 $a_show_lp_status_sync = false)
58 {
59 global $lng, $ilCtrl;
60
61 $this->show_learning_progress = $a_show_learning_progress;
62 $this->show_timings = $a_show_timings;
63 $this->show_edit_link = $a_show_edit_link;
64 $this->show_lp_status_sync = $a_show_lp_status_sync;
65
66 // #13208
67 include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
69 {
70 $this->show_lp_status_sync = false;
71 }
72
73 $this->lng = $lng;
74 $this->lng->loadLanguageModule('crs');
75 $this->lng->loadLanguageModule('trac');
76 $this->ctrl = $ilCtrl;
77
78 $this->type = $a_type;
79 $this->setRoleId($a_role_id);
80
81 include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
82 $this->privacy = ilPrivacySettings::_getInstance();
83
84 // required before constructor for columns
85 $this->setId('crs_' . $a_type . '_' . $a_role_id.'_'. $a_parent_obj->object->getId());
86 parent::__construct($a_parent_obj, 'members');
87
88 $this->initSettings();
89
90 $this->setFormName('participants');
91
92 $this->addColumn('', 'f', "1");
93 $this->addColumn($this->lng->txt('name'), 'lastname', '20%');
94
95 $all_cols = $this->getSelectableColumns();
96 foreach($this->getSelectedColumns() as $col)
97 {
98 $this->addColumn($all_cols[$col]['txt'], $col);
99 }
100
101 if($this->show_learning_progress)
102 {
103 $this->addColumn($this->lng->txt('learning_progress'), 'progress');
104 }
105
106 if($this->privacy->enabledCourseAccessTimes())
107 {
108 $this->addColumn($this->lng->txt('last_access'), 'access_ut', '16em');
109 }
110
111 $this->addColumn($this->lng->txt('crs_member_passed'), 'passed');
112 if($this->show_lp_status_sync)
113 {
114 $this->addColumn($this->lng->txt('crs_member_passed_status_changed'), 'passed_info');
115 }
116
117 if($this->type == 'admin')
118 {
119 $this->setSelectAllCheckbox('admins');
120 $this->addColumn($this->lng->txt('crs_notification_list_title'), 'notification');
121 $this->addCommandButton('updateAdminStatus', $this->lng->txt('save'));
122 }
123 elseif($this->type == 'tutor')
124 {
125 $this->setSelectAllCheckbox('tutors');
126 $this->addColumn($this->lng->txt('crs_notification_list_title'), 'notification');
127 $this->addCommandButton('updateTutorStatus', $this->lng->txt('save'));
128 }
129 elseif($this->type == 'member')
130 {
131 $this->setSelectAllCheckbox('members');
132 $this->addColumn($this->lng->txt('crs_blocked'), 'blocked');
133 $this->addCommandButton('updateMemberStatus', $this->lng->txt('save'));
134 }
135 else
136 {
137 $this->setSelectAllCheckbox('roles');
138 $this->addColumn($this->lng->txt('crs_blocked'), 'blocked');
139 $this->addCommandButton('updateRoleStatus', $this->lng->txt('save'));
140
141 }
142 $this->addColumn($this->lng->txt(''), 'optional');
143
144 $this->setRowTemplate("tpl.show_participants_row.html", "Modules/Course");
145
146 if($show_content)
147 {
148 $this->setDefaultOrderField('lastname');
149 $this->enable('sort');
150 $this->enable('header');
151 $this->enable('numinfo');
152 $this->enable('select_all');
153 }
154 else
155 {
156 $this->disable('content');
157 $this->disable('header');
158 $this->disable('footer');
159 $this->disable('numinfo');
160 $this->disable('select_all');
161 }
162
163 $this->setEnableNumInfo(true);
164 $this->setExternalSegmentation(true);
165
166 $this->getItems();
167 $this->setTopCommands(true);
168 $this->setEnableHeader(true);
169 $this->setEnableTitle(true);
170 $this->initFilter();
171
172 $this->setShowRowsSelector(true);
173
174 include_once "Services/Certificate/classes/class.ilCertificate.php";
175 $this->enable_certificates = ilCertificate::isActive();
176 if($this->enable_certificates)
177 {
178 $this->enable_certificates = ilCertificate::isObjectActive($a_parent_obj->object->getId());
179 }
180 if($this->enable_certificates)
181 {
182 $lng->loadLanguageModule('certificate');
183 }
184 }
185
189 public function setRoleId($a_role_id)
190 {
191 $this->role_id = $a_role_id;
192 }
193
198 public function getRoleId()
199 {
200 return $this->role_id;
201 }
202
203 public function getItems()
204 {
205
206 }
207
208
216 public function fillRow($a_set)
217 {
218 global $ilAccess;
219
220 $this->tpl->setVariable('VAL_ID', $a_set['usr_id']);
221 $this->tpl->setVariable('VAL_NAME', $a_set['lastname'] . ', ' . $a_set['firstname']);
222
223 if(!$ilAccess->checkAccessOfUser($a_set['usr_id'], 'read', '', $this->getParentObject()->object->getRefId()) and
224 is_array($info = $ilAccess->getInfo()))
225 {
226 $this->tpl->setCurrentBlock('access_warning');
227 $this->tpl->setVariable('PARENT_ACCESS', $info[0]['text']);
228 $this->tpl->parseCurrentBlock();
229 }
230
231 if(!ilObjUser::_lookupActive($a_set['usr_id']))
232 {
233 $this->tpl->setCurrentBlock('access_warning');
234 $this->tpl->setVariable('PARENT_ACCESS', $this->lng->txt('usr_account_inactive'));
235 $this->tpl->parseCurrentBlock();
236 }
237
238
239 foreach($this->getSelectedColumns() as $field)
240 {
241 switch($field)
242 {
243 case 'gender':
244 $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
245 $this->tpl->setCurrentBlock('custom_fields');
246 $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
247 $this->tpl->parseCurrentBlock();
248 break;
249
250 case 'birthday':
251 $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
252 $this->tpl->setCurrentBlock('custom_fields');
253 $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
254 $this->tpl->parseCurrentBlock();
255 break;
256
257 case 'consultation_hour':
258 $this->tpl->setCurrentBlock('custom_fields');
259 $dts = array();
260 foreach((array) $a_set['consultation_hours'] as $ch)
261 {
263 new ilDateTime($ch['dt'],IL_CAL_UNIX),
264 new ilDateTime($ch['dtend'],IL_CAL_UNIX)
265 );
266 if($ch['explanation'])
267 {
268 $tmp .= ' ' . $ch['explanation'];
269 }
270 $dts[] = $tmp;
271 }
272 $dt_string = implode('<br />', $dts);
273 $this->tpl->setVariable('VAL_CUST',$dt_string);
274 $this->tpl->parseCurrentBlock();
275 break;
276
277 case 'prtf':
278 $tmp = array();
279 if(is_array($a_set['prtf']))
280 {
281 foreach($a_set['prtf'] as $prtf_url => $prtf_txt)
282 {
283 $tmp[] = '<a href="'.$prtf_url.'">'.$prtf_txt.'</a>';
284 }
285 }
286 $this->tpl->setVariable('VAL_CUST', implode('<br />', $tmp)) ;
287 break;
288
289
290 case 'odf_last_update':
291 $this->tpl->setCurrentBlock('custom_fields');
292 $this->tpl->setVariable('VAL_CUST',(string) $a_set['odf_info_txt']);
293 $this->tpl->parseCurrentBlock();
294 break;
295
296 default:
297 $this->tpl->setCurrentBlock('custom_fields');
298 $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
299 $this->tpl->parseCurrentBlock();
300 break;
301 }
302 }
303
304 if($this->privacy->enabledCourseAccessTimes())
305 {
306 $this->tpl->setVariable('VAL_ACCESS', $a_set['access_time']);
307 }
308 if($this->show_learning_progress)
309 {
310 $this->tpl->setCurrentBlock('lp');
311 switch($a_set['progress'])
312 {
314 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
315 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/complete.svg'));
316 break;
317
319 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
320 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/incomplete.svg'));
321 break;
322
324 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
325 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/not_attempted.svg'));
326 break;
327
329 $this->tpl->setVariable('LP_STATUS_ALT', $this->lng->txt($a_set['progress']));
330 $this->tpl->setVariable('LP_STATUS_PATH', ilUtil::getImagePath('scorm/failed.svg'));
331 break;
332 }
333 $this->tpl->parseCurrentBlock();
334 }
335 if($this->type == 'admin')
336 {
337 $this->tpl->setVariable('VAL_POSTNAME', 'admins');
338 $this->tpl->setVariable('VAL_NOTIFICATION_ID', $a_set['usr_id']);
339 $this->tpl->setVariable('VAL_NOTIFICATION_CHECKED', ($a_set['notification'] ? 'checked="checked"' : ''));
340 }
341 elseif($this->type == 'tutor')
342 {
343 $this->tpl->setVariable('VAL_POSTNAME', 'tutors');
344 $this->tpl->setVariable('VAL_NOTIFICATION_ID', $a_set['usr_id']);
345 $this->tpl->setVariable('VAL_NOTIFICATION_CHECKED', ($a_set['notification'] ? 'checked="checked"' : ''));
346 }
347 elseif($this->type == 'member')
348 {
349 $this->tpl->setCurrentBlock('blocked');
350 $this->tpl->setVariable('VAL_POSTNAME','members');
351 $this->tpl->setVariable('VAL_BLOCKED_ID',$a_set['usr_id']);
352 $this->tpl->setVariable('VAL_BLOCKED_CHECKED',($a_set['blocked'] ? 'checked="checked"' : ''));
353 $this->tpl->parseCurrentBlock();
354 }
355 else
356 {
357 $this->tpl->setCurrentBlock('blocked');
358 $this->tpl->setVariable('VAL_BLOCKED_ID', $a_set['usr_id']);
359 $this->tpl->setVariable('VAL_BLOCKED_CHECKED', ($a_set['blocked'] ? 'checked="checked"' : ''));
360 $this->tpl->parseCurrentBlock();
361
362 $this->tpl->setVariable('VAL_POSTNAME','roles');
363 }
364
365 $this->tpl->setVariable('VAL_PASSED_ID',$a_set['usr_id']);
366 $this->tpl->setVariable('VAL_PASSED_CHECKED',($a_set['passed'] ? 'checked="checked"' : ''));
367
368 if($this->show_lp_status_sync)
369 {
370 $this->tpl->setVariable('PASSED_INFO', $a_set["passed_info"]);
371 }
372
373 $this->showActionLinks($a_set);
374
375 if($a_set['passed'] && $this->enable_certificates)
376 {
377 $this->tpl->setCurrentBlock('link');
378 $this->tpl->setVariable('LINK_NAME', $this->ctrl->getLinkTarget($this->parent_obj, 'deliverCertificate'));
379 $this->tpl->setVariable('LINK_TXT', $this->lng->txt('download_certificate'));
380 $this->tpl->parseCurrentBlock();
381 }
382 $this->ctrl->clearParameters($this->parent_obj);
383
384 if($this->show_timings)
385 {
386 $this->ctrl->setParameterByClass('ilcoursecontentgui', 'member_id', $a_set['usr_id']);
387 $this->tpl->setCurrentBlock('link');
388 $this->tpl->setVariable('LINK_NAME', $this->ctrl->getLinkTargetByClass('ilcoursecontentgui', 'showUserTimings'));
389 $this->tpl->setVariable('LINK_TXT', $this->lng->txt('timings_timings'));
390 $this->tpl->parseCurrentBlock();
391 }
392 }
393
400 public function parse()
401 {
402 global $rbacreview;
403
405
406 include_once './Services/User/classes/class.ilUserQuery.php';
407
408 $additional_fields = $this->getSelectedColumns();
409 unset($additional_fields["firstname"]);
410 unset($additional_fields["lastname"]);
411 unset($additional_fields["last_login"]);
412 unset($additional_fields["access_until"]);
413 unset($additional_fields['consultation_hour']);
414 unset($additional_fields['prtf']);
415
416 $udf_ids = $usr_data_fields = $odf_ids = array();
417 foreach($additional_fields as $field)
418 {
419 if(substr($field, 0, 3) == 'udf')
420 {
421 $udf_ids[] = substr($field, 4);
422 continue;
423 }
424 if(substr($field, 0, 3) == 'odf')
425 {
426 $odf_ids[] = substr($field, 4);
427 continue;
428 }
429
430 $usr_data_fields[] = $field;
431 }
432
434 $this->getOrderField(),
435 $this->getOrderDirection(),
436 $this->getOffset(),
437 $this->getLimit(),
438 '',
439 '',
440 null,
441 false,
442 false,
443 0,
444 $this->getRoleId(),
445 null,
446 $usr_data_fields,
447 $part
448 );
449 foreach((array) $usr_data['set'] as $user)
450 {
451 $usr_ids[] = $user['usr_id'];
452 }
453
454 // merge course data
455 $course_user_data = $this->getParentObject()->readMemberData($usr_ids,
456 $this->type == 'admin',
457 $this->getSelectedColumns());
458 $a_user_data = array();
459 foreach((array) $usr_data['set'] as $ud)
460 {
461 $a_user_data[$ud['usr_id']] = array_merge($ud,$course_user_data[$ud['usr_id']]);
462
463 if($this->show_lp_status_sync)
464 {
465 // #9912 / #13208
466 $passed_info = "";
467 if($a_user_data[$ud['usr_id']]["passed_info"])
468 {
469 $pinfo = $a_user_data[$ud['usr_id']]["passed_info"];
470 if($pinfo["user_id"])
471 {
472 if($pinfo["user_id"] < 0)
473 {
474 $passed_info = $this->lng->txt("crs_passed_status_system");
475 }
476 else if($pinfo["user_id"] > 0)
477 {
478 $name = ilObjUser::_lookupName($pinfo["user_id"]);
479 $passed_info = $this->lng->txt("crs_passed_status_manual_by").": ".$name["login"];
480 }
481 }
482 if($pinfo["timestamp"])
483 {
484 $passed_info .= "<br />".ilDatePresentation::formatDate($pinfo["timestamp"]);
485 }
486 }
487 $a_user_data[$ud['usr_id']]["passed_info"] = $passed_info;
488 }
489 }
490
491 // Custom user data fields
492 if($udf_ids)
493 {
494 include_once './Services/User/classes/class.ilUserDefinedData.php';
495 $data = ilUserDefinedData::lookupData($usr_ids, $udf_ids);
496 foreach($data as $usr_id => $fields)
497 {
498 if(!$this->checkAcceptance($usr_id))
499 {
500 continue;
501 }
502
503 foreach($fields as $field_id => $value)
504 {
505 $a_user_data[$usr_id]['udf_' . $field_id] = $value;
506 }
507 }
508 }
509 // Object specific user data fields
510 if($odf_ids)
511 {
512 include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
513 $data = ilCourseUserData::_getValuesByObjId($this->getParentObject()->object->getId());
514 foreach($data as $usr_id => $fields)
515 {
516 // #7264: as we get data for all course members filter against user data
517 if(!$this->checkAcceptance($usr_id) || !in_array($usr_id, $usr_ids))
518 {
519 continue;
520 }
521
522 foreach($fields as $field_id => $value)
523 {
524 $a_user_data[$usr_id]['odf_' . $field_id] = $value;
525 }
526 }
527
528
529 // add last edit date
530 include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
531 foreach(ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getParentObject()->object->getId()) as $usr_id => $edit_info)
532 {
533 if(!isset($a_user_data[$usr_id]))
534 {
535 continue;
536 }
537
538 include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
539 if($usr_id == $edit_info['update_user'])
540 {
541 $a_user_data[$usr_id]['odf_last_update'] = '';
542 $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
543 if(ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getParentObject()->object->getType()))
544 {
545 $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
546 $a_user_data[$usr_id]['odf_info_txt'] .= (', '.ilDatePresentation::formatDate($edit_info['editing_time']));
547 }
548 }
549 else
550 {
551 $a_user_data[$usr_id]['odf_last_update'] = $edit_info['update_user'];
552 $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
553
554 $name = ilObjUser::_lookupName($edit_info['update_user']);
555 $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'].' '.$name['lastname'].', '.ilDatePresentation::formatDate($edit_info['editing_time']));
556 }
557 }
558 }
559
560 foreach($usr_data['set'] as $user)
561 {
562 // Check acceptance
563 if(!$this->checkAcceptance($user['usr_id']))
564 {
565 continue;
566 }
567 // DONE: accepted
568 foreach($usr_data_fields as $field)
569 {
570 $a_user_data[$user['usr_id']][$field] = $user[$field] ? $user[$field] : '';
571 }
572 }
573 // consultation hours
574 if($this->isColumnSelected('consultation_hour'))
575 {
576 include_once './Services/Booking/classes/class.ilBookingEntry.php';
577 foreach(ilBookingEntry::lookupManagedBookingsForObject($this->getParentObject()->object->getId(), $GLOBALS['ilUser']->getId()) as $buser => $booking)
578 {
579 if(isset($a_user_data[$buser]))
580 {
581 $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
582 $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
583 $a_user_data[$buser]['consultation_hours'] = $booking;
584 }
585 }
586 }
587 $this->setMaxCount($usr_data['cnt'] ? $usr_data['cnt'] : 0);
588 return $this->setData($a_user_data);
589 }
590
591}
592?>
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, $a_type='admin', $show_content=true, $a_show_learning_progress=false, $a_show_timings=false, $a_show_edit_link=true, $a_role_id=0, $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
_lookupActive($a_usr_id)
Check user account active.
static _lookupName($a_user_id)
lookup user name
static lookupEntriesByObjectId($a_obj_id)
Get entries by obj_id @global type $ilDB.
getSelectableColumns()
Get selectable columns.
showActionLinks($a_set)
show edit links
checkAcceptance($a_usr_id)
Check acceptance.
static _getInstance()
Get instance of ilPrivacySettings.
getSelectedColumns()
Get selected columns.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="")
Add a column to the header.
setEnableHeader($a_enableheader)
Set Enable Header.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
getParentObject()
Get parent object.
initFilter()
Init filter.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
setEnableNumInfo($a_val)
Set enable num info.
getLimit()
Get limit.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setFormName($a_formname)
Set Form name.
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.
getOffset()
Get offset.
setExternalSegmentation($a_val)
Set external segmentation.
setId($a_val)
Set id.
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.
setMaxCount($a_max_count)
set max.
disable($a_module_name)
diesables particular modules of table
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 getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
$GLOBALS['ct_recipient']
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40