ILIAS  release_7 Revision v7.30-3-g800a261c036
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
42 protected $rep_object = null;
43
44 protected static $all_columns = null;
45 protected static $has_odf_definitions = false;
46 protected $show_subject = true;
47
48
56 public function __construct($a_parent_obj, $rep_object, $show_content = true, $show_subject = true)
57 {
58 global $DIC;
59
60 $lng = $DIC['lng'];
61 $ilCtrl = $DIC['ilCtrl'];
62
63 $this->lng = $lng;
64 $this->lng->loadLanguageModule('grp');
65 $this->lng->loadLanguageModule('crs');
66 $this->ctrl = $ilCtrl;
67
68 $this->rep_object = $rep_object;
69
71
72 $this->setId('crs_sub_' . $this->getRepositoryObject()->getId());
73 parent::__construct($a_parent_obj, 'participants');
74
75 $this->setFormName('subscribers');
76 $this->setFormAction($this->ctrl->getFormAction($a_parent_obj, 'participants'));
77
78 $this->addColumn('', 'f', "1%", true);
79 $this->addColumn($this->lng->txt('name'), 'lastname', '20%');
80
81 $all_cols = $this->getSelectableColumns();
82 foreach ($this->getSelectedColumns() as $col) {
83 $this->addColumn(
84 $all_cols[$col]['txt'],
85 $col
86 );
87 }
88
89
90 if ($this->getShowSubject()) {
91 $this->addColumn($this->lng->txt('application_date'), 'sub_time');
92 $this->addColumn($this->lng->txt('message'), 'subject', '40%');
93 } else {
94 $this->addColumn($this->lng->txt('application_date'), 'sub_time');
95 }
96
97 $this->addColumn('', 'mail');
98
99 if ($this->getRepositoryObject()->getType() == "sess") {
100 $this->addMultiCommand('confirmAssignSubscribers', $this->lng->txt('sess_accept_request'));
101 } else {
102 $this->addMultiCommand('confirmAssignSubscribers', $this->lng->txt('assign'));
103 }
104
105 $this->addMultiCommand('confirmRefuseSubscribers', $this->lng->txt('refuse'));
106 $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('crs_mem_send_mail'));
107
108 // begin-patch clipboard
109 $this->lng->loadLanguageModule('user');
110 $this->addMultiCommand('addToClipboard', $this->lng->txt('clipboard_add_btn'));
111 // end-patch clipboard
112
113
114 $this->setPrefix('subscribers');
115 $this->setSelectAllCheckbox('subscribers', true);
116 $this->setRowTemplate("tpl.show_subscribers_row.html", "Services/Membership");
117
118 if ($show_content) {
119 $this->enable('sort');
120 $this->enable('header');
121 $this->enable('numinfo');
122 $this->enable('select_all');
123 } else {
124 $this->disable('content');
125 $this->disable('header');
126 $this->disable('footer');
127 $this->disable('numinfo');
128 $this->disable('select_all');
129 }
130
131 $this->setExternalSegmentation(true);
132
133 include_once('Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php');
134 self::$has_odf_definitions = ilCourseDefinedFieldDefinition::_hasFields($this->getRepositoryObject()->getId());
135 }
136
140 protected function getRepositoryObject()
141 {
142 return $this->rep_object;
143 }
144
149 public function getSelectableColumns()
150 {
151 if (self::$all_columns) {
152 return self::$all_columns;
153 }
154
155 if ($this->getRepositoryObject()->getType() == 'sess') {
156 self::$all_columns['login'] = [
157 'txt' => $this->lng->txt('login'),
158 'default' => 1
159 ];
160 return self::$all_columns;
161 }
162
163
164 include_once './Services/PrivacySecurity/classes/class.ilExportFieldsInfo.php';
166 self::$all_columns = $ef->getSelectableFieldsInfo($this->getRepositoryObject()->getId());
167
168 // #25215
169 if (
170 is_array(self::$all_columns) &&
171 array_key_exists('consultation_hour', self::$all_columns)
172 ) {
173 unset(self::$all_columns['consultation_hour']);
174 }
175 return self::$all_columns;
176 }
177
178
186 public function fillRow($a_set)
187 {
188 global $DIC;
189
190 $ilUser = $DIC['ilUser'];
191
192
193 include_once './Modules/Course/classes/class.ilObjCourseGrouping.php';
196 $prefix = $this->getRepositoryObject()->getType();
197 $this->tpl->setVariable(
198 'ALERT_MSG',
199 sprintf(
200 $this->lng->txt($prefix . '_lim_assigned'),
201 ilObject::_lookupTitle(current($ids))
202 )
203 );
204 }
205
206 $this->tpl->setVariable('VAL_ID', $a_set['usr_id']);
207 $this->tpl->setVariable('VAL_NAME', $a_set['lastname'] . ', ' . $a_set['firstname']);
208
209 foreach ($this->getSelectedColumns() as $field) {
210 switch ($field) {
211 case 'gender':
212 $a_set['gender'] = $a_set['gender'] ? $this->lng->txt('gender_' . $a_set['gender']) : '';
213 $this->tpl->setCurrentBlock('custom_fields');
214 $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
215 $this->tpl->parseCurrentBlock();
216 break;
217
218 case 'birthday':
219 $a_set['birthday'] = $a_set['birthday'] ? ilDatePresentation::formatDate(new ilDate($a_set['birthday'], IL_CAL_DATE)) : $this->lng->txt('no_date');
220 $this->tpl->setCurrentBlock('custom_fields');
221 $this->tpl->setVariable('VAL_CUST', $a_set[$field]);
222 $this->tpl->parseCurrentBlock();
223 break;
224
225 case 'odf_last_update':
226 $this->tpl->setVariable('VAL_CUST', (string) $a_set['odf_info_txt']);
227 break;
228
229 case 'org_units':
230 $this->tpl->setCurrentBlock('custom_fields');
231 include_once './Modules/OrgUnit/classes/PathStorage/class.ilOrgUnitPathStorage.php';
232 $this->tpl->setVariable('VAL_CUST', (string) ilOrgUnitPathStorage::getTextRepresentationOfUsersOrgUnits($a_set['usr_id']));
233 $this->tpl->parseCurrentBlock();
234 break;
235
236 default:
237 $this->tpl->setCurrentBlock('custom_fields');
238 $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : '');
239 $this->tpl->parseCurrentBlock();
240 break;
241 }
242 }
243
244
245 $this->tpl->setVariable('VAL_SUBTIME', ilDatePresentation::formatDate(new ilDateTime($a_set['sub_time'], IL_CAL_UNIX)));
246
247
248 $this->showActionLinks($a_set);
249
250
251 if ($this->getShowSubject()) {
252 if (strlen($a_set['subject'])) {
253 $this->tpl->setCurrentBlock('subject');
254 $this->tpl->setVariable('VAL_SUBJECT', '"' . $a_set['subject'] . '"');
255 $this->tpl->parseCurrentBlock();
256 } else {
257 $this->tpl->touchBlock('subject');
258 }
259 }
260 }
261
266 public function showActionLinks($a_set)
267 {
268 if (!self::$has_odf_definitions) {
269 $this->ctrl->setParameterByClass(get_class($this->getParentObject()), 'member_id', $a_set['usr_id']);
270 $link = $this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()), 'sendMailToSelectedUsers');
271 $this->tpl->setVariable('MAIL_LINK', $link);
272 $this->tpl->setVariable('MAIL_TITLE', $this->lng->txt('crs_mem_send_mail'));
273 return true;
274 }
275
276 // show action menu
277 include_once './Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php';
278 $list = new ilAdvancedSelectionListGUI();
279 $list->setSelectionHeaderClass('small');
280 $list->setItemLinkClass('small');
281 $list->setId('actl_' . $a_set['usr_id'] . '_' . $this->getId());
282 $list->setListTitle($this->lng->txt('actions'));
283
284 $this->ctrl->setParameterByClass(get_class($this->getParentObject()), 'member_id', $a_set['usr_id']);
285 $this->ctrl->setParameter($this->parent_obj, 'member_id', $a_set['usr_id']);
286 $trans = $this->lng->txt($this->getRepositoryObject()->getType() . '_mem_send_mail');
287 $link = $this->ctrl->getLinkTargetByClass(get_class($this->getParentObject()), 'sendMailToSelectedUsers');
288 $list->addItem($trans, '', $link, 'sendMailToSelectedUsers');
289
290 $this->ctrl->setParameterByClass('ilobjectcustomuserfieldsgui', 'member_id', $a_set['usr_id']);
291 $trans = $this->lng->txt($this->getRepositoryObject()->getType() . '_cdf_edit_member');
292 $list->addItem($trans, '', $this->ctrl->getLinkTargetByClass('ilobjectcustomuserfieldsgui', 'editMember'));
293
294 $this->tpl->setVariable('ACTION_USER', $list->getHTML());
295 }
296
297
305 public function readSubscriberData(array $a_subscriber_ids)
306 {
308 $sub_ids = [];
309 foreach ($a_subscriber_ids as $usr_id) {
310 $sub_ids[] = $usr_id;
311 $sub_data[$usr_id] = $subscriber_data[$usr_id];
312 }
313
315
316 include_once './Services/User/classes/class.ilUserQuery.php';
317
318 $additional_fields = $this->getSelectedColumns();
319 unset($additional_fields["firstname"]);
320 unset($additional_fields["lastname"]);
321 unset($additional_fields["last_login"]);
322 unset($additional_fields["access_until"]);
323 unset($additional_fields['org_units']);
324
325 $udf_ids = $usr_data_fields = $odf_ids = array();
326 foreach ($additional_fields as $field) {
327 if (substr($field, 0, 3) == 'udf') {
328 $udf_ids[] = substr($field, 4);
329 continue;
330 }
331 if (substr($field, 0, 3) == 'odf') {
332 $odf_ids[] = substr($field, 4);
333 continue;
334 }
335
336 $usr_data_fields[] = $field;
337 }
338
340 $this->getOrderField(),
341 $this->getOrderDirection(),
342 $this->getOffset(),
343 $this->getLimit(),
344 '',
345 '',
346 null,
347 false,
348 false,
349 0,
350 0,
351 null,
352 $usr_data_fields,
353 $sub_ids
354 );
355
356 foreach ((array) $usr_data['set'] as $user) {
357 $usr_ids[] = $user['usr_id'];
358 }
359
360 // merge course data
361 $course_user_data = $this->getParentObject()->readMemberData($usr_ids, array());
362 $a_user_data = array();
363 foreach ((array) $usr_data['set'] as $ud) {
364 $a_user_data[$ud['usr_id']] = array_merge($ud, (array) $course_user_data[$ud['usr_id']]);
365 }
366
367 // Custom user data fields
368 if ($udf_ids) {
369 include_once './Services/User/classes/class.ilUserDefinedData.php';
370 $data = ilUserDefinedData::lookupData($usr_ids, $udf_ids);
371 foreach ($data as $usr_id => $fields) {
372 if (!$this->checkAcceptance($usr_id)) {
373 continue;
374 }
375
376 foreach ($fields as $field_id => $value) {
377 $a_user_data[$usr_id]['udf_' . $field_id] = $value;
378 }
379 }
380 }
381 // Object specific user data fields
382 if ($odf_ids) {
383 include_once './Modules/Course/classes/Export/class.ilCourseUserData.php';
385 foreach ($data as $usr_id => $fields) {
386 // #7264: as we get data for all course members filter against user data
387 if (!$this->checkAcceptance($usr_id) || !in_array($usr_id, $usr_ids)) {
388 continue;
389 }
390
391 foreach ($fields as $field_id => $value) {
392 $a_user_data[$usr_id]['odf_' . $field_id] = $value;
393 }
394 }
395
396 // add last edit date
397 include_once './Services/Membership/classes/class.ilObjectCustomUserFieldHistory.php';
398 foreach (ilObjectCustomUserFieldHistory::lookupEntriesByObjectId($this->getRepositoryObject()->getId()) as $usr_id => $edit_info) {
399 if (!isset($a_user_data[$usr_id])) {
400 continue;
401 }
402
403 include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
404 if ($usr_id == $edit_info['update_user']) {
405 $a_user_data[$usr_id]['odf_last_update'] = '';
406 $a_user_data[$usr_id]['odf_info_txt'] = $GLOBALS['DIC']['lng']->txt('cdf_edited_by_self');
407 if (ilPrivacySettings::_getInstance()->enabledAccessTimesByType($this->getRepositoryObject()->getType())) {
408 $a_user_data[$usr_id]['odf_last_update'] .= ('_' . $edit_info['editing_time']->get(IL_CAL_UNIX));
409 $a_user_data[$usr_id]['odf_info_txt'] .= (', ' . ilDatePresentation::formatDate($edit_info['editing_time']));
410 }
411 } else {
412 $a_user_data[$usr_id]['odf_last_update'] = $edit_info['update_user'];
413 $a_user_data[$usr_id]['odf_last_update'] .= ('_' . $edit_info['editing_time']->get(IL_CAL_UNIX));
414
415 $name = ilObjUser::_lookupName($edit_info['update_user']);
416 $a_user_data[$usr_id]['odf_info_txt'] = ($name['firstname'] . ' ' . $name['lastname'] . ', ' . ilDatePresentation::formatDate($edit_info['editing_time']));
417 }
418 }
419 }
420
421 foreach ($usr_data['set'] as $user) {
422 // Check acceptance
423 if (!$this->checkAcceptance($user['usr_id'])) {
424 continue;
425 }
426 // DONE: accepted
427 foreach ($usr_data_fields as $field) {
428 $a_user_data[$user['usr_id']][$field] = $user[$field] ? $user[$field] : '';
429 }
430 }
431
432 // Waiting list subscription
433 foreach ($sub_data as $usr_id => $usr_data) {
434 if (!in_array($usr_id, $usr_ids)) {
435 continue;
436 }
437 $a_user_data[$usr_id]['sub_time'] = $usr_data['time'];
438 $a_user_data[$usr_id]['subject'] = $usr_data['subject'];
439 }
440
441 $this->setMaxCount(count($sub_ids));
442 return $this->setData($a_user_data);
443 }
444
445 protected function checkAcceptance()
446 {
447 return true;
448 }
449
450 public function setShowSubject($a_value)
451 {
452 $this->show_subject = (bool) $a_value;
453 }
454
455 public function getShowSubject()
456 {
457 return $this->show_subject;
458 }
459}
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
An exception for terminatinating execution or to throw for unit testing.
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, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
@classDescription Date and time handling
Class for single dates.
static _getInstanceByType($a_type)
Get Singleton Instance.
static _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.
getSelectableColumns()
Get selectable columns.
readSubscriberData(array $a_subscriber_ids)
read data
showActionLinks($a_set)
Show action links (mail ; edit crs|grp data)
__construct($a_parent_obj, $rep_object, $show_content=true, $show_subject=true)
Constructor.
Class ilTable2GUI.
getSelectedColumns()
Get selected columns.
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.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
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.
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.
getOffset()
Get offset.
setExternalSegmentation($a_val)
Set external segmentation.
setId($a_val)
Set id.
setFormName($a_formname="")
Set Form name.
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="", $a_authentication_filter=null)
Get data for user administration list.
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
if($format !==null) $name
Definition: metadata.php:230
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc