ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilGroupParticipantsTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once('./Services/Table/classes/class.ilTable2GUI.php');
5 
15 {
16  protected $type = 'admin';
17  protected $role = 0;
18  protected $show_learning_progress = false;
19 
20  protected static $export_allowed = false;
21  protected static $confirmation_required = true;
22  protected static $accepted_ids = null;
23 
24  protected static $all_columns = null;
25 
33  public function __construct(
34  $a_parent_obj,$a_type = 'admin',
35  $show_content = true,
37  $a_role_id = 0
38  )
39  {
40  global $lng,$ilCtrl;
41 
42  $this->show_learning_progress = $show_learning_progress;
43 
44  $this->lng = $lng;
45  $this->lng->loadLanguageModule('grp');
46  $this->lng->loadLanguageModule('trac');
47  $this->ctrl = $ilCtrl;
48 
49  $this->type = $a_type;
50  $this->role = $a_role_id;
51 
52  include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
53  $this->privacy = ilPrivacySettings::_getInstance();
54 
55  $this->setId('grp_'.$a_type.'_'.$this->getRole().'_'.$a_parent_obj->object->getId());
56  parent::__construct($a_parent_obj,'members');
57 
58  $this->initAcceptedAgreements();
59 
60  $this->setFormName('participants');
61 
62  $this->addColumn('','f',"1");
63  $this->addColumn($this->lng->txt('name'),'lastname','20%');
64 
65  $all_cols = $this->getSelectableColumns();
66  foreach($this->getSelectedColumns() as $col)
67  {
68  $this->addColumn($all_cols[$col]['txt'],$col);
69  }
70 
71  if($this->show_learning_progress)
72  {
73  $this->addColumn($this->lng->txt('learning_progress'),'progress');
74  }
75 
76  if($this->privacy->enabledGroupAccessTimes())
77  {
78  $this->addColumn($this->lng->txt('last_access'),'access_time_unix');
79  }
80  if($this->type == 'admin')
81  {
82  $this->setPrefix('admin');
83  $this->setSelectAllCheckbox('admins');
84  $this->addColumn($this->lng->txt('grp_notification'),'notification');
85  $this->addCommandButton('updateStatus',$this->lng->txt('save'));
86  }
87  elseif($this->type == 'member')
88  {
89  $this->setPrefix('member');
90  $this->setSelectAllCheckbox('members');
91  }
92  else
93  {
94  $this->setPrefix('role');
95  $this->setSelectAllCheckbox('roles');
96  }
97  $this->addColumn($this->lng->txt(''),'optional');
98  $this->setDefaultOrderField('lastname');
99 
100  $this->setRowTemplate("tpl.show_participants_row.html","Modules/Group");
101 
102  $this->setShowRowsSelector(true);
103 
104  if($show_content)
105  {
106  $this->enable('sort');
107  $this->enable('header');
108  $this->enable('numinfo');
109  $this->enable('select_all');
110  }
111  else
112  {
113  $this->disable('content');
114  $this->disable('header');
115  $this->disable('footer');
116  $this->disable('numinfo');
117  $this->disable('select_all');
118  }
119  }
120 
125  public function getRole()
126  {
127  return $this->role;
128  }
129 
134  public function getSelectableColumns()
135  {
136  global $ilSetting;
137 
138  if(self::$all_columns)
139  {
140  # return self::$all_columns;
141  }
142 
143  include_once './Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php';
144  $ef = ilExportFieldsInfo::_getInstanceByType($this->getParentObject()->object->getType());
145  self::$all_columns = $ef->getSelectableFieldsInfo($this->getParentObject()->object->getId());
146 
147  if ($this->type == 'member' &&
148  $ilSetting->get('user_portfolios'))
149  {
150  self::$all_columns['prtf'] = array(
151  'txt' => $this->lng->txt('obj_prtf'),
152  'default' => false
153  );
154  }
155 
156  return self::$all_columns;
157  }
158 
159 
167  public function fillRow($a_set)
168  {
169  global $ilUser,$ilAccess;
170 
171  $this->tpl->setVariable('VAL_ID',$a_set['usr_id']);
172  $this->tpl->setVariable('VAL_NAME',$a_set['lastname'].', '.$a_set['firstname']);
173  if(!$ilAccess->checkAccessOfUser($a_set['usr_id'],'read','',$this->getParentObject()->object->getRefId()) and
174  is_array($info = $ilAccess->getInfo()))
175  {
176  $this->tpl->setCurrentBlock('access_warning');
177  $this->tpl->setVariable('PARENT_ACCESS',$info[0]['text']);
178  $this->tpl->parseCurrentBlock();
179  }
180 
181  if(!ilObjUser::_lookupActive($a_set['usr_id']))
182  {
183  $this->tpl->setCurrentBlock('access_warning');
184  $this->tpl->setVariable('PARENT_ACCESS',$this->lng->txt('usr_account_inactive'));
185  $this->tpl->parseCurrentBlock();
186  }
187 
188 
189  foreach($this->getSelectedColumns() as $field)
190  {
191  switch($field)
192  {
193  case 'gender':
194  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_'.$a_set['gender']) : '';
195  $this->tpl->setCurrentBlock('custom_fields');
196  $this->tpl->setVariable('VAL_CUST',$a_set[$field]);
197  $this->tpl->parseCurrentBlock();
198  break;
199 
200  case 'birthday':
201  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'],IL_CAL_DATE)) : $this->lng->txt('no_date');
202  $this->tpl->setCurrentBlock('custom_fields');
203  $this->tpl->setVariable('VAL_CUST',$a_set[$field]);
204  $this->tpl->parseCurrentBlock();
205  break;
206 
207  case 'consultation_hour':
208  $this->tpl->setCurrentBlock('custom_field');
209  $dts = array();
210  foreach((array) $a_set['consultation_hours'] as $ch)
211  {
213  new ilDateTime($ch['dt'],IL_CAL_UNIX),
214  new ilDateTime($ch['dtend'],IL_CAL_UNIX)
215  );
216  if($ch['explanation'])
217  {
218  $tmp .= ' ' . $ch['explanation'];
219  }
220  $dts[] = $tmp;
221  }
222  $dt_string = implode('<br />', $dts);
223  $this->tpl->setVariable('VAL_CUST',$dt_string) ;
224  $this->tpl->parseCurrentBlock();
225  break;
226 
227  case 'prtf':
228  $tmp = array();
229  if(is_array($a_set['prtf']))
230  {
231  foreach($a_set['prtf'] as $prtf_url => $prtf_txt)
232  {
233  $tmp[] = '<a href="'.$prtf_url.'">'.$prtf_txt.'</a>';
234  }
235  }
236  $this->tpl->setVariable('VAL_CUST', implode('<br />', $tmp)) ;
237  break;
238 
239  default:
240  $this->tpl->setCurrentBlock('custom_fields');
241  $this->tpl->setVariable('VAL_CUST',isset($a_set[$field]) ? (string) $a_set[$field] : '');
242  $this->tpl->parseCurrentBlock();
243  break;
244  }
245  }
246 
247  if($this->privacy->enabledGroupAccessTimes())
248  {
249  $this->tpl->setVariable('VAL_ACCESS',$a_set['access_time']);
250  }
251 
252  if($this->show_learning_progress)
253  {
254  $this->tpl->setCurrentBlock('lp');
255  switch($a_set['progress'])
256  {
258  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
259  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/complete.png'));
260  break;
261 
263  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
264  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/incomplete.png'));
265  break;
266 
268  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
269  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/not_attempted.png'));
270  break;
271 
273  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
274  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/failed.png'));
275  break;
276 
277  }
278  $this->tpl->parseCurrentBlock();
279  }
280 
281 
282  if($this->type == 'admin')
283  {
284  $this->tpl->setVariable('VAL_POSTNAME','admins');
285  $this->tpl->setVariable('VAL_NOTIFICATION_ID',$a_set['usr_id']);
286  $this->tpl->setVariable('VAL_NOTIFICATION_CHECKED',$a_set['notification'] ? 'checked="checked"' : '');
287  }
288  elseif($this->type == 'member')
289  {
290  $this->tpl->setVariable('VAL_POSTNAME','members');
291  }
292  else
293  {
294  $this->tpl->setVariable('VAL_POSTNAME','roles');
295  }
296 
297  $this->ctrl->setParameter($this->parent_obj,'member_id',$a_set['usr_id']);
298  $this->tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTarget($this->parent_obj,'editMember'));
299  $this->tpl->setVariable('LINK_TXT',$this->lng->txt('edit'));
300  $this->ctrl->clearParameters($this->parent_obj);
301 
302  $this->tpl->setVariable('VAL_LOGIN',$a_set['login']);
303  }
304 
310  public function parse($a_user_data)
311  {
312  include_once './Services/User/classes/class.ilUserQuery.php';
313 
314  $additional_fields = $this->getSelectedColumns();
315  unset($additional_fields["firstname"]);
316  unset($additional_fields["lastname"]);
317  unset($additional_fields["last_login"]);
318  unset($additional_fields["access_until"]);
319  unset($additional_fields['consultation_hour']);
320  unset($additional_fields['prtf']);
321 
322  switch($this->type)
323  {
324  case 'admin':
325  $part = ilGroupParticipants::_getInstanceByObjId($this->getParentObject()->object->getId())->getAdmins();
326  break;
327  case 'member':
328  $part = $GLOBALS['rbacreview']->assignedUsers($this->getRole());
329  break;
330  case 'role':
331  $part = $GLOBALS['rbacreview']->assignedUsers($this->getRole());
332  break;
333  }
334 
335  $udf_ids = $usr_data_fields = $odf_ids = array();
336  foreach($additional_fields as $field)
337  {
338  if(substr($field,0,3) == 'udf')
339  {
340  $udf_ids[] = substr($field,4);
341  continue;
342  }
343  if(substr($field,0,3) == 'odf')
344  {
345  $odf_ids[] = substr($field,4);
346  continue;
347  }
348 
349  $usr_data_fields[] = $field;
350  }
351 
352  $usr_data = ilUserQuery::getUserListData(
353  'login',
354  'ASC',
355  0,
356  9999,
357  '',
358  '',
359  null,
360  false,
361  false,
362  0,
363  0,
364  null,
365  $usr_data_fields,
366  $part
367  );
368  // Custom user data fields
369  if($udf_ids)
370  {
371  include_once './Services/User/classes/class.ilUserDefinedData.php';
372  $data = ilUserDefinedData::lookupData($part, $udf_ids);
373  foreach($data as $usr_id => $fields)
374  {
375  if(!$this->checkAcceptance($usr_id))
376  {
377  continue;
378  }
379 
380  foreach($fields as $field_id => $value)
381  {
382  $a_user_data[$usr_id]['udf_'.$field_id] = $value;
383  }
384  }
385  }
386  // Object specific user data fields
387  if($odf_ids)
388  {
389  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
390  $data = ilCourseUserData::_getValuesByObjId($this->getParentObject()->object->getId());
391  foreach($data as $usr_id => $fields)
392  {
393  if(!$this->checkAcceptance($usr_id))
394  {
395  continue;
396  }
397 
398  foreach($fields as $field_id => $value)
399  {
400  if($a_user_data[$usr_id])
401  {
402  $a_user_data[$usr_id]['odf_'.$field_id] = $value;
403  }
404  }
405  }
406  }
407 
408  foreach($usr_data['set'] as $user)
409  {
410  // Check acceptance
411  if(!$this->checkAcceptance($user['usr_id']))
412  {
413  continue;
414  }
415  // DONE: accepted
416  foreach($usr_data_fields as $field)
417  {
418  $a_user_data[$user['usr_id']][$field] = $user[$field] ? $user[$field] : '';
419  }
420  }
421  // consultation hours
422  if($this->isColumnSelected('consultation_hour'))
423  {
424  include_once './Services/Booking/classes/class.ilBookingEntry.php';
425  foreach(ilBookingEntry::lookupManagedBookingsForObject($this->getParentObject()->object->getId(), $GLOBALS['ilUser']->getId()) as $buser => $booking)
426  {
427  if(isset($a_user_data[$buser]))
428  {
429  $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
430  $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
431  $a_user_data[$buser]['consultation_hours'] = $booking;
432  }
433  }
434  }
435 
436  return $this->setData($a_user_data);
437  }
438 
444  public function checkAcceptance($a_usr_id)
445  {
446  if(!self::$confirmation_required)
447  {
448  return true;
449  }
450  if(!self::$export_allowed)
451  {
452  return false;
453  }
454  return in_array($a_usr_id,self::$accepted_ids);
455  }
456 
457 
462  public function initAcceptedAgreements()
463  {
464  if(self::$accepted_ids !== NULL)
465  {
466  return true;
467  }
468 
469  self::$export_allowed = ilPrivacySettings::_getInstance()->checkExportAccess($this->getParentObject()->object->getRefId());
470  self::$confirmation_required = ilPrivacySettings::_getInstance()->groupConfirmationRequired();
471 
472  include_once 'Services/Membership/classes/class.ilMemberAgreement.php';
473  self::$accepted_ids = ilMemberAgreement::lookupAcceptedAgreements($this->getParentObject()->object->getId());
474  }
475 
476 }
477 ?>