ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
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  $this->addMultiCommand('confirmAssignSubscribers',$this->lng->txt('assign'));
85  $this->addMultiCommand('confirmRefuseSubscribers',$this->lng->txt('refuse'));
86  $this->addMultiCommand('sendMailToSelectedUsers',$this->lng->txt('crs_mem_send_mail'));
87 
88 
89  $this->setPrefix('subscribers');
90  $this->setSelectAllCheckbox('subscribers');
91  $this->setRowTemplate("tpl.show_subscribers_row.html","Services/Membership");
92 
93  if($show_content)
94  {
95  $this->enable('sort');
96  $this->enable('header');
97  $this->enable('numinfo');
98  $this->enable('select_all');
99  }
100  else
101  {
102  $this->disable('content');
103  $this->disable('header');
104  $this->disable('footer');
105  $this->disable('numinfo');
106  $this->disable('select_all');
107  }
108 
109  $this->setExternalSegmentation(true);
110 
111  include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
112  self::$has_odf_definitions = ilCourseDefinedFieldDefinition::_hasFields($this->getParentObject()->object->getId());
113 
114  }
115 
120  public function getSelectableColumns()
121  {
122  if(self::$all_columns)
123  {
124  return self::$all_columns;
125  }
126 
127  include_once './Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php';
128  $ef = ilExportFieldsInfo::_getInstanceByType($this->getParentObject()->object->getType());
129  self::$all_columns = $ef->getSelectableFieldsInfo($this->getParentObject()->object->getId());
130  return self::$all_columns;
131  }
132 
133 
141  public function fillRow($a_set)
142  {
143  global $ilUser;
144 
145 
146  include_once './Modules/Course/classes/class.ilObjCourseGrouping.php';
147  if(!ilObjCourseGrouping::_checkGroupingDependencies($this->getParentObject()->object,$a_set['usr_id']) and
149  {
150  $prefix = $this->getParentObject()->object->getType();
151  $this->tpl->setVariable('ALERT_MSG',
152  sprintf($this->lng->txt($prefix.'_lim_assigned'),
153  ilObject::_lookupTitle(current($ids))
154  ));
155 
156  }
157 
158  $this->tpl->setVariable('VAL_ID',$a_set['usr_id']);
159  $this->tpl->setVariable('VAL_NAME',$a_set['lastname'].', '.$a_set['firstname']);
160 
161  foreach($this->getSelectedColumns() as $field)
162  {
163  switch($field)
164  {
165  case 'gender':
166  $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
167  $this->tpl->setCurrentBlock('custom_fields');
168  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
169  $this->tpl->parseCurrentBlock();
170  break;
171 
172  case 'birthday':
173  $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
174  $this->tpl->setCurrentBlock('custom_fields');
175  $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
176  $this->tpl->parseCurrentBlock();
177  break;
178 
179  case 'odf_last_update':
180  $this->tpl->setVariable('VAL_CUST',(string) $a_set['odf_info_txt']);
181  break;
182 
183 
184  default:
185  $this->tpl->setCurrentBlock('custom_fields');
186  $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
187  $this->tpl->parseCurrentBlock();
188  break;
189  }
190  }
191 
192 
193  $this->tpl->setVariable('VAL_SUBTIME',ilDatePresentation::formatDate(new ilDateTime($a_set['sub_time'],IL_CAL_UNIX)));
194 
195 
196  $this->showActionLinks($a_set);
197 
198 
199  if($this->getShowSubject())
200  {
201 
202  if(strlen($a_set['subject']))
203  {
204  $this->tpl->setCurrentBlock('subject');
205  $this->tpl->setVariable('VAL_SUBJECT','"'.$a_set['subject'].'"');
206  $this->tpl->parseCurrentBlock();
207  }
208  else
209  {
210  $this->tpl->touchBlock('subject');
211  }
212 
213  }
214  }
215 
220  public function showActionLinks($a_set)
221  {
222  if(!self::$has_odf_definitions)
223  {
224  $this->ctrl->setParameterByClass(get_class($this->getParentObject()),'member_id',$a_set['usr_id']);
225  $link = $this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()),'sendMailToSelectedUsers');
226  $this->tpl->setVariable('MAIL_LINK',$link);
227  $this->tpl->setVariable('MAIL_TITLE',$this->lng->txt('crs_mem_send_mail'));
228  return TRUE;
229  }
230 
231  // show action menu
232  include_once './Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php';
233  $list = new ilAdvancedSelectionListGUI();
234  $list->setSelectionHeaderClass('small');
235  $list->setItemLinkClass('small');
236  $list->setId('actl_'.$a_set['usr_id'].'_'.$this->getId());
237  $list->setListTitle($this->lng->txt('actions'));
238 
239  $this->ctrl->setParameterByClass(get_class($this->getParentObject()),'member_id',$a_set['usr_id']);
240  $this->ctrl->setParameter($this->parent_obj, 'member_id', $a_set['usr_id']);
241  $trans = $this->lng->txt($this->getParentObject()->object->getType().'_mem_send_mail');
242  $link = $this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()),'sendMailToSelectedUsers');
243  $list->addItem($trans, '', $link,'sendMailToSelectedUsers');
244 
245  $this->ctrl->setParameterByClass('ilobjectcustomuserfieldsgui','member_id',$a_set['usr_id']);
246  $trans = $this->lng->txt($this->getParentObject()->object->getType().'_cdf_edit_member');
247  $list->addItem($trans, '', $this->ctrl->getLinkTargetByClass('ilobjectcustomuserfieldsgui','editMember'));
248 
249  $this->tpl->setVariable('ACTION_USER',$list->getHTML());
250 
251  }
252 
253 
261  public function readSubscriberData()
262  {
263  include_once './Services/Membership/classes/class.ilParticipants.php';
264 
265  $sub_data = ilParticipants::lookupSubscribersData($this->getParentObject()->object->getId());
266 
267  $sub_ids = array();
268  foreach($sub_data as $usr_id => $usr_data)
269  {
270  $sub_ids[] = $usr_id;
271  }
272 
273  $this->determineOffsetAndOrder();
274 
275  include_once './Services/User/classes/class.ilUserQuery.php';
276 
277  $additional_fields = $this->getSelectedColumns();
278  unset($additional_fields["firstname"]);
279  unset($additional_fields["lastname"]);
280  unset($additional_fields["last_login"]);
281  unset($additional_fields["access_until"]);
282 
283  $udf_ids = $usr_data_fields = $odf_ids = array();
284  foreach($additional_fields as $field)
285  {
286  if(substr($field, 0, 3) == 'udf')
287  {
288  $udf_ids[] = substr($field, 4);
289  continue;
290  }
291  if(substr($field, 0, 3) == 'odf')
292  {
293  $odf_ids[] = substr($field, 4);
294  continue;
295  }
296 
297  $usr_data_fields[] = $field;
298  }
299 
300  $usr_data = ilUserQuery::getUserListData(
301  $this->getOrderField(),
302  $this->getOrderDirection(),
303  $this->getOffset(),
304  $this->getLimit(),
305  '',
306  '',
307  null,
308  false,
309  false,
310  0,
311  0,
312  null,
313  $usr_data_fields,
314  $sub_ids
315  );
316 
317  foreach((array) $usr_data['set'] as $user)
318  {
319  $usr_ids[] = $user['usr_id'];
320  }
321 
322  // merge course data
323  $course_user_data = $this->getParentObject()->readMemberData($usr_ids,$this->type == 'admin');
324  $a_user_data = array();
325  foreach((array) $usr_data['set'] as $ud)
326  {
327  $a_user_data[$ud['usr_id']] = array_merge($ud,(array) $course_user_data[$ud['usr_id']]);
328  }
329 
330  // Custom user data fields
331  if($udf_ids)
332  {
333  include_once './Services/User/classes/class.ilUserDefinedData.php';
334  $data = ilUserDefinedData::lookupData($usr_ids, $udf_ids);
335  foreach($data as $usr_id => $fields)
336  {
337  if(!$this->checkAcceptance($usr_id))
338  {
339  continue;
340  }
341 
342  foreach($fields as $field_id => $value)
343  {
344  $a_user_data[$usr_id]['udf_' . $field_id] = $value;
345  }
346  }
347  }
348  // Object specific user data fields
349  if($odf_ids)
350  {
351  include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
352  $data = ilCourseUserData::_getValuesByObjId($this->getParentObject()->object->getId());
353  foreach($data as $usr_id => $fields)
354  {
355  // #7264: as we get data for all course members filter against user data
356  if(!$this->checkAcceptance($usr_id) || !in_array($usr_id, $usr_ids))
357  {
358  continue;
359  }
360 
361  foreach($fields as $field_id => $value)
362  {
363  $a_user_data[$usr_id]['odf_' . $field_id] = $value;
364  }
365  }
366 
367  // add last edit date
368  include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
369  foreach(ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getParentObject()->object->getId()) as $usr_id => $edit_info)
370  {
371  if(!isset($a_user_data[$usr_id]))
372  {
373  continue;
374  }
375 
376  include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
377  if($usr_id == $edit_info['update_user'])
378  {
379  $a_user_data[$usr_id]['odf_last_update'] = '';
380  $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['lng']->txt('cdf_edited_by_self');
381  if(ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getParentObject()->object->getType()))
382  {
383  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
384  $a_user_data[$usr_id]['odf_info_txt'] .= (', '.ilDatePresentation::formatDate($edit_info['editing_time']));
385  }
386  }
387  else
388  {
389  $a_user_data[$usr_id]['odf_last_update'] = $edit_info['update_user'];
390  $a_user_data[$usr_id]['odf_last_update'] .= ('_'.$edit_info['editing_time']->get(IL_CAL_UNIX));
391 
392  $name = ilObjUser::_lookupName($edit_info['update_user']);
393  $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'].' '.$name['lastname'].', '.ilDatePresentation::formatDate($edit_info['editing_time']));
394  }
395  }
396  }
397 
398  foreach($usr_data['set'] as $user)
399  {
400  // Check acceptance
401  if(!$this->checkAcceptance($user['usr_id']))
402  {
403  continue;
404  }
405  // DONE: accepted
406  foreach($usr_data_fields as $field)
407  {
408  $a_user_data[$user['usr_id']][$field] = $user[$field] ? $user[$field] : '';
409  }
410  }
411 
412  // Waiting list subscription
413  foreach($sub_data as $usr_id => $usr_data)
414  {
415  if(!in_array($usr_id, $usr_ids))
416  {
417  continue;
418  }
419  $a_user_data[$usr_id]['sub_time'] = $usr_data['time'];
420  $a_user_data[$usr_id]['subject'] = $usr_data['subject'];
421  }
422 
423  $this->setMaxCount(count($sub_ids));
424  return $this->setData($a_user_data);
425  }
426 
427  protected function checkAcceptance()
428  {
429  return true;
430  }
431 
432  public function setShowSubject($a_value)
433  {
434  $this->show_subject = (bool)$a_value;
435  }
436 
437  public function getShowSubject()
438  {
439  return $this->show_subject;
440  }
441 }
442 ?>