ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilSessionParticipantsTableGUI.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/Table/classes/class.ilTable2GUI.php';
6
14{
15 protected static $all_columns = null;
16
20 private $rep_object = null;
21
22
27 private $parent_ref_id = 0;
28
33 private $member_ref_id = 0;
34
35
36
40 private $logger = null;
41
42
46 private $participants = null;
47
48
55 public function __construct($a_parent_gui, ilObjSession $a_parent_obj, $a_parent_cmd)
56 {
57 $this->logger = $GLOBALS['DIC']->logger()->sess();
58
59 $this->rep_object = $a_parent_obj;
60
61 include_once './Services/Membership/classes/class.ilParticipants.php';
62 $this->participants = ilParticipants::getInstance($this->getRepositoryObject()->getRefId());
63
64 $this->setId('session_part_' . $this->getRepositoryObject()->getId());
65 parent::__construct($a_parent_gui, $a_parent_cmd);
66
67 $this->parent_ref_id = $GLOBALS['DIC']->repositoryTree()->getParentId(
68 $this->getRepositoryObject()->getRefId()
69 );
70
71 $tree = $GLOBALS['DIC']->repositoryTree();
72 if ($member_ref = $tree->checkForParentType($this->parent_ref_id, 'grp')) {
73 $this->member_ref_id = $member_ref;
74 } elseif ($member_ref = $tree->checkForParentType($this->parent_ref_id, 'crs')) {
75 $this->member_ref_id = $member_ref;
76 } else {
77 throw new \InvalidArgumentException("Error in tree structure. Session has no parent course/group ref_id: " . $this->getRepositoryObject()->getRefId());
78 }
79 }
80
81
85 protected function getRepositoryObject()
86 {
87 return $this->rep_object;
88 }
89
94 protected function isRegistrationEnabled()
95 {
96 return $this->getRepositoryObject()->enabledRegistration();
97 }
98
99
104 protected function getParticipants()
105 {
106 return $this->participants;
107 }
108
109
113 public function init()
114 {
115 $this->lng->loadLanguageModule('sess');
116 $this->lng->loadLanguageModule('crs');
117 $this->lng->loadLanguageModule('trac');
118 $this->lng->loadLanguageModule('mmbr');
119
120 $this->setFormName('participants');
121
122 $this->initFilter();
123
124
125 $this->setSelectAllCheckbox('participants', true);
126 $this->setShowRowsSelector(true);
127
128 $this->enable('sort');
129 $this->enable('header');
130 $this->enable('numinfo');
131 $this->enable('select_all');
132
133
134 $this->setFormAction($this->ctrl->getFormAction($this->getParentObject(), $this->getParentCmd()));
135
136 $this->setRowTemplate("tpl.sess_members_row.html", "Modules/Session");
137
138 $this->addColumn('', 'f', '1', true);
139 $this->addColumn($this->lng->txt('name'), 'name', '20%');
140 $this->addColumn($this->lng->txt('login'), 'login', '10%');
141
142 $all_cols = $this->getSelectableColumns();
143 foreach ($this->getSelectedColumns() as $col) {
144 $this->addColumn($all_cols[$col]['txt'], $col);
145 }
146
147
148 if ($this->isRegistrationEnabled()) {
149 $this->addColumn($this->lng->txt('event_tbl_registered'), 'registered');
150 $this->setDefaultOrderField('registered');
151 $this->setDefaultOrderDirection('desc');
152 } else {
153 $this->setDefaultOrderField('name');
154 }
155 $this->addColumn($this->lng->txt('event_tbl_participated'), 'participated');
156 $this->addColumn($this->lng->txt('sess_contact'), 'contact');
157 $this->addColumn($this->lng->txt('trac_mark'), 'mark');
158 $this->addColumn($this->lng->txt('trac_comment'), 'comment');
159
160
161 $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('mmbr_btn_mail_selected_users'));
162 $this->lng->loadLanguageModule('user');
163 $this->addMultiCommand('addToClipboard', $this->lng->txt('clipboard_add_btn'));
164
165
166 $this->addCommandButton('updateMembers', $this->lng->txt('save'));
167 }
168
169 public function initFilter()
170 {
172 'login',
174 false,
175 $this->lng->txt('name')
176 );
177 $this->current_filter['login'] = $login->getValue();
178
179
180 if ($this->isColumnSelected('roles')) {
181 $role = $this->addFilterItemByMetaType(
182 'roles',
184 false,
185 $this->lng->txt('objs_' . ilObject::_lookupType(ilObject::_lookupObjId($this->member_ref_id)) . '_role')
186 );
187
188 $options = array();
189 $options[0] = $this->lng->txt('all_roles');
190 $role->setOptions($options + $this->getParentLocalRoles());
191 $this->current_filter['roles'] = $role->getValue();
192 }
193
194 if ($this->getRepositoryObject()->enabledRegistration()) {
195 $reg = $this->addFilterItemByMetaType(
196 'filter_registration',
198 false,
199 $this->lng->txt('sess_part_filter_registered')
200 );
201 $this->current_filter['filter_registration'] = (bool) $reg->getChecked();
202 }
203 $participated = $this->addFilterItemByMetaType(
204 'filter_participated',
206 false,
207 $this->lng->txt('sess_part_filter_participated')
208 );
209 $this->current_filter['filter_participated'] = (bool) $participated->getChecked();
210 }
211
216 public function getSelectableColumns()
217 {
218 global $DIC;
219
220 $ilSetting = $DIC['ilSetting'];
221
222
223 self::$all_columns['roles'] = array(
224 'txt' => $this->lng->txt('objs_role'),
225 'default' => true
226 );
227
228 return self::$all_columns;
229 }
230
231
238 public function parse()
239 {
240 $all_participants = [];
241 $all_possible_participants = $this->collectParticipants();
242 if ($all_possible_participants) {
243 // user filter
244 $user_query = new ilUserQuery();
245 $user_query->setLimit(50000);
246 $user_query->setUserFilter($all_possible_participants);
247 $user_query->setTextFilter((string) $this->current_filter['login']);
248 $res = $user_query->query();
249 $all_participants = $res['set'];
250 }
251
252 foreach ($all_participants as $counter => $participant) {
253 $usr_data = $this->getParticipants()->getEventParticipants()->getUser($participant['usr_id']);
254
255 $tmp_data = [];
256 $tmp_data['id'] = $participant['usr_id'];
257
258 $tmp_data['name'] = $participant['lastname'];
259 $tmp_data['lastname'] = $participant['lastname'];
260 $tmp_data['firstname'] = $participant['firstname'];
261 $tmp_data['login'] = $participant['login'];
262 $tmp_data['mark'] = $usr_data['mark'];
263 $tmp_data['comment'] = $usr_data['comment'];
264 $tmp_data['participated'] = $this->getParticipants()->getEventParticipants()->hasParticipated($participant['usr_id']);
265 $tmp_data['registered'] = $this->getParticipants()->getEventParticipants()->isRegistered($participant['usr_id']);
266 $tmp_data['contact'] = $this->getParticipants()->isContact($participant['usr_id']);
267
268 $roles = array();
269 $local_roles = $this->getParentLocalRoles();
270 foreach ($local_roles as $role_id => $role_name) {
271 // @todo fix performance
272 if ($GLOBALS['DIC']['rbacreview']->isAssigned($participant['usr_id'], $role_id)) {
273 $tmp_data['role_ids'][] = $role_id;
274 $roles[] = $role_name;
275 }
276 }
277 $tmp_data['roles'] = implode('<br />', $roles);
278
279 if ($this->matchesFilterCriteria($tmp_data)) {
280 $part[] = $tmp_data;
281 }
282 }
283 $this->setData($part ? $part : array());
284 }
285
290 protected function collectParticipants()
291 {
292 $part = ilParticipants::getInstance($this->member_ref_id);
293 if (!$part instanceof ilParticipants) {
294 return $this->getParticipants()->getParticipants();
295 }
296 return $part->getParticipants();
297 }
298
299
304 protected function matchesFilterCriteria($a_user_info)
305 {
306 foreach ($this->current_filter as $filter => $filter_value) {
307 if (!$filter_value) {
308 continue;
309 }
310 switch ($filter) {
311 case 'roles':
312 if (!in_array($filter_value, $a_user_info['role_ids'])) {
313 return false;
314 }
315 break;
316
317 case 'filter_participated':
318 if (!$a_user_info['participated']) {
319 return false;
320 }
321 break;
322
323 case 'filter_registration':
324 if (!$a_user_info['registered']) {
325 return false;
326 }
327 break;
328 }
329
330
331 $this->logger->info('Filter: ' . $filter . ' -> ' . $filter_value);
332 }
333 return true;
334 }
335
336
343 public function fillRow($a_set)
344 {
345 $this->tpl->setVariable('VAL_POSTNAME', 'participants');
346
347 if ($this->isRegistrationEnabled()) {
348 $this->tpl->setCurrentBlock('registered_col');
349 $this->tpl->setVariable('VAL_ID', $a_set['id']);
350 $this->tpl->setVariable('REG_CHECKED', $a_set['registered'] ? 'checked="checked"' : '');
351 $this->tpl->parseCurrentBlock();
352 }
353
354 foreach ($this->getSelectedColumns() as $field) {
355 switch ($field) {
356 case 'roles':
357 $this->tpl->setCurrentBlock('custom_fields');
358 $this->tpl->setVariable('VAL_CUST', (string) $a_set['roles']);
359 $this->tpl->parseCurrentBlock();
360 break;
361
362 }
363 }
364 $this->tpl->setVariable('VAL_ID', $a_set['id']);
365 $this->tpl->setVariable('LASTNAME', $a_set['lastname']);
366 $this->tpl->setVariable('FIRSTNAME', $a_set['firstname']);
367 $this->tpl->setVariable('LOGIN', $a_set['login']);
368 $this->tpl->setVariable('MARK', $a_set['mark']);
369 $this->tpl->setVariable('COMMENT', $a_set['comment']);
370 $this->tpl->setVariable('PART_CHECKED', $a_set['participated'] ? 'checked="checked"' : '');
371 $this->tpl->setVariable('CONTACT_CHECKED', $a_set['contact'] ? 'checked="checked"' : '');
372 }
373
377 protected function getParentLocalRoles()
378 {
379 $part = null;
380 $type = ilObject::_lookupType($this->member_ref_id, true);
381 switch ($type) {
382 case 'crs':
383 case 'grp':
384 $part = ilParticipants::getInstance($this->member_ref_id);
385 // no break
386 default:
387
388 }
389 if (!$part instanceof ilParticipants) {
390 return [];
391 }
392
393 $review = $GLOBALS['DIC']->rbac()->review();
394
395 $local_parent_roles = $review->getLocalRoles($this->member_ref_id);
396 $this->logger->dump($local_parent_roles);
397
398 $local_roles_info = [];
399 foreach ($local_parent_roles as $index => $role_id) {
400 $local_roles_info[$role_id] = ilObjRole::_getTranslation(
401 ilObject::_lookupTitle($role_id)
402 );
403 }
404 return $local_roles_info;
405 }
406}
An exception for terminatinating execution or to throw for unit testing.
static _getTranslation($a_role_title)
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
static getInstance($a_ref_id)
Get instance by ref_id.
getParentLocalRoles()
Get local roles of parent object.
__construct($a_parent_gui, ilObjSession $a_parent_obj, $a_parent_cmd)
isRegistrationEnabled()
Check if registration is enabled.
matchesFilterCriteria($a_user_info)
Check if user is filtered.
Class ilTable2GUI.
getSelectedColumns()
Get selected columns.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
getId()
Get element id.
setData($a_data)
set table data @access public
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
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.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=null)
Add filter by standard type.
setId($a_val)
Set id.
setFormName($a_formname="")
Set Form name.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
isColumnSelected($a_col)
Is given column selected?
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
enable($a_module_name)
enables particular modules of table
User query class.
$login
Definition: cron.php:13
$index
Definition: metadata.php:60
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
global $ilSetting
Definition: privfeed.php:17
$type
global $DIC
Definition: saml.php:7
foreach($_POST as $key=> $value) $res