ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilSessionOverviewGUI.php
Go to the documentation of this file.
1 <?php
2 
20 declare(strict_types=1);
21 
30 {
31  protected ilLanguage $lng;
33  protected ilCtrl $ctrl;
36  protected ilTree $tree;
38  protected int $course_ref_id = 0;
39  protected int $course_id = 0;
41  protected ilCSVWriter $csv;
42 
43  public function __construct(int $a_crs_ref_id, ilParticipants $a_members)
44  {
45  global $DIC;
46 
47  $this->tpl = $DIC->ui()->mainTemplate();
48  $this->ctrl = $DIC->ctrl();
49  $this->lng = $DIC->language();
50  $this->toolbar = $DIC->toolbar();
51  $this->error = $DIC['ilErr'];
52  $this->tree = $DIC->repositoryTree();
53  $this->access = $DIC->access();
54 
55  $this->lng->loadLanguageModule('event');
56  $this->lng->loadLanguageModule('crs');
57 
58  $this->course_ref_id = $a_crs_ref_id;
59  $this->course_id = ilObject::_lookupObjId($this->course_ref_id);
60  $this->members_obj = $a_members;
61  }
62 
63  public function executeCommand(): void
64  {
65  $next_class = $this->ctrl->getNextClass($this);
66  $cmd = $this->ctrl->getCmd();
67 
68  switch ($next_class) {
69  default:
70  if (!$cmd) {
71  $cmd = "listSessions";
72  }
73  $this->$cmd();
74  break;
75  }
76  }
77 
81  public function listSessions()
82  {
83  $ilToolbar = $this->toolbar;
85  $ilAccess = $this->access;
86 
87  if (!$ilAccess->checkRbacOrPositionPermissionAccess('manage_members', 'manage_members', $this->course_ref_id)) {
88  $ilErr->raiseError($this->lng->txt('msg_no_perm_read'), $ilErr->MESSAGE);
89  }
90 
91  $ilToolbar->addButton(
92  $this->lng->txt('event_csv_export'),
93  $this->ctrl->getLinkTarget($this, 'exportCSV')
94  );
95 
96  $part = $this->members_obj->getParticipants();
97  $part = $ilAccess->filterUserIdsByRbacOrPositionOfCurrentUser(
98  'manage_members',
99  'manage_members',
100  $this->course_ref_id,
101  $part
102  );
103 
104  $tbl = new ilSessionOverviewTableGUI($this, 'listSessions', $this->course_ref_id, $part);
105  $this->tpl->setContent($tbl->getHTML());
106  }
107 
108  public function exportCSV(): void
109  {
110  $tree = $this->tree;
111  $ilAccess = $this->access;
112 
114  'manage_members',
115  'manage_members',
116  $this->course_ref_id,
117  $this->members_obj->getParticipants()
118  );
119 
120  $sortedMembers = [];
121  foreach($part as $user_id) {
122  $name = ilObjUser::_lookupName($user_id);
123  $sortedMembers[] = [
124  'userid' => (int) $user_id,
125  'firstname' => (string) $name["firstname"],
126  'lastname' => (string) $name['lastname']
127  ];
128  }
129  usort($sortedMembers, function ($a, $b) {
130  return $a['lastname'] <=> $b['lastname'];
131  });
132 
133  $events = [];
134  foreach ($tree->getSubtree($tree->getNodeData($this->course_ref_id), false, ['sess']) as $event_id) {
135  $tmp_event = ilObjectFactory::getInstanceByRefId($event_id, false);
136  if (!is_object($tmp_event) || !$ilAccess->checkAccess('manage_members', '', $event_id)) {
137  continue;
138  }
139  $events[] = $tmp_event;
140  }
141 
142  $this->csv = new ilCSVWriter();
143  $this->csv->addColumn($this->lng->txt("lastname"));
144  $this->csv->addColumn($this->lng->txt("firstname"));
145  $this->csv->addColumn($this->lng->txt("login"));
146 
147  foreach ($events as $event_obj) {
148  // TODO: do not export relative dates
149  $this->csv->addColumn($event_obj->getTitle() . ' (' . $event_obj->getFirstAppointment()->appointmentToString() . ')');
150  }
151 
152  $this->csv->addRow();
153 
154  foreach ($sortedMembers as $member) {
155  $this->csv->addColumn($member['lastname']);
156  $this->csv->addColumn($member['firstname']);
157  $this->csv->addColumn(ilObjUser::_lookupLogin($member['userid']));
158 
159  foreach ($events as $event_obj) {
160  $event_part = new ilEventParticipants($event_obj->getId());
161 
162  $this->csv->addColumn($event_part->hasParticipated($member['userid']) ?
163  $this->lng->txt('event_participated') :
164  $this->lng->txt('event_not_participated'));
165  }
166 
167  $this->csv->addRow();
168  }
169  $date = new ilDate(time(), IL_CAL_UNIX);
170 
172  $this->csv->getCSVString(),
173  $date->get(IL_CAL_FKT_DATE, 'Y-m-d') . "_course_events.csv",
174  "text/csv"
175  );
176  }
177 }
getNodeData(int $a_node_id, ?int $a_tree_pk=null)
get all information of a node.
__construct(int $a_crs_ref_id, ilParticipants $a_members)
static _lookupName(int $a_user_id)
lookup user name
Table presentation for session overview.
static deliverData(string $a_data, string $a_filename, string $mime="application/octet-stream")
const IL_CAL_UNIX
$ilErr
Definition: raiseError.php:17
static _lookupObjId(int $ref_id)
global $DIC
Definition: feed.php:28
if($format !==null) $name
Definition: metadata.php:247
filterUserIdsByRbacOrPositionOfCurrentUser(string $rbac_perm, string $pos_perm, int $ref_id, array $user_ids)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
const IL_CAL_FKT_DATE
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Base class for course and group participants.
Error Handling & global info handling uses PEAR error class.
listSessions()
list sessions of all user
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
ilGlobalTemplateInterface $tpl
static _lookupLogin(int $a_user_id)