ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilBuddySystemRelationsTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2015 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once 'Services/Table/classes/class.ilTable2GUI.php';
5 require_once 'Services/Contact/BuddySystem/classes/class.ilBuddyList.php';
6 require_once 'Services/Contact/BuddySystem/classes/class.ilBuddySystemLinkButton.php';
7 
13 {
17  const APPLY_FILTER_CMD = 'applyContactsTableFilter';
18 
22  const RESET_FILTER_CMD = 'resetContactsTableFilter';
23 
27  const STATE_FILTER_ELM_ID = 'relation_state_type';
28 
32  protected $ctrl;
33 
37  protected $container_tpl;
38 
42  protected $access_to_mail_system = false;
43 
47  protected $chat_enabled = false;
48 
52  protected $user;
53 
58  public function __construct($a_parent_obj, $a_parent_cmd)
59  {
64  global $DIC;
65 
66  $this->ctrl = $DIC['ilCtrl'];
67  $this->container_tpl = $DIC['tpl'];
68  $this->user = $DIC['ilUser'];
69 
70  $this->setId('buddy_system_tbl');
71  parent::__construct($a_parent_obj, $a_parent_cmd);
72 
73  $this->lng->loadLanguageModule('buddysystem');
74 
75  $this->access_to_mail_system = $DIC->rbac()->system()->checkAccess('internal_mail', ilMailGlobalServices::getMailObjectRefId());
76 
77  $chatSettings = new ilSetting('chatroom');
78  $this->chat_enabled = $chatSettings->get("chat_enabled", false);
79 
80  $this->setDefaultOrderDirection('ASC');
81  $this->setDefaultOrderField('public_name');
82 
83  $this->setTitle($this->lng->txt('buddy_tbl_title_relations'));
84 
85  if($this->access_to_mail_system || $this->chat_enabled)
86  {
87  $this->addColumn('', 'chb', '1%', true);
88  $this->setSelectAllCheckbox('usr_id');
89  if($this->access_to_mail_system)
90  {
91  $this->addMultiCommand('mailToUsers', $this->lng->txt('send_mail_to'));
92  }
93  if($this->chat_enabled)
94  {
95  $this->addMultiCommand('inviteToChat', $this->lng->txt('invite_to_chat'));
96  }
97  }
98 
99  $this->addColumn($this->lng->txt('name'), 'public_name');
100  $this->addColumn($this->lng->txt('login'), 'login');
101  $this->addColumn('', '');
102 
103  $this->setRowTemplate('tpl.buddy_system_relation_table_row.html', 'Services/Contact/BuddySystem');
104  $this->setFormAction($this->ctrl->getFormAction($a_parent_obj, $a_parent_cmd));
105 
106  $this->setFilterCommand(self::APPLY_FILTER_CMD);
107  $this->setResetCommand(self::RESET_FILTER_CMD);
108 
109  $this->initFilter();
110  }
111 
115  public function initFilter()
116  {
117  $this->filters = array();
118  $this->filter = array();
119 
120  require_once 'Services/Contact/BuddySystem/classes/states/class.ilBuddySystemRelationStateFactory.php';
121 
122  require_once'Services/Form/classes/class.ilSelectInputGUI.php';
123  $relations_state_selection = new ilSelectInputGUI($this->lng->txt('buddy_tbl_filter_state'), self::STATE_FILTER_ELM_ID);
124 
125  $options = array();
126  $state = ilBuddySystemRelationStateFactory::getInstance()->getStatesAsOptionArray(false);
127  foreach($state as $key => $option)
128  {
129  $options[$key] = $option;
130  }
131  $relations_state_selection->setOptions(array('' => $this->lng->txt('please_choose')) + $options);
132  $this->addFilterItem($relations_state_selection);
133  $relations_state_selection->readFromSession();
134  $this->filter['relation_state_type'] = $relations_state_selection->getValue();
135 
136  require_once 'Services/Form/classes/class.ilTextInputGUI.php';
137  $public_name = new ilTextInputGUI($this->lng->txt('name'), 'public_name');
138  $this->addFilterItem($public_name);
139  $public_name->readFromSession();
140  $this->filter['public_name'] = $public_name->getValue();
141  }
142 
146  public function populate()
147  {
148  $this->setExternalSorting(false);
149  $this->setExternalSegmentation(false);
150 
151  $data = array();
152 
153  $relations = ilBuddyList::getInstanceByGlobalUser()->getRelations();
154 
155  $state_filter = $this->filter[self::STATE_FILTER_ELM_ID];
156  $relations = $relations->filter(function(ilBuddySystemRelation $relation) use ($state_filter) {
157  return !strlen($state_filter) || strtolower(get_class($relation->getState())) == strtolower($state_filter);
158  });
159 
160  require_once 'Services/User/classes/class.ilUserUtil.php';
161  $public_names = ilUserUtil::getNamePresentation($relations->getKeys(), false, false, '', false, true, false);
162  $logins = ilUserUtil::getNamePresentation($relations->getKeys(), false, false, '', false, false, false);
163 
164  $logins = array_map(function($value) {
165  $matches = null;
166  preg_match_all('/\[([^\[]+?)\]/', $value, $matches);
167  return (
168  is_array($matches) &&
169  isset($matches[1]) &&
170  is_array($matches[1]) &&
171  isset($matches[1][count($matches[1]) - 1])
172  ) ? $matches[1][count($matches[1]) - 1] : '';
173  }, $logins);
174 
175  $public_name = $this->filter['public_name'];
176  $relations = $relations->filter(function(ilBuddySystemRelation $relation) use ($public_name, $relations, $public_names, $logins) {
177  return (
178  !strlen($public_name) ||
179  strpos(strtolower($public_names[$relations->getKey($relation)]), strtolower($public_name)) !== false ||
180  strpos(strtolower($logins[$relations->getKey($relation)]), strtolower($public_name)) !== false
181  );
182  });
183 
184  foreach($relations->toArray() as $usr_id => $relation)
185  {
186  $data[] = array(
187  'usr_id' => $usr_id,
188  'public_name' => $public_names[$usr_id],
189  'login' => $logins[$usr_id]
190  );
191  }
192 
193  $this->setData($data);
194  }
195 
201  protected function fillRow($a_set)
202  {
203  if($this->access_to_mail_system)
204  {
205  $a_set['chb'] = ilUtil::formCheckbox(0, 'usr_id[]', $a_set['usr_id']);
206  }
207 
208  $public_profile = ilObjUser::_lookupPref($a_set['usr_id'], 'public_profile');
209  if(!$this->user->isAnonymous() && $public_profile == 'y' || $public_profile == 'g')
210  {
211  $this->ctrl->setParameterByClass('ilpublicuserprofilegui', 'user', $a_set['usr_id']);
212  $profile_target = $this->ctrl->getLinkTargetByClass('ilpublicuserprofilegui', 'getHTML');
213  $a_set['profile_link'] = $profile_target;
214  $a_set['linked_public_name'] = $a_set['public_name'];
215 
216  $a_set['profile_link_login'] = $profile_target;
217  $a_set['linked_login'] = $a_set['login'];
218  }
219  else
220  {
221  $a_set['unlinked_public_name'] = $a_set['public_name'];
222  $a_set['unlinked_login'] = $a_set['login'];
223  }
224 
225  $a_set['contact_actions'] = ilBuddySystemLinkButton::getInstanceByUserId($a_set['usr_id'])->getHtml();
226  parent::fillRow($a_set);
227  }
228 
232  public function render()
233  {
234  $listener_tpl = new ilTemplate('tpl.buddy_system_relation_table_listener.html', true, true, 'Services/Contact/BuddySystem');
235  $listener_tpl->setVariable('TABLE_ID', $this->getId());
236  $listener_tpl->setVariable('FILTER_ELM_ID', self::STATE_FILTER_ELM_ID);
237  $listener_tpl->setVariable('NO_ENTRIES_TEXT', $this->getNoEntriesText() ? $this->getNoEntriesText() : $this->lng->txt("no_items"));
238 
239  return parent::render() . $listener_tpl->get();
240  }
241 }
ILIAS Setting Class.
setExternalSorting($a_val)
Set external sorting.
__construct($a_parent_obj, $a_parent_cmd="", $a_template_context="")
Constructor.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static getInstanceByGlobalUser()
This class represents a selection list property in a property form.
setExternalSegmentation($a_val)
Set external segmentation.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
setId($a_val)
Set id.
user()
Definition: user.php:4
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
static getNamePresentation($a_user_id, $a_user_image=false, $a_profile_link=false, $a_profile_back_link="", $a_force_first_lastname=false, $a_omit_login=false, $a_sortable=true, $a_return_data_array=false)
Default behaviour is:
Class ilTable2GUI.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
if(!is_array($argv)) $options
special template class to simplify handling of ITX/PEAR
addMultiCommand($a_cmd, $a_text)
Add Command button.
fillRow($a_set)
Standard Version of Fill Row.
This class represents a text property in a property form.
setOptions($a_options)
Set Options.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
getNoEntriesText()
Get text for an empty table.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
Class ilBuddySystemRelation.
static _lookupPref($a_usr_id, $a_keyword)
static getMailObjectRefId()
Determines the reference id of the mail object and stores this information in a local cache variable...
global $DIC
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
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 formCheckbox($checked, $varname, $value, $disabled=false)
??? public
setFilterCommand($a_val, $a_caption=null)
Set filter command.