ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilSubscriberTableGUI.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 include_once('./Services/Table/classes/class.ilTable2GUI.php');
25 
26 
36 {
37  protected $subscribers = array();
38 
39  protected static $all_columns = null;
40  protected static $has_odf_definitions = FALSE;
41  protected $show_subject = true;
42 
43 
51  public function __construct($a_parent_obj,$show_content = true, $show_subject = true)
52  {
53  global $lng,$ilCtrl;
54 
55  $this->lng = $lng;
56  $this->lng->loadLanguageModule('grp');
57  $this->lng->loadLanguageModule('crs');
58  $this->ctrl = $ilCtrl;
59 
61 
62  $this->setId('crs_sub_'. $a_parent_obj->object->getId());
63  parent::__construct($a_parent_obj,'members');
64 
65  $this->setFormName('subscribers');
66  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj,'members'));
67 
68  $this->addColumn('','f',"1");
69  $this->addColumn($this->lng->txt('name'),'lastname','20%');
70 
71  $all_cols = $this->getSelectableColumns();
72  foreach($this->getSelectedColumns() as $col)
73  {
74  $this->addColumn($all_cols[$col]['txt'], $col);
75  }
76 
77  $this->addColumn($this->lng->txt('application_date'),'sub_time',"10%");
78 
79  if($this->getShowSubject())
80  $this->addColumn($this->lng->txt('subject'),'subject','15%');
81 
82  $this->addColumn('','mail','10%');
83 
84  if($a_parent_obj->object->getType() == "sess")
85  {
86  $this->addMultiCommand('confirmAssignSubscribers',$this->lng->txt('sess_accept_request'));
87  }
88  else{
89  $this->addMultiCommand('confirmAssignSubscribers',$this->lng->txt('assign'));
90  }
91 
92  $this->addMultiCommand('confirmRefuseSubscribers',$this->lng->txt('refuse'));
93  $this->addMultiCommand('sendMailToSelectedUsers',$this->lng->txt('crs_mem_send_mail'));
94 
95 
96  $this->setPrefix('subscribers');
97  $this->setSelectAllCheckbox('subscribers');
98  $this->setRowTemplate("tpl.show_subscribers_row.html","Services/Membership");
99 
100  if($show_content)
101  {
102  $this->enable('sort');
103  $this->enable('header');
104  $this->enable('numinfo');
105  $this->enable('select_all');
106  }
107  else
108  {
109  $this->disable('content');
110  $this->disable('header');
111  $this->disable('footer');
112  $this->disable('numinfo');
113  $this->disable('select_all');
114  }
115 
116  $this->setExternalSegmentation(true);
117 
118  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
119  self::$has_odf_definitions = ilCourseDefinedFieldDefinition::_hasFields($this->getParentObject()->object->getId());
120 
121  }
122 
127  public function getSelectableColumns()
128  {
129  if(self::$all_columns)
130  {
131  return self::$all_columns;
132  }
133 
134  include_once './Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php';
135  $ef = ilExportFieldsInfo::_getInstanceByType($this->getParentObject()->object->getType());
136  self::$all_columns = $ef->getSelectableFieldsInfo($this->getParentObject()->object->getId());
137  return self::$all_columns;
138  }
139 
140 
148  public function fillRow($a_set)
149  {
150  global $ilUser;
151 
152 
153  include_once './Modules/Course/classes/class.ilObjCourseGrouping.php';
154  if(!ilObjCourseGrouping::_checkGroupingDependencies($this->getParentObject()->object,$a_set['usr_id']) and
156  {
157  $prefix = $this->getParentObject()->object->getType();
158  $this->tpl->setVariable('ALERT_MSG',
159  sprintf($this->lng->txt($prefix.'_lim_assigned'),
160  ilObject::_lookupTitle(current($ids))
161  ));
162 
163  }
164 
165  $this->tpl->setVariable('VAL_ID',$a_set['usr_id']);
166  $this->tpl->setVariable('VAL_NAME',$a_set['lastname'].', '.$a_set['firstname']);
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 'odf_last_update':
187  $this->tpl->setVariable('VAL_CUST',(string) $a_set['odf_info_txt']);
188  break;
189 
190 
191  default:
192  $this->tpl->setCurrentBlock('custom_fields');
193  $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
194  $this->tpl->parseCurrentBlock();
195  break;
196  }
197  }
198 
199 
200  $this->tpl->setVariable('VAL_SUBTIME',ilDatePresentation::formatDate(new ilDateTime($a_set['sub_time'],IL_CAL_UNIX)));
201 
202 
203  $this->showActionLinks($a_set);
204 
205 
206  if($this->getShowSubject())
207  {
208 
209  if(strlen($a_set['subject']))
210  {
211  $this->tpl->setCurrentBlock('subject');
212  $this->tpl->setVariable('VAL_SUBJECT','"'.$a_set['subject'].'"');
213  $this->tpl->parseCurrentBlock();
214  }
215  else
216  {
217  $this->tpl->touchBlock('subject');
218  }
219 
220  }
221  }
222 
227  public function showActionLinks($a_set)
228  {
229  if(!self::$has_odf_definitions)
230  {
231  $this->ctrl->setParameterByClass(get_class($this->getParentObject()),'member_id',$a_set['usr_id']);
232  $link = $this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()),'sendMailToSelectedUsers');
233  $this->tpl->setVariable('MAIL_LINK',$link);
234  $this->tpl->setVariable('MAIL_TITLE',$this->lng->txt('crs_mem_send_mail'));
235  return TRUE;
236  }
237 
238  // show action menu
239  include_once './Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php';
240  $list = new ilAdvancedSelectionListGUI();
241  $list->setSelectionHeaderClass('small');
242  $list->setItemLinkClass('small');
243  $list->setId('actl_'.$a_set['usr_id'].'_'.$this->getId());
244  $list->setListTitle($this->lng->txt('actions'));
245 
246  $this->ctrl->setParameterByClass(get_class($this->getParentObject()),'member_id',$a_set['usr_id']);
247  $this->ctrl->setParameter($this->parent_obj, 'member_id', $a_set['usr_id']);
248  $trans = $this->lng->txt($this->getParentObject()->object->getType().'_mem_send_mail');
249  $link = $this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()),'sendMailToSelectedUsers');
250  $list->addItem($trans, '', $link,'sendMailToSelectedUsers');
251 
252  $this->ctrl->setParameterByClass('ilobjectcustomuserfieldsgui','member_id',$a_set['usr_id']);
253  $trans = $this->lng->txt($this->getParentObject()->object->getType().'_cdf_edit_member');
254  $list->addItem($trans, '', $this->ctrl->getLinkTargetByClass('ilobjectcustomuserfieldsgui','editMember'));
255 
256  $this->tpl->setVariable('ACTION_USER',$list->getHTML());
257 
258  }
259 
260 
268  public function readSubscriberData()
269  {
270  include_once './Services/Membership/classes/class.ilParticipants.php';
271 
272  $sub_data = ilParticipants::lookupSubscribersData($this->getParentObject()->object->getId());
273 
274  $sub_ids = array();
275  foreach($sub_data as $usr_id => $usr_data)
276  {
277  $sub_ids[] = $usr_id;
278  }
279 
280  $this->determineOffsetAndOrder();
281 
282  include_once './Services/User/classes/class.ilUserQuery.php';
283 
284  $additional_fields = $this->getSelectedColumns();
285  unset($additional_fields["firstname"]);
286  unset($additional_fields["lastname"]);
287  unset($additional_fields["last_login"]);
288  unset($additional_fields["access_until"]);
289 
290  $udf_ids = $usr_data_fields = $odf_ids = array();
291  foreach($additional_fields as $field)
292  {
293  if(substr($field, 0, 3) == 'udf')
294  {
295  $udf_ids[] = substr($field, 4);
296  continue;
297  }
298  if(substr($field, 0, 3) == 'odf')
299  {
300  $odf_ids[] = substr($field, 4);
301  continue;
302  }
303 
304  $usr_data_fields[] = $field;
305  }
306 
307  $usr_data = ilUserQuery::getUserListData(
308  $this->getOrderField(),
309  $this->getOrderDirection(),
310  $this->getOffset(),
311  $this->getLimit(),
312  '',
313  '',
314  null,
315  false,
316  false,
317  0,
318  0,
319  null,
320  $usr_data_fields,
321  $sub_ids
322  );
323 
324  foreach((array) $usr_data['set'] as $user)
325  {
326  $usr_ids[] = $user['usr_id'];
327  }
328 
329  // merge course data
330  $course_user_data = $this->getParentObject()->readMemberData($usr_ids,$this->type == 'admin');
331  $a_user_data = array();
332  foreach((array) $usr_data['set'] as $ud)
333  {
334  $a_user_data[$ud['usr_id']] = array_merge($ud,(array) $course_user_data[$ud['usr_id']]);
335  }
336 
337  // Custom user data fields
338  if($udf_ids)
339  {
340  include_once './Services/User/classes/class.ilUserDefinedData.php';
341  $data = ilUserDefinedData::lookupData($usr_ids, $udf_ids);
342  foreach($data as $usr_id => $fields)
343  {
344  if(!$this->checkAcceptance($usr_id))
345  {
346  continue;
347  }
348 
349  foreach($fields as $field_id => $value)
350  {
351  $a_user_data[$usr_id]['udf_' . $field_id] = $value;
352  }
353  }
354  }
355  // Object specific user data fields
356  if($odf_ids)
357  {
358  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
359  $data = ilCourseUserData::_getValuesByObjId($this->getParentObject()->object->getId());
360  foreach($data as $usr_id => $fields)
361  {
362  // #7264: as we get data for all course members filter against user data
363  if(!$this->checkAcceptance($usr_id) || !in_array($usr_id, $usr_ids))
364  {
365  continue;
366  }
367 
368  foreach($fields as $field_id => $value)
369  {
370  $a_user_data[$usr_id]['odf_' . $field_id] = $value;
371  }
372  }
373 
374  // add last edit date
375  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
376  foreach(ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getParentObject()->object->getId()) as $usr_id => $edit_info)
377  {
378  if(!isset($a_user_data[$usr_id]))
379  {
380  continue;
381  }
382 
383  include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
384  if($usr_id == $edit_info['update_user'])
385  {
386  $a_user_data[$usr_id]['odf_last_update'] = '';
387  $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
388  if(ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getParentObject()->object->getType()))
389  {
390  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
391  $a_user_data[$usr_id]['odf_info_txt'] .= (', '.ilDatePresentation::formatDate($edit_info['editing_time']));
392  }
393  }
394  else
395  {
396  $a_user_data[$usr_id]['odf_last_update'] = $edit_info['update_user'];
397  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
398 
399  $name = ilObjUser::_lookupName($edit_info['update_user']);
400  $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'].' '.$name['lastname'].', '.ilDatePresentation::formatDate($edit_info['editing_time']));
401  }
402  }
403  }
404 
405  foreach($usr_data['set'] as $user)
406  {
407  // Check acceptance
408  if(!$this->checkAcceptance($user['usr_id']))
409  {
410  continue;
411  }
412  // DONE: accepted
413  foreach($usr_data_fields as $field)
414  {
415  $a_user_data[$user['usr_id']][$field] = $user[$field] ? $user[$field] : '';
416  }
417  }
418 
419  // Waiting list subscription
420  foreach($sub_data as $usr_id => $usr_data)
421  {
422  if(!in_array($usr_id, $usr_ids))
423  {
424  continue;
425  }
426  $a_user_data[$usr_id]['sub_time'] = $usr_data['time'];
427  $a_user_data[$usr_id]['subject'] = $usr_data['subject'];
428  }
429 
430  $this->setMaxCount(count($sub_ids));
431  return $this->setData($a_user_data);
432  }
433 
434  protected function checkAcceptance()
435  {
436  return true;
437  }
438 
439  public function setShowSubject($a_value)
440  {
441  $this->show_subject = (bool)$a_value;
442  }
443 
444  public function getShowSubject()
445  {
446  return $this->show_subject;
447  }
448 }
449 ?>
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.
__construct($a_parent_obj, $show_content=true, $show_subject=true)
Constructor.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
setExternalSegmentation($a_val)
Set external segmentation.
static getAssignedObjects()
Alway call checkGroupingDependencies before.
static _lookupTitle($a_id)
lookup object title
const IL_CAL_UNIX
getOrderDirection()
Get order direction.
getParentObject()
Get parent object.
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
showActionLinks($a_set)
Show action links (mail ; edit crs|grp data)
Class ilTable2GUI.
Class for single dates.
static _getInstanceByType($a_type)
Get Singleton Instance.
getOffset()
Get offset.
addMultiCommand($a_cmd, $a_text)
Add Command button.
enable($a_module_name)
enables particular modules of table
static formatDate(ilDateTime $date)
Format a date public.
setPrefix($a_prefix)
Date and time handling
GUI class for course/group subscriptions.
getSelectedColumns()
Get selected columns.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
static _hasFields($a_container_id)
Check if there are any define fields.
static lookupSubscribersData($a_obj_id)
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
User interface class for advanced drop-down selection lists.
getSelectableColumns()
Get selectable columns.
_checkGroupingDependencies(&$container_obj, $a_user_id=null)
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
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
getLimit()
Get limit.
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.
setMaxCount($a_max_count)
set max.
getId()
Get element id.
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.