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
24include_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
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
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?>
const IL_CAL_DATE
const IL_CAL_UNIX
User interface class for advanced drop-down selection lists.
static _hasFields($a_container_id)
Check if there are any define fields.
static _getValuesByObjId($a_obj_id)
Get values by obj_id (for all users)
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
Class for single dates.
static _getInstanceByType($a_type)
Get Singleton Instance.
_checkGroupingDependencies(&$container_obj, $a_user_id=null)
static getAssignedObjects()
Alway call checkGroupingDependencies before.
static _lookupName($a_user_id)
lookup user name
static lookupEntriesByObjectId($a_obj_id)
Get entries by obj_id @global type $ilDB.
static _lookupTitle($a_id)
lookup object title
static lookupSubscribersData($a_obj_id)
static _getInstance()
Get instance of ilPrivacySettings.
GUI class for course/group subscriptions.
__construct($a_parent_obj, $show_content=true, $show_subject=true)
Constructor.
getSelectableColumns()
Get selectable columns.
showActionLinks($a_set)
Show action links (mail ; edit crs|grp data)
Class ilTable2GUI.
getSelectedColumns()
Get selected columns.
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.
getParentObject()
Get parent object.
setPrefix($a_prefix)
set prefix for sort and offset fields (if you have two or more tables on a page that you want to sort...
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
getId()
Get element id.
setData($a_data)
set table data @access public
getLimit()
Get limit.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setFormName($a_formname)
Set Form name.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
getOffset()
Get offset.
setExternalSegmentation($a_val)
Set external segmentation.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
getOrderDirection()
Get order direction.
setMaxCount($a_max_count)
set max.
disable($a_module_name)
diesables particular modules of table
enable($a_module_name)
enables particular modules of table
static lookupData($a_user_ids, $a_field_ids)
Lookup data.
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.
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40
global $ilUser
Definition: imgupload.php:15