ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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  foreach ($roles as $role_id) {
70  $title = ilObject::_lookupTitle($role_id);
71  switch (substr($title, 0, 8)) {
72  case 'il_crs_a':
73  case 'il_grp_a':
74  $this->addRole($role_id, $DIC->language()->txt('event_tbl_admin'), 'admin');
75  break;
76 
77  case 'il_crs_t':
78  $this->addRole($role_id, $DIC->language()->txt('event_tbl_tutor'), 'tutor');
79  break;
80 
81  case 'il_crs_m':
82  case 'il_grp_m':
83  $this->addRole($role_id, $DIC->language()->txt('event_tbl_member'), 'member');
84  break;
85 
86  case 'il_sess_':
87  $this->addRole($role_id, $DIC->language()->txt('event_tbl_member'), 'member');
88  break;
89 
90  // local
91  default:
92  $this->has_local_role = true;
93  $this->addRole($role_id, $title, 'local');
94  break;
95  }
96  }
97  }
98 
103  protected function readOrderedExportableFields()
104  {
105  include_once('Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
106  include_once('Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php');
107  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
108  include_once('Services/User/classes/class.ilUserDefinedFields.php');
109 
110  $field_info = ilExportFieldsInfo::_getInstanceByType($this->parent_obj->getType());
111  $field_info->sortExportFields();
112 
113  foreach ($field_info->getExportableFields() as $field) {
114  switch ($field) {
115  case 'username':
116  case 'firstname':
117  case 'lastname':
118  continue 2;
119  }
120 
121  ilLoggerFactory::getLogger('mem')->dump($field, ilLogLevel::DEBUG);
122  // Check if default enabled
123  $this->presets[$field] = array(
124  $GLOBALS['lng']->txt($field),
125  false
126  );
127  }
128 
129  // add udf fields
131  foreach ($udf->getExportableFields($this->parent_obj->getId()) as $field_id => $udf_data) {
132  $this->presets['udf_' . $field_id] = array(
133  $udf_data['field_name'],
134  false
135  );
136  }
137 
138  // add cdf fields
139  include_once './Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php';
140  foreach (ilCourseDefinedFieldDefinition::_getFields($this->parent_obj->getId()) as $field_obj) {
141  $this->presets['cdf_' . $field_obj->getId()] = array(
142  $field_obj->getName(),
143  false
144  );
145  }
146  return true;
147  }
148 
156  public function addPreset($a_id, $a_caption, $a_selected = false)
157  {
158  $this->presets[$a_id] = array($a_caption, $a_selected);
159  }
160 
166  public function addBlank($a_caption)
167  {
168  $this->pre_blanks[] = $a_caption;
169  }
170 
177  public function setTitle($a_title, $a_description = null)
178  {
179  $this->title = $a_title;
180  $this->description = $a_description;
181  }
182 
190  protected function addRole($a_id, $a_caption, $a_type)
191  {
192  $this->role_data[$a_id] = array($a_caption, $a_type);
193  }
194 
195 
196 
202  protected function setRoleSelection($a_role_ids)
203  {
204  $this->roles = $a_role_ids;
205  }
206 
214  public function addUserFilter($a_id, $a_caption, $a_checked = false)
215  {
216  $this->user_filters[$a_id] = array($a_caption, $a_checked);
217  }
218 
224  public function getNonMemberUserData(array &$a_res)
225  {
226  global $lng;
227 
228  $subscriber_ids = $this->participants->getSubscribers();
229 
230  $user_ids = $subscriber_ids;
231 
232  if ($this->waiting_list) {
233  $user_ids = array_merge($user_ids, $this->waiting_list->getUserIds());
234  }
235 
236  // Finally read user profile data
237  $profile_data = ilObjUser::_readUsersProfileData($user_ids);
238  foreach ($profile_data as $user_id => $fields) {
239  foreach ((array) $fields as $field => $value) {
240  $a_res[$user_id][$field] = $value;
241  }
242  }
243 
244  include_once './Services/User/classes/class.ilUserDefinedFields.php';
246 
247  foreach ($udf->getExportableFields($this->parent_obj->getId()) as $field_id => $udf_data) {
248  foreach ($profile_data as $user_id => $field) {
249  include_once './Services/User/classes/class.ilUserDefinedData.php';
250  $udf_data = new ilUserDefinedData($user_id);
251  $a_res[$user_id]['udf_' . $field_id] = (string) $udf_data->get('f_' . $field_id);
252  }
253  }
254 
255  if (sizeof($user_ids)) {
256  // object specific user data
257  include_once 'Modules/Course/classes/Export/class.ilCourseUserData.php';
258  $cdfs = ilCourseUserData::_getValuesByObjId($this->parent_obj->getId());
259 
260  foreach (array_unique($user_ids) as $user_id) {
261  if ($tmp_obj = ilObjectFactory::getInstanceByObjId($user_id, false)) {
262  $a_res[$user_id]['login'] = $tmp_obj->getLogin();
263  $a_res[$user_id]['name'] = $tmp_obj->getLastname() . ', ' . $tmp_obj->getFirstname();
264 
265  if (in_array($user_id, $subscriber_ids)) {
266  $a_res[$user_id]['status'] = $lng->txt('crs_subscriber');
267  } else {
268  $a_res[$user_id]['status'] = $lng->txt('crs_waiting_list');
269  }
270 
271  foreach ((array) $cdfs[$user_id] as $field_id => $value) {
272  $a_res[$user_id]['cdf_' . $field_id] = (string) $value;
273  }
274  }
275  }
276  }
277  }
278 
284  public function setBlankColumns(array $a_values)
285  {
286  if (!implode("", $a_values)) {
287  $a_values = array();
288  } else {
289  foreach ($a_values as $idx => $value) {
290  $a_values[$idx] = trim($value);
291  if ($a_values[$idx] == "") {
292  unset($a_values[$idx]);
293  }
294  }
295  }
296  $this->blank_columns = $a_values;
297  }
298 
304  public function setCallback($a_callback)
305  {
306  $this->callback = $a_callback;
307  }
308 
314  public function setId($a_value)
315  {
316  $this->id = (string) $a_value;
317  }
318 
325  public function initForm($a_cmd = "")
326  {
327  global $ilCtrl, $lng;
328 
329  $lng->loadLanguageModule('crs');
330 
331  include_once('./Services/Form/classes/class.ilPropertyFormGUI.php');
332  $form = new ilPropertyFormGUI();
333  $form->setFormAction($ilCtrl->getFormAction($this->parent_gui, $a_cmd));
334  $form->setTarget('_blank');
335  $form->setPreventDoubleSubmission(false);
336  $form->setTitle($lng->txt('sess_gen_attendance_list'));
337 
338  $title = new ilTextInputGUI($lng->txt('title'), 'title');
339  $title->setValue($this->title);
340  $form->addItem($title);
341 
342  $desc = new ilTextInputGUI($lng->txt('description'), 'desc');
343  $desc->setValue($this->description);
344  $form->addItem($desc);
345 
346  if (sizeof($this->presets)) {
347  $preset = new ilCheckboxGroupInputGUI($lng->txt('user_detail'), 'preset');
348  $preset_value = array();
349  foreach ($this->presets as $id => $item) {
350  $preset->addOption(new ilCheckboxOption($item[0], $id));
351  if ($item[1]) {
352  $preset_value[] = $id;
353  }
354  }
355  $preset->setValue($preset_value);
356  $form->addItem($preset);
357  }
358 
359  $blank = new ilTextInputGUI($lng->txt('event_blank_columns'), 'blank');
360  $blank->setMulti(true);
361  $form->addItem($blank);
362 
363  if ($this->pre_blanks) {
364  $blank->setValue($this->pre_blanks);
365  }
366 
367  $checked = array();
368 
369  $chk_grp = new ilCheckboxGroupInputGUI($lng->txt('event_user_selection'), 'selection_of_users');
370 
371  // participants by roles
372  foreach ($this->role_data as $role_id => $role_data) {
373  $title = ilObject::_lookupTitle($role_id);
374 
375  $role_name = $role_id;
376  if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_adm') {
377  $role_name = 'adm';
378  }
379  if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_mem') {
380  $role_name = 'mem';
381  }
382  if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_tut') {
383  $role_name = 'tut';
384  }
385 
386  $chk = new ilCheckboxOption(sprintf($lng->txt('event_user_selection_include_role'), $role_data[0]), 'role_' . $role_name);
387  $checked[] = 'role_' . $role_name;
388  $chk_grp->addOption($chk);
389  }
390 
391  if ($this->waiting_list) {
392  $chk = new ilCheckboxOption($lng->txt('event_user_selection_include_requests'), 'subscr');
393  $chk_grp->addOption($chk);
394 
395  $chk = new ilCheckboxOption($lng->txt('event_user_selection_include_waiting_list'), 'wlist');
396  $chk_grp->addOption($chk);
397  }
398 
399  if ($this->user_filters) {
400  foreach ($this->user_filters as $sub_id => $sub_item) {
401  $chk = new ilCheckboxOption(
402  sprintf($lng->txt('event_user_selection_include_filter'), $sub_item[0]),
403  'members_' . $sub_id
404  );
405  if ($sub_item[1]) {
406  $checked[] = 'members_' . $sub_id;
407  }
408  $chk_grp->addOption($chk);
409  }
410  }
411  $chk_grp->setValue($checked);
412  $form->addItem($chk_grp);
413 
414  $form->addCommandButton($a_cmd, $lng->txt('sess_print_attendance_list'));
415 
416  if ($this->id && $a_cmd) {
417  include_once "Services/User/classes/class.ilUserFormSettings.php";
418  $settings = new ilUserFormSettings($this->id);
419  if (!$settings->hasStoredEntry()) {
420  $settings = new ilUserFormSettings($this->parent_obj->getType() . 's_pview', -1);
421  }
422 
423  $settings->deleteValue('desc'); // #11340
424  $settings->exportToForm($form);
425  } elseif ($a_cmd == 'printForMembersOutput') {
426  include_once "Services/User/classes/class.ilUserFormSettings.php";
427  $settings = new ilUserFormSettings($this->parent_obj->getType() . 's_pview_' . $this->parent_obj->getId(), -1);
428  if (!$settings->hasStoredEntry()) {
429  // init from global defaults
430  $settings = new ilUserFormSettings($this->parent_obj->getType() . 's_pview', -1);
431  }
432 
433  $settings->deleteValue('desc'); // #11340
434  $settings->exportToForm($form, true);
435  }
436 
437  return $form;
438  }
439 
443  public function initFromForm()
444  {
445  $form = $this->initForm();
446  if ($form->checkInput()) {
447  foreach (array_keys($this->presets) as $id) {
448  $this->presets[$id][1] = false;
449  }
450  foreach ((array) $form->getInput('preset') as $value) {
451  if (isset($this->presets[$value])) {
452  $this->presets[$value][1] = true;
453  } else {
454  $this->addPreset($value, $value, true);
455  }
456  }
457 
458  $this->setTitle($form->getInput('title'), $form->getInput('desc'));
459  $this->setBlankColumns($form->getInput('blank'));
460 
461  $selection_of_users = (array) $form->getInput('selection_of_users'); // #18238
462 
463  $roles = array();
464  foreach (array_keys($this->role_data) as $role_id) {
465  $title = ilObject::_lookupTitle($role_id);
466  $role_name = $role_id;
467  if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_adm') {
468  $role_name = 'adm';
469  }
470  if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_mem') {
471  $role_name = 'mem';
472  }
473  if (substr($title, 0, 10) == 'il_' . $this->parent_obj->getType() . '_tut') {
474  $role_name = 'tut';
475  }
476 
477 
478  if (in_array('role_' . $role_name, (array) $selection_of_users)) {
479  $roles[] = $role_id;
480  }
481  }
482  $this->setRoleSelection($roles);
483 
484  // not in sessions
485  if ($this->waiting_list) {
486  $this->include_subscribers = (bool) in_array('subscr', $selection_of_users);
487  $this->include_waiting_list = (bool) in_array('wlist', $selection_of_users);
488  }
489 
490  if ($this->user_filters) {
491  foreach (array_keys($this->user_filters) as $msub_id) {
492  $this->user_filters[$msub_id][2] = (bool) in_array("members_" . $msub_id, $selection_of_users);
493  }
494  }
495 
496  if ($this->id) {
497  #$form->setValuesByPost();
498 
499  #include_once "Services/User/classes/class.ilUserFormSettings.php";
500  #$settings = new ilUserFormSettings($this->id);
501  #$settings->deleteValue('desc'); // #11340
502  #$settings->importFromForm($form);
503  #$settings->store();
504  }
505  }
506  }
507 
513  public function getFullscreenHTML()
514  {
515  $tpl = new ilTemplate('tpl.main.html', true, true);
516  $tpl->setBodyClass("ilBodyPrint");
517 
518  // load style sheet depending on user's settings
519  $location_stylesheet = ilUtil::getStyleSheetLocation();
520  $tpl->setVariable("LOCATION_STYLESHEET", $location_stylesheet);
521 
522  $tpl->setVariable("BODY_ATTRIBUTES", 'onload="window.print()"');
523  $tpl->setVariable("CONTENT", $this->getHTML());
524 
525  return $tpl->show();
526  }
527 
533  public function getHTML()
534  {
535  $tpl = new ilTemplate('tpl.attendance_list_print.html', true, true, 'Services/Membership');
536 
537 
538  // title
539 
542 
543  $tpl->setVariable('TXT_TITLE', $this->title);
544  if ($this->description) {
545  $tpl->setVariable('TXT_DESCRIPTION', $this->description . " (" . $time . ")");
546  } else {
547  $tpl->setVariable('TXT_DESCRIPTION', $time);
548  }
549 
550  ilLoggerFactory::getLogger('crs')->dump($this->presets);
551  // header
552 
553  $tpl->setCurrentBlock('head_item');
554  foreach ($this->presets as $id => $item) {
555  if ($item[1]) {
556  $tpl->setVariable('TXT_HEAD', $item[0]);
557  $tpl->parseCurrentBlock();
558  }
559  }
560 
561  if ($this->blank_columns) {
562  foreach ($this->blank_columns as $blank) {
563  $tpl->setVariable('TXT_HEAD', $blank);
564  $tpl->parseCurrentBlock();
565  }
566  }
567 
568 
569  // handle members
570 
571  $valid_user_ids = $filters = array();
572 
573  if ($this->roles) {
574  if ($this->has_local_role) {
575  $members = array();
576  foreach ($this->participants->getMembers() as $member_id) {
577  foreach ($this->participants->getAssignedRoles($member_id) as $role_id) {
578  $members[$role_id][] = $member_id;
579  }
580  }
581  } else {
582  $members = $this->participants->getMembers();
583  }
584 
585  foreach ($this->roles as $role_id) {
586  switch ($this->role_data[$role_id][1]) {
587  case "admin":
588  $valid_user_ids = array_merge($valid_user_ids, $this->participants->getAdmins());
589  break;
590 
591  case "tutor":
592  $valid_user_ids = array_merge($valid_user_ids, $this->participants->getTutors());
593  break;
594 
595  // member/local
596  default:
597  if (!$this->has_local_role) {
598  $valid_user_ids = array_merge($valid_user_ids, (array) $members);
599  } else {
600  $valid_user_ids = array_merge($valid_user_ids, (array) $members[$role_id]);
601  }
602  break;
603  }
604  }
605  }
606 
607  if ($this->include_subscribers) {
608  $valid_user_ids = array_merge($valid_user_ids, $this->participants->getSubscribers());
609  }
610 
611  if ($this->include_waiting_list) {
612  $valid_user_ids = array_merge($valid_user_ids, $this->waiting_list->getUserIds());
613  }
614 
615  if ($this->user_filters) {
616  foreach ($this->user_filters as $sub_id => $sub_item) {
617  $filters[$sub_id] = (bool) $sub_item[2];
618  }
619  }
620 
621  $valid_user_ids = ilUtil::_sortIds(array_unique($valid_user_ids), 'usr_data', 'lastname', 'usr_id');
622 
623 
624  // rows
625 
626  foreach ($valid_user_ids as $user_id) {
627  if ($this->callback) {
628  $user_data = call_user_func_array($this->callback, array($user_id, $filters));
629  if (!$user_data) {
630  continue;
631  }
632 
633  $tpl->setCurrentBlock("row_preset");
634  foreach ($this->presets as $id => $item) {
635  if ($item[1]) {
636  switch ($id) {
637  case "name":
638  if (!$user_data[$id]) {
639  $name = ilObjUser::_lookupName($user_id);
640  $value = $name["lastname"] . ", " . $name["firstname"];
641  break;
642  }
643 
644 
645  // no break
646  case "login":
647  if (!$user_data[$id]) {
648  $value = ilObjUser::_lookupLogin($user_id);
649  break;
650  }
651 
652  // no break
653  default:
654  $value = (string) $user_data[$id];
655  break;
656  }
657  $tpl->setVariable("TXT_PRESET", (string) $value);
658  $tpl->parseCurrentBlock();
659  }
660  }
661  }
662 
663  if ($this->blank_columns) {
664  for ($loop = 0; $loop < sizeof($this->blank_columns); $loop++) {
665  $tpl->touchBlock('row_blank');
666  }
667  }
668 
669  $tpl->touchBlock("member_row");
670  }
671 
672  return $tpl->get();
673  }
674 }
static _lookupLogin($a_user_id)
lookup login
static _lookupName($a_user_id)
lookup user name
Add rich text string
This class represents an option in a checkbox group.
static _getInstance()
Get instance.
deleteValue($a_option)
Delete value.
Class ilUserDefinedData.
Base class for course and group waiting lists.
setId($a_value)
Set id (used for user form settings)
This class represents a property form user interface.
setTitle($a_title, $a_description=null)
Set titles.
global $DIC
Definition: saml.php:7
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
$tpl
Definition: ilias.php:10
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
getFullscreenHTML()
render list in fullscreen mode
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false)
Format a date public.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static setUseRelativeDates($a_status)
set use relative dates
static _lookupTitle($a_id)
lookup object title
getNonMemberUserData(array &$a_res)
Get user data for subscribers and waiting list.
addBlank($a_caption)
Add blank column preset.
initForm($a_cmd="")
Init form.
const IL_CAL_UNIX
static _readUsersProfileData($a_user_ids)
STATIC METHOD get user data of selected users.
Base class for attendance lists.
global $ilCtrl
Definition: ilias.php:18
$time
Definition: cron.php:21
$a_type
Definition: workflow.php:92
addPreset($a_id, $a_caption, $a_selected=false)
Add user field.
if($format !==null) $name
Definition: metadata.php:146
if(isset($_POST['submit'])) $form
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,7),&#39;usr_data&#39;,&#39;lastname&#39;,&#39;usr_id&#39;) => sorts by lastname.
setBlankColumns(array $a_values)
Add blank columns.
static _getInstanceByType($a_type)
Get Singleton Instance.
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
Date and time handling
addRole($a_id, $a_caption, $a_type)
Add role.
readOrderedExportableFields()
read object export fields
This class represents a property in a property form.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Create styles array
The data for the language used.
__construct($a_parent_gui, $a_parent_obj, ilParticipants $a_participants_object=null, ilWaitingList $a_waiting_list=null)
Constructor.
setCallback($a_callback)
Set participant detail callback.
setMulti($a_multi, $a_sortable=false, $a_addremove=true)
Set Multi.
setRoleSelection($a_role_ids)
Set role selection.
global $lng
Definition: privfeed.php:17
static getLogger($a_component_id)
Get component logger.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
setValue($a_value)
Set Value.
getHTML()
render attendance list
addUserFilter($a_id, $a_caption, $a_checked=false)
Add user filter.
initFromForm()
Set list attributes from post values.
static _getFields($a_container_id, $a_sort=IL_CDF_SORT_NAME)
Get all fields of a container.