ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilAttendanceList.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
4
14{
18 protected $logger = null;
19
20 protected $parent_gui;
21 protected $parent_obj; // [object]
22 protected $participants; // [object]
23 protected $waiting_list; // [object]
24 protected $callback; // [string|array]
25 protected $presets; // [array]
26 protected $role_data; // [array]
27 protected $roles; // [array]
28 protected $has_local_role; // [bool]
29 protected $blank_columns; // [array]
30 protected $title; // [string]
31 protected $description; // [string]
32 protected $pre_blanks; // [array]
33 protected $id; // [string]
34 protected $include_waiting_list; // [bool]
35 protected $include_subscribers; // [bool]
36 protected $user_filters; // [array]
37
46 public function __construct($a_parent_gui, $a_parent_obj, ilParticipants $a_participants_object = null, ilWaitingList $a_waiting_list = null)
47 {
48 global $DIC;
49
50 $this->logger = $DIC->logger()->mmbr();
51
52 $this->parent_gui = $a_parent_gui;
53 $this->parent_obj = $a_parent_obj;
54 $this->participants = $a_participants_object;
55 $this->waiting_list = $a_waiting_list;
56
57 // always available
58 $this->presets['name'] = array($DIC->language()->txt('name'), true);
59 $this->presets['login'] = array($DIC->language()->txt('login'), true);
60
61
62 // add exportable fields
64
65 $DIC->language()->loadLanguageModule('crs');
66
67 // roles
68 $roles = $this->participants->getRoles();
69
70 foreach ($roles as $role_id) {
72 switch (substr($title, 0, 8)) {
73 case 'il_crs_a':
74 case 'il_grp_a':
75 case 'il_lso_a':
76 $this->addRole($role_id, $DIC->language()->txt('event_tbl_admin'), 'admin');
77 break;
78
79 case 'il_crs_t':
80 $this->addRole($role_id, $DIC->language()->txt('event_tbl_tutor'), 'tutor');
81 break;
82
83 case 'il_crs_m':
84 case 'il_grp_m':
85 case 'il_lso_m':
86 $this->addRole($role_id, $DIC->language()->txt('event_tbl_member'), 'member');
87 break;
88
89 case 'il_sess_':
90 $this->addRole($role_id, $DIC->language()->txt('event_tbl_member'), 'member');
91 break;
92
93 // local
94 default:
95 $this->has_local_role = true;
96 $this->addRole($role_id, $title, 'local');
97 break;
98 }
99 }
100 }
101
106 protected function readOrderedExportableFields()
107 {
108 include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
109 include_once('Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php');
110 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
111 include_once('Services/User/classes/class.ilUserDefinedFields.php');
112
113 $field_info = ilExportFieldsInfo::_getInstanceByType($this->parent_obj->getType());
114 $field_info->sortExportFields();
115
116 foreach ($field_info->getExportableFields() as $field) {
117 switch ($field) {
118 case 'username':
119 case 'firstname':
120 case 'lastname':
121 continue 2;
122 }
123
124 ilLoggerFactory::getLogger('mmbr')->dump($field, ilLogLevel::DEBUG);
125 // Check if default enabled
126 $this->presets[$field] = array(
127 $GLOBALS['DIC']['lng']->txt($field),
128 false
129 );
130 }
131
132 // add udf fields
134 foreach ($udf->getExportableFields($this->parent_obj->getId()) as $field_id => $udf_data) {
135 $this->presets['udf_' . $field_id] = array(
136 $udf_data['field_name'],
137 false
138 );
139 }
140
141 // add cdf fields
142 include_once './Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php';
143 foreach (ilCourseDefinedFieldDefinition::_getFields($this->parent_obj->getId()) as $field_obj) {
144 $this->presets['cdf_' . $field_obj->getId()] = array(
145 $field_obj->getName(),
146 false
147 );
148 }
149 return true;
150 }
151
159 public function addPreset($a_id, $a_caption, $a_selected = false)
160 {
161 $this->presets[$a_id] = array($a_caption, $a_selected);
162 }
163
169 public function addBlank($a_caption)
170 {
171 $this->pre_blanks[] = $a_caption;
172 }
173
180 public function setTitle($a_title, $a_description = null)
181 {
182 $this->title = $a_title;
183 $this->description = $a_description;
184 }
185
193 protected function addRole($a_id, $a_caption, $a_type)
194 {
195 $this->role_data[$a_id] = array($a_caption, $a_type);
196 }
197
198
199
205 protected function setRoleSelection($a_role_ids)
206 {
207 $this->roles = $a_role_ids;
208 }
209
217 public function addUserFilter($a_id, $a_caption, $a_checked = false)
218 {
219 $this->user_filters[$a_id] = array($a_caption, $a_checked);
220 }
221
227 public function getNonMemberUserData(array &$a_res)
228 {
229 global $DIC;
230
231 $lng = $DIC['lng'];
232
233 $subscriber_ids = $this->participants->getSubscribers();
234
235 $user_ids = $subscriber_ids;
236
237 if ($this->waiting_list) {
238 $user_ids = array_merge($user_ids, $this->waiting_list->getUserIds());
239 }
240
241 // Finally read user profile data
242 $profile_data = ilObjUser::_readUsersProfileData($user_ids);
243 foreach ($profile_data as $user_id => $fields) {
244 foreach ((array) $fields as $field => $value) {
245 $a_res[$user_id][$field] = $value;
246 }
247 }
248
249 include_once './Services/User/classes/class.ilUserDefinedFields.php';
251
252 foreach ($udf->getExportableFields($this->parent_obj->getId()) as $field_id => $udf_data) {
253 foreach ($profile_data as $user_id => $field) {
254 include_once './Services/User/classes/class.ilUserDefinedData.php';
255 $udf_data = new ilUserDefinedData($user_id);
256 $a_res[$user_id]['udf_' . $field_id] = (string) $udf_data->get('f_' . $field_id);
257 }
258 }
259
260 if (sizeof($user_ids)) {
261 // object specific user data
262 include_once 'Modules/Course/classes/Export/class.ilCourseUserData.php';
263 $cdfs = ilCourseUserData::_getValuesByObjId($this->parent_obj->getId());
264
265 foreach (array_unique($user_ids) as $user_id) {
266 if ($tmp_obj = ilObjectFactory::getInstanceByObjId($user_id, false)) {
267 $a_res[$user_id]['login'] = $tmp_obj->getLogin();
268 $a_res[$user_id]['name'] = $tmp_obj->getLastname() . ', ' . $tmp_obj->getFirstname();
269
270 if (in_array($user_id, $subscriber_ids)) {
271 $a_res[$user_id]['status'] = $lng->txt('crs_subscriber');
272 } else {
273 $a_res[$user_id]['status'] = $lng->txt('crs_waiting_list');
274 }
275
276 foreach ((array) $cdfs[$user_id] as $field_id => $value) {
277 $a_res[$user_id]['cdf_' . $field_id] = (string) $value;
278 }
279 }
280 }
281 }
282 }
283
289 public function setBlankColumns(array $a_values)
290 {
291 if (!implode("", $a_values)) {
292 $a_values = array();
293 } else {
294 foreach ($a_values as $idx => $value) {
295 $a_values[$idx] = trim($value);
296 if ($a_values[$idx] == "") {
297 unset($a_values[$idx]);
298 }
299 }
300 }
301 $this->blank_columns = $a_values;
302 }
303
309 public function setCallback($a_callback)
310 {
311 $this->callback = $a_callback;
312 }
313
319 public function setId($a_value)
320 {
321 $this->id = (string) $a_value;
322 }
323
330 public function initForm($a_cmd = "")
331 {
332 global $DIC;
333
334 $ilCtrl = $DIC['ilCtrl'];
335 $lng = $DIC['lng'];
336
337 $lng->loadLanguageModule('crs');
338
339 include_once('./Services/Form/classes/class.ilPropertyFormGUI.php');
340 $form = new ilPropertyFormGUI();
341 $form->setFormAction($ilCtrl->getFormAction($this->parent_gui, $a_cmd));
342 $form->setTarget('_blank');
343 $form->setPreventDoubleSubmission(false);
344 $form->setTitle($lng->txt('sess_gen_attendance_list'));
345
346 $title = new ilTextInputGUI($lng->txt('title'), 'title');
347 $title->setValue($this->title);
348 $form->addItem($title);
349
350 $desc = new ilTextInputGUI($lng->txt('description'), 'desc');
351 $desc->setValue($this->description);
352 $form->addItem($desc);
353
354 if (sizeof($this->presets)) {
355 $preset = new ilCheckboxGroupInputGUI($lng->txt('user_detail'), 'preset');
356 $preset_value = array();
357 foreach ($this->presets as $id => $item) {
358 $preset->addOption(new ilCheckboxOption($item[0], $id));
359 if ($item[1]) {
360 $preset_value[] = $id;
361 }
362 }
363 $preset->setValue($preset_value);
364 $form->addItem($preset);
365 }
366
367 $blank = new ilTextInputGUI($lng->txt('event_blank_columns'), 'blank');
368 $blank->setMulti(true);
369 $form->addItem($blank);
370
371 if ($this->pre_blanks) {
372 $blank->setValue($this->pre_blanks);
373 }
374
375 $checked = array();
376
377 $chk_grp = new ilCheckboxGroupInputGUI($lng->txt('event_user_selection'), 'selection_of_users');
378
379 // participants by roles
380 foreach ($this->role_data as $role_id => $role_data) {
381 $title = ilObject::_lookupTitle($role_id);
382
383 $role_name = $role_id;
384 if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_adm') {
385 $role_name = 'adm';
386 }
387 if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_mem') {
388 $role_name = 'mem';
389 }
390 if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_tut') {
391 $role_name = 'tut';
392 }
393
394 $chk = new ilCheckboxOption(sprintf($lng->txt('event_user_selection_include_role'), $role_data[0]), 'role_' . $role_name);
395 $checked[] = 'role_' . $role_name;
396 $chk_grp->addOption($chk);
397 }
398
399 if ($this->waiting_list) {
400 $chk = new ilCheckboxOption($lng->txt('event_user_selection_include_requests'), 'subscr');
401 $chk_grp->addOption($chk);
402
403 $chk = new ilCheckboxOption($lng->txt('event_user_selection_include_waiting_list'), 'wlist');
404 $chk_grp->addOption($chk);
405 }
406
407 if ($this->user_filters) {
408 foreach ($this->user_filters as $sub_id => $sub_item) {
409 $chk = new ilCheckboxOption(
410 sprintf($lng->txt('event_user_selection_include_filter'), $sub_item[0]),
411 'members_' . $sub_id
412 );
413 if ($sub_item[1]) {
414 $checked[] = 'members_' . $sub_id;
415 }
416 $chk_grp->addOption($chk);
417 }
418 }
419 $chk_grp->setValue($checked);
420 $form->addItem($chk_grp);
421
422 $form->addCommandButton($a_cmd, $lng->txt('sess_print_attendance_list'));
423
424 if ($this->id && $a_cmd) {
425 include_once "Services/User/classes/class.ilUserFormSettings.php";
426 $settings = new ilUserFormSettings($this->id);
427 if (!$settings->hasStoredEntry()) {
428 $settings = new ilUserFormSettings($this->parent_obj->getType() . 's_pview', -1);
429 }
430
431 $settings->deleteValue('desc'); // #11340
432 $settings->exportToForm($form);
433 } elseif ($a_cmd == 'printForMembersOutput') {
434 include_once "Services/User/classes/class.ilUserFormSettings.php";
435 $settings = new ilUserFormSettings($this->parent_obj->getType() . 's_pview_' . $this->parent_obj->getId(), -1);
436 if (!$settings->hasStoredEntry()) {
437 // init from global defaults
438 $settings = new ilUserFormSettings($this->parent_obj->getType() . 's_pview', -1);
439 }
440
441 $settings->deleteValue('desc'); // #11340
442 $settings->exportToForm($form, true);
443 }
444
445 return $form;
446 }
447
451 public function initFromForm()
452 {
453 $form = $this->initForm();
454 if ($form->checkInput()) {
455 foreach (array_keys($this->presets) as $id) {
456 $this->presets[$id][1] = false;
457 }
458 foreach ((array) $form->getInput('preset') as $value) {
459 if (isset($this->presets[$value])) {
460 $this->presets[$value][1] = true;
461 } else {
462 $this->addPreset($value, $value, true);
463 }
464 }
465
466 $this->setTitle($form->getInput('title'), $form->getInput('desc'));
467 $this->setBlankColumns($form->getInput('blank'));
468
469 $selection_of_users = (array) $form->getInput('selection_of_users'); // #18238
470
471 $roles = array();
472 foreach (array_keys($this->role_data) as $role_id) {
473 $title = ilObject::_lookupTitle($role_id);
474 $role_name = $role_id;
475 if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_adm') {
476 $role_name = 'adm';
477 }
478 if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_mem') {
479 $role_name = 'mem';
480 }
481 if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_tut') {
482 $role_name = 'tut';
483 }
484
485
486 if (in_array('role_' . $role_name, (array) $selection_of_users)) {
487 $roles[] = $role_id;
488 }
489 }
490 $this->setRoleSelection($roles);
491
492 // not in sessions
493 if ($this->waiting_list) {
494 $this->include_subscribers = (bool) in_array('subscr', $selection_of_users);
495 $this->include_waiting_list = (bool) in_array('wlist', $selection_of_users);
496 }
497
498 if ($this->user_filters) {
499 foreach (array_keys($this->user_filters) as $msub_id) {
500 $this->user_filters[$msub_id][2] = (bool) in_array("members_" . $msub_id, $selection_of_users);
501 }
502 }
503
504 if ($this->id) {
505 #$form->setValuesByPost();
506
507 #include_once "Services/User/classes/class.ilUserFormSettings.php";
508 #$settings = new ilUserFormSettings($this->id);
509 #$settings->deleteValue('desc'); // #11340
510 #$settings->importFromForm($form);
511 #$settings->store();
512 }
513 }
514 }
515
521 public function getFullscreenHTML()
522 {
523 $tpl = new ilTemplate('tpl.main.html', true, true);
524 $tpl->setBodyClass("ilBodyPrint");
525
526 // load style sheet depending on user's settings
527 $location_stylesheet = ilUtil::getStyleSheetLocation();
528 $tpl->setVariable("LOCATION_STYLESHEET", $location_stylesheet);
529
530 $tpl->setVariable("BODY_ATTRIBUTES", 'onload="window.print()"');
531 $tpl->setVariable("CONTENT", $this->getHTML());
532
533 return $tpl->show();
534 }
535
541 public function getHTML()
542 {
543 $tpl = new ilTemplate('tpl.attendance_list_print.html', true, true, 'Services/Membership');
544
545
546 // title
547
550
551 $tpl->setVariable('TXT_TITLE', $this->title);
552 if ($this->description) {
553 $tpl->setVariable('TXT_DESCRIPTION', $this->description . " (" . $time . ")");
554 } else {
555 $tpl->setVariable('TXT_DESCRIPTION', $time);
556 }
557
558 ilLoggerFactory::getLogger('mmbr')->dump($this->presets, ilLogLevel::DEBUG);
559 // header
560
561 $tpl->setCurrentBlock('head_item');
562 foreach ($this->presets as $id => $item) {
563 if ($item[1]) {
564 $tpl->setVariable('TXT_HEAD', $item[0]);
565 $tpl->parseCurrentBlock();
566 }
567 }
568
569 if ($this->blank_columns) {
570 foreach ($this->blank_columns as $blank) {
571 $tpl->setVariable('TXT_HEAD', $blank);
572 $tpl->parseCurrentBlock();
573 }
574 }
575
576
577 // handle members
578
579 $valid_user_ids = $filters = array();
580
581 if ($this->roles) {
582 if ($this->has_local_role) {
583 $members = array();
584 foreach ($this->participants->getMembers() as $member_id) {
585 foreach ($this->participants->getAssignedRoles($member_id) as $role_id) {
586 $members[$role_id][] = $member_id;
587 }
588 }
589 } else {
590 $members = $this->participants->getMembers();
591 }
592
593 foreach ($this->roles as $role_id) {
594 switch ($this->role_data[$role_id][1]) {
595 case "admin":
596 $valid_user_ids = array_merge($valid_user_ids, $this->participants->getAdmins());
597 break;
598
599 case "tutor":
600 $valid_user_ids = array_merge($valid_user_ids, $this->participants->getTutors());
601 break;
602
603 // member/local
604 default:
605 if (!$this->has_local_role) {
606 $valid_user_ids = array_merge($valid_user_ids, (array) $members);
607 } else {
608 $valid_user_ids = array_merge($valid_user_ids, (array) $members[$role_id]);
609 }
610 break;
611 }
612 }
613 }
614
615 if ($this->include_subscribers) {
616 $valid_user_ids = array_merge($valid_user_ids, $this->participants->getSubscribers());
617 }
618
619 if ($this->include_waiting_list) {
620 $valid_user_ids = array_merge($valid_user_ids, $this->waiting_list->getUserIds());
621 }
622
623 if ($this->user_filters) {
624 foreach ($this->user_filters as $sub_id => $sub_item) {
625 $filters[$sub_id] = (bool) $sub_item[2];
626 }
627 }
628
629 $valid_user_ids = ilUtil::_sortIds(array_unique($valid_user_ids), 'usr_data', 'lastname', 'usr_id');
630 foreach ($valid_user_ids as $user_id) {
631 if ($this->callback) {
632 $user_data = call_user_func_array($this->callback, array($user_id, $filters));
633 if (!$user_data) {
634 continue;
635 }
636
637 $tpl->setCurrentBlock("row_preset");
638 foreach ($this->presets as $id => $item) {
639 if ($item[1]) {
640 switch ($id) {
641 case 'org_units':
642 $value = (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($user_id);
643 break;
644
645 case "name":
646 if (!$user_data[$id]) {
647 $name = ilObjUser::_lookupName($user_id);
648 $value = $name["lastname"] . ", " . $name["firstname"];
649 break;
650 }
651
652
653 // no break
654 case "login":
655 if (!$user_data[$id]) {
656 $value = ilObjUser::_lookupLogin($user_id);
657 break;
658 }
659
660 // no break
661 default:
662 $value = (string) $user_data[$id];
663 break;
664 }
665 $tpl->setVariable("TXT_PRESET", (string) $value);
666 $tpl->parseCurrentBlock();
667 }
668 }
669 }
670
671 if ($this->blank_columns) {
672 for ($loop = 0; $loop < sizeof($this->blank_columns); $loop++) {
673 $tpl->touchBlock('row_blank');
674 }
675 }
676
677 $tpl->touchBlock("member_row");
678 }
679
680 return $tpl->get();
681 }
682}
$tpl
Definition: ilias.php:10
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
Base class for attendance lists.
setCallback($a_callback)
Set participant detail callback.
getHTML()
render attendance list
initForm($a_cmd="")
Init form.
addRole($a_id, $a_caption, $a_type)
Add role.
addPreset($a_id, $a_caption, $a_selected=false)
Add user field.
setRoleSelection($a_role_ids)
Set role selection.
addBlank($a_caption)
Add blank column preset.
__construct($a_parent_gui, $a_parent_obj, ilParticipants $a_participants_object=null, ilWaitingList $a_waiting_list=null)
Constructor.
setTitle($a_title, $a_description=null)
Set titles.
getFullscreenHTML()
render list in fullscreen mode
getNonMemberUserData(array &$a_res)
Get user data for subscribers and waiting list.
readOrderedExportableFields()
read object export fields
addUserFilter($a_id, $a_caption, $a_checked=false)
Add user filter.
setBlankColumns(array $a_values)
Add blank columns.
setId($a_value)
Set id (used for user form settings)
initFromForm()
Set list attributes from post values.
This class represents a property in a property form.
This class represents an option in a checkbox group.
static _getFields($a_container_id, $a_sort=IL_CDF_SORT_NAME)
Get all fields of a container.
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 setUseRelativeDates($a_status)
set use relative dates
@classDescription Date and time handling
static _getInstanceByType($a_type)
Get Singleton Instance.
static getLogger($a_component_id)
Get component logger.
static _lookupLogin($a_user_id)
lookup login
static _lookupName($a_user_id)
lookup user name
static _readUsersProfileData($a_user_ids)
STATIC METHOD get user data of selected users.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static _lookupTitle($a_id)
lookup object title
This class represents a property form user interface.
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
Class ilUserDefinedData.
static _getInstance()
Get instance.
static _sortIds($a_ids, $a_table, $a_field, $a_id_name)
Function that sorts ids by a given table field using WHERE IN E.g: __sort(array(6,...
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
Base class for course and group waiting lists.
global $ilCtrl
Definition: ilias.php:18
$time
Definition: cron.php:21
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7
$lng
$a_type
Definition: workflow.php:92