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