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 
5 include_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 }
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
User query class.
__construct($a_parent_gui, ilObjSession $a_parent_obj, $a_parent_cmd)
$type
global $DIC
Definition: saml.php:7
matchesFilterCriteria($a_user_info)
Check if user is filtered.
getParentLocalRoles()
Get local roles of parent object.
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=null)
Add filter by standard type.
static _lookupTitle($a_id)
lookup object title
$index
Definition: metadata.php:60
getParentCmd()
Get parent command.
setId($a_val)
Set id.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
static getInstance($a_ref_id)
Get instance by ref_id.
isRegistrationEnabled()
Check if registration is enabled.
Class ilTable2GUI.
foreach($_POST as $key=> $value) $res
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.
static _lookupObjId($a_id)
addMultiCommand($a_cmd, $a_text)
Add Command button.
enable($a_module_name)
enables particular modules of table
getSelectedColumns()
Get selected columns.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
static _getTranslation($a_role_title)
static _lookupType($a_id, $a_reference=false)
lookup object type
isColumnSelected($a_col)
Is given column selected?
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
global $ilSetting
Definition: privfeed.php:17
setFormName($a_formname="")
Set Form name.
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.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
$login
Definition: cron.php:13
getId()
Get element id.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.