ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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/Membership/classes/class.ilParticipantsTableGUI.php';
14 {
15  protected $type = 'admin';
16  protected $role = 0;
17  protected $show_learning_progress = false;
18  protected $show_edit_link = TRUE;
19 
20 
28  public function __construct(
29  $a_parent_obj,$a_type = 'admin',
30  $show_content = true,
32  $a_role_id = 0
33  )
34  {
35  global $lng,$ilCtrl;
36 
37  $this->show_learning_progress = $show_learning_progress;
38 
39  $this->lng = $lng;
40  $this->lng->loadLanguageModule('grp');
41  $this->lng->loadLanguageModule('trac');
42  $this->lng->loadLanguageModule('rbac');
43 
44  $this->ctrl = $ilCtrl;
45 
46  $this->type = $a_type;
47  $this->role = $a_role_id;
48 
49  include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
50  $this->privacy = ilPrivacySettings::_getInstance();
51 
52  switch($this->type)
53  {
54  case 'admin':
55  $this->setPrefix('admin');
56  break;
57  case 'member':
58  $this->setPrefix('member');
59  break;
60  default:
61  $this->setPrefix('role');
62  break;
63  }
64 
65  $this->setId('grp_'.$a_type.'_'.$this->getRole().'_'.$a_parent_obj->object->getId());
66  parent::__construct($a_parent_obj,'members');
67 
68  $this->initSettings();
69 
70  $this->setFormName('participants');
71 
72  $this->addColumn('','f',"1");
73  $this->addColumn($this->lng->txt('name'),'lastname','20%');
74 
75  $all_cols = $this->getSelectableColumns();
76  foreach($this->getSelectedColumns() as $col)
77  {
78  $this->addColumn($all_cols[$col]['txt'],$col);
79  }
80 
81  if($this->show_learning_progress)
82  {
83  $this->addColumn($this->lng->txt('learning_progress'),'progress');
84  }
85 
86  if($this->privacy->enabledGroupAccessTimes())
87  {
88  $this->addColumn($this->lng->txt('last_access'),'access_time_unix');
89  }
90  if($this->type == 'admin')
91  {
92  $this->setSelectAllCheckbox('admins');
93  $this->addColumn($this->lng->txt('grp_notification'),'notification');
94  $this->addCommandButton('updateStatus',$this->lng->txt('save'));
95  }
96  elseif($this->type == 'member')
97  {
98  $this->setSelectAllCheckbox('members');
99  }
100  else
101  {
102  $this->setSelectAllCheckbox('roles');
103  }
104  $this->addColumn($this->lng->txt(''),'optional');
105  $this->setDefaultOrderField('lastname');
106 
107  $this->setRowTemplate("tpl.show_participants_row.html","Modules/Group");
108 
109  $this->setShowRowsSelector(true);
110 
111  if($show_content)
112  {
113  $this->enable('sort');
114  $this->enable('header');
115  $this->enable('numinfo');
116  $this->enable('select_all');
117  }
118  else
119  {
120  $this->disable('content');
121  $this->disable('header');
122  $this->disable('footer');
123  $this->disable('numinfo');
124  $this->disable('select_all');
125  }
126  }
127 
132  public function getRole()
133  {
134  return $this->role;
135  }
136 
137 
138 
146  public function fillRow($a_set)
147  {
148  global $ilUser,$ilAccess;
149 
150  $this->tpl->setVariable('VAL_ID',$a_set['usr_id']);
151  $this->tpl->setVariable('VAL_NAME',$a_set['lastname'].', '.$a_set['firstname']);
152  if(!$ilAccess->checkAccessOfUser($a_set['usr_id'],'read','',$this->getParentObject()->object->getRefId()) and
153  is_array($info = $ilAccess->getInfo()))
154  {
155  $this->tpl->setCurrentBlock('access_warning');
156  $this->tpl->setVariable('PARENT_ACCESS',$info[0]['text']);
157  $this->tpl->parseCurrentBlock();
158  }
159 
160  if(!ilObjUser::_lookupActive($a_set['usr_id']))
161  {
162  $this->tpl->setCurrentBlock('access_warning');
163  $this->tpl->setVariable('PARENT_ACCESS',$this->lng->txt('usr_account_inactive'));
164  $this->tpl->parseCurrentBlock();
165  }
166 
167 
168  foreach($this->getSelectedColumns() as $field)
169  {
170  switch($field)
171  {
172  case 'gender':
173  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_'.$a_set['gender']) : '';
174  $this->tpl->setCurrentBlock('custom_fields');
175  $this->tpl->setVariable('VAL_CUST',$a_set[$field]);
176  $this->tpl->parseCurrentBlock();
177  break;
178 
179  case 'birthday':
180  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'],IL_CAL_DATE)) : $this->lng->txt('no_date');
181  $this->tpl->setCurrentBlock('custom_fields');
182  $this->tpl->setVariable('VAL_CUST',$a_set[$field]);
183  $this->tpl->parseCurrentBlock();
184  break;
185 
186  case 'consultation_hour':
187  $this->tpl->setCurrentBlock('custom_field');
188  $dts = array();
189  foreach((array) $a_set['consultation_hours'] as $ch)
190  {
192  new ilDateTime($ch['dt'],IL_CAL_UNIX),
193  new ilDateTime($ch['dtend'],IL_CAL_UNIX)
194  );
195  if($ch['explanation'])
196  {
197  $tmp .= ' ' . $ch['explanation'];
198  }
199  $dts[] = $tmp;
200  }
201  $dt_string = implode('<br />', $dts);
202  $this->tpl->setVariable('VAL_CUST',$dt_string) ;
203  $this->tpl->parseCurrentBlock();
204  break;
205 
206  case 'prtf':
207  $tmp = array();
208  if(is_array($a_set['prtf']))
209  {
210  foreach($a_set['prtf'] as $prtf_url => $prtf_txt)
211  {
212  $tmp[] = '<a href="'.$prtf_url.'">'.$prtf_txt.'</a>';
213  }
214  }
215  $this->tpl->setVariable('VAL_CUST', implode('<br />', $tmp)) ;
216  break;
217 
218  case 'odf_last_update':
219  $this->tpl->setVariable('VAL_EDIT_INFO',(string) $a_set['odf_info_txt']);
220  break;
221 
222  default:
223  $this->tpl->setCurrentBlock('custom_fields');
224  $this->tpl->setVariable('VAL_CUST',isset($a_set[$field]) ? (string) $a_set[$field] : '');
225  $this->tpl->parseCurrentBlock();
226  break;
227  }
228  }
229 
230  if($this->privacy->enabledGroupAccessTimes())
231  {
232  $this->tpl->setVariable('VAL_ACCESS',$a_set['access_time']);
233  }
234 
235  if($this->show_learning_progress)
236  {
237  $this->tpl->setCurrentBlock('lp');
238  switch($a_set['progress'])
239  {
241  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
242  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/complete.svg'));
243  break;
244 
246  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
247  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/incomplete.svg'));
248  break;
249 
251  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
252  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/not_attempted.svg'));
253  break;
254 
256  $this->tpl->setVariable('LP_STATUS_ALT',$this->lng->txt($a_set['progress']));
257  $this->tpl->setVariable('LP_STATUS_PATH',ilUtil::getImagePath('scorm/failed.svg'));
258  break;
259 
260  }
261  $this->tpl->parseCurrentBlock();
262  }
263 
264 
265  if($this->type == 'admin')
266  {
267  $this->tpl->setVariable('VAL_POSTNAME','admins');
268  $this->tpl->setVariable('VAL_NOTIFICATION_ID',$a_set['usr_id']);
269  $this->tpl->setVariable('VAL_NOTIFICATION_CHECKED',$a_set['notification'] ? 'checked="checked"' : '');
270  }
271  elseif($this->type == 'member')
272  {
273  $this->tpl->setVariable('VAL_POSTNAME','members');
274  }
275  else
276  {
277  $this->tpl->setVariable('VAL_POSTNAME','roles');
278  }
279 
280  $this->showActionLinks($a_set);
281 
282 
283  $this->tpl->setVariable('VAL_LOGIN',$a_set['login']);
284  }
285 
291  public function parse($a_user_data)
292  {
293  include_once './Services/User/classes/class.ilUserQuery.php';
294 
295  $additional_fields = $this->getSelectedColumns();
296  unset($additional_fields["firstname"]);
297  unset($additional_fields["lastname"]);
298  unset($additional_fields["last_login"]);
299  unset($additional_fields["access_until"]);
300  unset($additional_fields['consultation_hour']);
301  unset($additional_fields['prtf']);
302 
303  switch($this->type)
304  {
305  case 'admin':
306  $part = ilGroupParticipants::_getInstanceByObjId($this->getParentObject()->object->getId())->getAdmins();
307  break;
308  case 'member':
309  $part = $GLOBALS['rbacreview']->assignedUsers($this->getRole());
310  break;
311  case 'role':
312  $part = $GLOBALS['rbacreview']->assignedUsers($this->getRole());
313  break;
314  }
315 
316  $udf_ids = $usr_data_fields = $odf_ids = array();
317  foreach($additional_fields as $field)
318  {
319  if(substr($field,0,3) == 'udf')
320  {
321  $udf_ids[] = substr($field,4);
322  continue;
323  }
324  if(substr($field,0,3) == 'odf')
325  {
326  $odf_ids[] = substr($field,4);
327  continue;
328  }
329 
330  $usr_data_fields[] = $field;
331  }
332 
333  $usr_data = ilUserQuery::getUserListData(
334  'login',
335  'ASC',
336  0,
337  9999,
338  '',
339  '',
340  null,
341  false,
342  false,
343  0,
344  0,
345  null,
346  $usr_data_fields,
347  $part
348  );
349  // Custom user data fields
350  if($udf_ids)
351  {
352  include_once './Services/User/classes/class.ilUserDefinedData.php';
353  $data = ilUserDefinedData::lookupData($part, $udf_ids);
354  foreach($data as $usr_id => $fields)
355  {
356  if(!$this->checkAcceptance($usr_id))
357  {
358  continue;
359  }
360 
361  foreach($fields as $field_id => $value)
362  {
363  $a_user_data[$usr_id]['udf_'.$field_id] = $value;
364  }
365  }
366  }
367  // Object specific user data fields
368  if($odf_ids)
369  {
370  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
371  $data = ilCourseUserData::_getValuesByObjId($this->getParentObject()->object->getId());
372  foreach($data as $usr_id => $fields)
373  {
374  if(!$this->checkAcceptance($usr_id))
375  {
376  continue;
377  }
378 
379  foreach($fields as $field_id => $value)
380  {
381  if($a_user_data[$usr_id])
382  {
383  $a_user_data[$usr_id]['odf_'.$field_id] = $value;
384  }
385  }
386  }
387  // add last edit date
388  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
389  foreach(ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getParentObject()->object->getId()) as $usr_id => $edit_info)
390  {
391  if(!isset($a_user_data[$usr_id]))
392  {
393  continue;
394  }
395 
396  include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
397  if($usr_id == $edit_info['update_user'])
398  {
399  $a_user_data[$usr_id]['odf_last_update'] = '';
400  $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
401  if(ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getParentObject()->object->getType()))
402  {
403  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
404  $a_user_data[$usr_id]['odf_info_txt'] .= (', '.ilDatePresentation::formatDate($edit_info['editing_time']));
405  }
406  }
407  else
408  {
409  $a_user_data[$usr_id]['odf_last_update'] = $edit_info['edit_user'];
410  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
411 
412  $name = ilObjUser::_lookupName($edit_info['update_user']);
413  $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'].' '.$name['lastname'].', '.ilDatePresentation::formatDate($edit_info['editing_time']));
414  }
415  }
416  }
417  foreach($usr_data['set'] as $user)
418  {
419  // Check acceptance
420  if(!$this->checkAcceptance($user['usr_id']))
421  {
422  continue;
423  }
424  // DONE: accepted
425  foreach($usr_data_fields as $field)
426  {
427  $a_user_data[$user['usr_id']][$field] = $user[$field] ? $user[$field] : '';
428  }
429  }
430  // consultation hours
431  if($this->isColumnSelected('consultation_hour'))
432  {
433  include_once './Services/Booking/classes/class.ilBookingEntry.php';
434  foreach(ilBookingEntry::lookupManagedBookingsForObject($this->getParentObject()->object->getId(), $GLOBALS['ilUser']->getId()) as $buser => $booking)
435  {
436  if(isset($a_user_data[$buser]))
437  {
438  $a_user_data[$buser]['consultation_hour'] = $booking[0]['dt'];
439  $a_user_data[$buser]['consultation_hour_end'] = $booking[0]['dtend'];
440  $a_user_data[$buser]['consultation_hours'] = $booking;
441  }
442  }
443  }
444 
445  return $this->setData($a_user_data);
446  }
447 }
448 ?>
showActionLinks($a_set)
show edit links
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static _lookupName($a_user_id)
lookup user name
setFormName($a_formname)
Set Form name.
static getUserListData($a_order_field, $a_order_dir, $a_offset, $a_limit, $a_string_filter="", $a_activation_filter="", $a_last_login_filter=null, $a_limited_access_filter=false, $a_no_courses_filter=false, $a_course_group_filter=0, $a_role_filter=0, $a_user_folder_filter=null, $a_additional_fields='', $a_user_filter=null, $a_first_letter="")
Get data for user administration list.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static lookupManagedBookingsForObject($a_obj_id, $a_usr_id)
Lookup bookings for own and managed consultation hours of an object.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
const LP_STATUS_NOT_ATTEMPTED
static formatPeriod(ilDateTime $start, ilDateTime $end)
Format a period of two date Shows: 14.
const IL_CAL_UNIX
getParentObject()
Get parent object.
setId($a_val)
Set id.
const LP_STATUS_IN_PROGRESS
global $ilCtrl
Definition: ilias.php:18
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
$info
Definition: example_052.php:80
const LP_STATUS_FAILED
Class for single dates.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
enable($a_module_name)
enables particular modules of table
static formatDate(ilDateTime $date)
Format a date public.
setPrefix($a_prefix)
Date and time handling
getSelectedColumns()
Get selected columns.
__construct( $a_parent_obj, $a_type='admin', $show_content=true, $show_learning_progress=false, $a_role_id=0)
Constructor.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
getSelectableColumns()
Get selectable columns.
_lookupActive($a_usr_id)
Check user account active.
isColumnSelected($a_col)
Is given column selected?
const IL_CAL_DATE
disable($a_module_name)
diesables particular modules of table
global $ilUser
Definition: imgupload.php:15
global $lng
Definition: privfeed.php:40
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
checkAcceptance($a_usr_id)
Check acceptance.
static _getInstance()
Get instance of ilPrivacySettings.
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
const LP_STATUS_COMPLETED
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.
static lookupEntriesByObjectId($a_obj_id)
Get entries by obj_id type $ilDB.