ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilContactGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once 'Services/Mail/classes/class.ilFormatMail.php';
5 require_once 'Services/Contact/BuddySystem/classes/class.ilBuddySystem.php';
6 
16 {
19 
23  protected $tpl;
24 
28  protected $ctrl;
29 
33  protected $lng;
34 
38  protected $tabs_gui;
39 
43  protected $help;
44 
48  protected $toolbar;
49 
53  protected $umail;
54 
58  protected $user;
59 
63  protected $error;
64 
68  protected $rbacsystem;
69 
73  protected $has_sub_tabs = false;
74 
78  public function __construct()
79  {
80  global $DIC;
81 
82  $this->tpl = $DIC['tpl'];
83  $this->ctrl = $DIC['ilCtrl'];
84  $this->lng = $DIC['lng'];
85  $this->tabs_gui = $DIC['ilTabs'];
86  $this->help = $DIC['ilHelp'];
87  $this->toolbar = $DIC['ilToolbar'];
88  $this->user = $DIC['ilUser'];
89  $this->error = $DIC['ilErr'];
90  $this->rbacsystem = $DIC['rbacsystem'];
91 
92  $this->ctrl->saveParameter($this, "mobj_id");
93 
94  $this->umail = new ilFormatMail($this->user->getId());
95  $this->lng->loadLanguageModule('buddysystem');
96  }
97 
98  public function executeCommand()
99  {
100  $this->showSubTabs();
101 
102  $forward_class = $this->ctrl->getNextClass($this);
103 
104  // delete all stored maildata
105  $this->umail->savePostData($this->user->getId(), array(), '', '', '', '', '', '', '', '');
106 
107  switch ($forward_class) {
108  case 'ilmailformgui':
109  include_once 'Services/Mail/classes/class.ilMailFormGUI.php';
110  $this->ctrl->forwardCommand(new ilMailFormGUI());
111  break;
112 
113  case 'ilmailsearchcoursesgui':
114  include_once 'Services/Contact/classes/class.ilMailSearchCoursesGUI.php';
115 
116  $this->activateTab('mail_my_courses');
117 
118  $this->ctrl->setReturn($this, "showContacts");
119  $this->ctrl->forwardCommand(new ilMailSearchCoursesGUI());
120  break;
121 
122  case 'ilmailsearchgroupsgui':
123  include_once 'Services/Contact/classes/class.ilMailSearchGroupsGUI.php';
124 
125  $this->activateTab('mail_my_groups');
126 
127  $this->ctrl->setReturn($this, "showContacts");
128  $this->ctrl->forwardCommand(new ilMailSearchGroupsGUI());
129  break;
130 
131  case 'ilmailinglistsgui':
132  include_once 'Services/Contact/classes/class.ilMailingListsGUI.php';
133 
134  $this->activateTab('mail_my_mailing_lists');
135 
136  $this->ctrl->setReturn($this, "showContacts");
137  $this->ctrl->forwardCommand(new ilMailingListsGUI());
138  break;
139 
140  case 'ilusersgallerygui':
141  if (!ilBuddySystem::getInstance()->isEnabled()) {
142  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
143  }
144 
145  $this->tabs_gui->activateSubTab('buddy_view_gallery');
146  $this->activateTab('my_contacts');
147  require_once 'Services/User/Gallery/classes/class.ilUsersGalleryContacts.php';
148  require_once 'Services/User/Gallery/classes/class.ilUsersGalleryGUI.php';
149  $this->ctrl->forwardCommand(new ilUsersGalleryGUI(new ilUsersGalleryContacts()));
150  $this->tpl->show();
151  break;
152 
153  case 'ilpublicuserprofilegui':
154  require_once 'Services/User/classes/class.ilPublicUserProfileGUI.php';
155  $profile_gui = new ilPublicUserProfileGUI(ilUtil::stripSlashes($_GET['user']));
156  $profile_gui->setBackUrl($this->ctrl->getLinkTarget($this, 'showContacts'));
157  $this->ctrl->forwardCommand($profile_gui);
158  $this->tpl->show();
159  break;
160 
161  default:
162  $this->activateTab('mail_my_entries');
163 
164  if (!($cmd = $this->ctrl->getCmd())) {
165  if (ilBuddySystem::getInstance()->isEnabled()) {
166  $cmd = 'showContacts';
167  } else {
168  $this->ctrl->redirectByClass('ilmailsearchcoursesgui');
169  }
170  }
171 
172  $this->$cmd();
173  break;
174  }
175  return true;
176  }
177 
181  private function showSubTabs()
182  {
183  if ($this->tabs_gui->hasTabs()) {
184  if (ilBuddySystem::getInstance()->isEnabled()) {
185  $this->tabs_gui->addSubTab('my_contacts', $this->lng->txt('my_contacts'), $this->ctrl->getLinkTarget($this));
186 
187  if (in_array(strtolower($this->ctrl->getCmdClass()), array_map('strtolower', array('ilUsersGalleryGUI', get_class($this))))) {
188  require_once 'Services/Form/classes/class.ilSelectInputGUI.php';
189  $view_selection = new ilSelectInputGUI('', 'contacts_view');
190  $view_selection->setOptions(array(
191  self::CONTACTS_VIEW_TABLE => $this->lng->txt('buddy_view_table'),
192  self::CONTACTS_VIEW_GALLERY => $this->lng->txt('buddy_view_gallery')
193  ));
194  $view_selection->setValue(
195  strtolower($this->ctrl->getCmdClass()) == 'ilusersgallerygui' ? self::CONTACTS_VIEW_GALLERY : self::CONTACTS_VIEW_TABLE
196  );
197  $this->toolbar->addInputItem($view_selection);
198 
199  require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
200  $contact_view_btn = ilSubmitButton::getInstance();
201  $contact_view_btn->setCaption('submit');
202  $contact_view_btn->setCommand('changeContactsView');
203  $this->toolbar->addButtonInstance($contact_view_btn);
204  $this->toolbar->setFormAction($this->ctrl->getFormAction($this, 'changeContactsView'));
205  }
206 
207  if (
208  ilBuddySystem::getInstance()->isEnabled() &&
209  count(ilBuddyList::getInstanceByGlobalUser()->getLinkedRelations()) > 0
210  ) {
211  $this->tabs_gui->addSubTab(
212  'mail_my_mailing_lists',
213  $this->lng->txt('mail_my_mailing_lists'),
214  $this->ctrl->getLinkTargetByClass('ilmailinglistsgui')
215  );
216  }
217  }
218 
219  $this->tabs_gui->addSubTab('mail_my_courses', $this->lng->txt('mail_my_courses'), $this->ctrl->getLinkTargetByClass('ilmailsearchcoursesgui'));
220  $this->tabs_gui->addSubTab('mail_my_groups', $this->lng->txt('mail_my_groups'), $this->ctrl->getLinkTargetByClass('ilmailsearchgroupsgui'));
221  $this->has_sub_tabs = true;
222  } else {
223  $this->help->setScreenIdComponent('contacts');
224 
225  if (ilBuddySystem::getInstance()->isEnabled()) {
226  $this->tabs_gui->addTab('my_contacts', $this->lng->txt('my_contacts'), $this->ctrl->getLinkTarget($this));
227 
228  if (in_array(strtolower($this->ctrl->getCmdClass()), array_map('strtolower', array('ilUsersGalleryGUI', get_class($this))))) {
229  $this->tabs_gui->addSubTab('buddy_view_table', $this->lng->txt('buddy_view_table'), $this->ctrl->getLinkTarget($this));
230  $this->tabs_gui->addSubTab('buddy_view_gallery', $this->lng->txt('buddy_view_gallery'), $this->ctrl->getLinkTargetByClass('ilUsersGalleryGUI'));
231  }
232 
233  if (
234  ilBuddySystem::getInstance()->isEnabled() &&
235  count(ilBuddyList::getInstanceByGlobalUser()->getLinkedRelations()) > 0
236  ) {
237  $this->tabs_gui->addTab(
238  'mail_my_mailing_lists',
239  $this->lng->txt('mail_my_mailing_lists'),
240  $this->ctrl->getLinkTargetByClass('ilmailinglistsgui')
241  );
242  }
243  }
244 
245  $this->tabs_gui->addTab('mail_my_courses', $this->lng->txt('mail_my_courses'), $this->ctrl->getLinkTargetByClass('ilmailsearchcoursesgui'));
246  $this->tabs_gui->addTab('mail_my_groups', $this->lng->txt('mail_my_groups'), $this->ctrl->getLinkTargetByClass('ilmailsearchgroupsgui'));
247  }
248  }
249 
253  protected function activateTab($a_id)
254  {
255  if ($this->has_sub_tabs) {
256  $this->tabs_gui->activateSubTab($a_id);
257  } else {
258  $this->tabs_gui->activateTab($a_id);
259  }
260  }
261 
265  protected function changeContactsView()
266  {
267  if (!ilBuddySystem::getInstance()->isEnabled()) {
268  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
269  }
270 
271  if (isset($_POST['contacts_view'])) {
272  switch ($_POST['contacts_view']) {
273  case self::CONTACTS_VIEW_GALLERY:
274  $this->ctrl->redirectByClass('ilUsersGalleryGUI');
275  break;
276 
277  case self::CONTACTS_VIEW_TABLE:
278  $this->ctrl->redirect($this);
279  break;
280  }
281  }
282 
283  $this->ctrl->redirect($this);
284  }
285 
289  protected function applyContactsTableFilter()
290  {
291  if (!ilBuddySystem::getInstance()->isEnabled()) {
292  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
293  }
294 
295  require_once 'Services/Contact/BuddySystem/classes/tables/class.ilBuddySystemRelationsTableGUI.php';
296  $table = new ilBuddySystemRelationsTableGUI($this, 'showContacts');
297 
298  $table->resetOffset();
299  $table->writeFilterToSession();
300 
301  $this->showContacts();
302  }
303 
307  protected function resetContactsTableFilter()
308  {
309  if (!ilBuddySystem::getInstance()->isEnabled()) {
310  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
311  }
312 
313  require_once 'Services/Contact/BuddySystem/classes/tables/class.ilBuddySystemRelationsTableGUI.php';
314  $table = new ilBuddySystemRelationsTableGUI($this, 'showContacts');
315 
316  $table->resetOffset();
317  $table->resetFilter();
318 
319  $this->showContacts();
320  }
321 
325  protected function showContacts()
326  {
327  if (!ilBuddySystem::getInstance()->isEnabled()) {
328  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
329  }
330 
331  $this->tabs_gui->activateSubTab('buddy_view_table');
332  $this->activateTab('my_contacts');
333 
334  require_once 'Services/Contact/BuddySystem/classes/tables/class.ilBuddySystemRelationsTableGUI.php';
335  $table = new ilBuddySystemRelationsTableGUI($this, 'showContacts');
336  $table->populate();
337  $this->tpl->setContent($table->getHTML());
338  $this->tpl->show();
339  }
340 
344  protected function mailToUsers()
345  {
346  if (!$this->rbacsystem->checkAccess('internal_mail', ilMailGlobalServices::getMailObjectRefId())) {
347  $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->MESSAGE);
348  }
349 
350  if (!isset($_POST['usr_id']) || !is_array($_POST['usr_id']) || 0 == count($_POST['usr_id'])) {
351  ilUtil::sendInfo($this->lng->txt('mail_select_one_entry'));
352  $this->showContacts();
353  return true;
354  }
355 
356  $usr_ids = (array) $_POST['usr_id'];
357 
358  $mail_data = $this->umail->getSavedData();
359  if (!is_array($mail_data)) {
360  $this->umail->savePostData($this->user->getId(), array(), '', '', '', '', '', '', '', '');
361  }
362 
363  $logins = array();
364  foreach ($usr_ids as $usr_id) {
365  $logins[] = ilObjUser::_lookupLogin($usr_id);
366  }
367  $logins = array_filter($logins);
368 
369  if (count($logins) > 0) {
370  $mail_data = $this->umail->appendSearchResult($logins, 'to');
371  $this->umail->savePostData(
372  $mail_data['user_id'],
373  $mail_data['attachments'],
374  $mail_data['rcp_to'],
375  $mail_data['rcp_cc'],
376  $mail_data['rcp_bcc'],
377  $mail_data['m_type'],
378  $mail_data['m_email'],
379  $mail_data['m_subject'],
380  $mail_data['m_message'],
381  $mail_data['use_placeholders'],
382  $mail_data['tpl_ctx_id'],
383  $mail_data['tpl_ctx_params']
384  );
385  }
386 
387  ilUtil::redirect('ilias.php?baseClass=ilMailGUI&type=search_res');
388  }
389 
394  public function submitInvitation()
395  {
396  if (!isset($_POST['usr_id']) || !strlen($_POST['usr_id'])) {
397  ilUtil::sendInfo($this->lng->txt('select_one'), true);
398  $this->ctrl->redirect($this);
399  }
400 
401  if (!$_POST['room_id']) {
402  ilUtil::sendInfo($this->lng->txt('select_one'));
403  $_POST['usr_id'] = explode(',', $_POST['usr_id']);
404  $this->inviteToChat();
405  return;
406  }
407 
408  // get selected users (comma seperated user id list)
409  $usr_ids = explode(',', $_POST['usr_id']);
410 
411  // get selected chatroom from POST-String, format: "room_id , scope"
412  $room_ids = explode(',', $_POST['room_id']);
413  $room_id = (int) $room_ids[0];
414  $scope = 0;
415 
416  if (count($room_ids) > 0) {
417  $scope = (int) $room_ids[1];
418  }
419 
420  include_once 'Modules/Chatroom/classes/class.ilChatroom.php';
421 
422  $room = ilChatroom::byRoomId((int) $room_id, true);
423  $no_access = array();
424  $no_login = array();
425  $valid_users = array();
426  $valid_user_to_login_map = array();
427 
428  foreach ($usr_ids as $usr_id) {
429  $login = ilObjUser::_lookupLogin($usr_id);
430  if (!strlen($login)) {
431  $no_login[$usr_id] = $usr_id;
432  continue;
433  }
434 
435  $ref_id = $room->getRefIdByRoomId($room_id);
436 
437  if (
438  !ilChatroom::checkPermissionsOfUser($usr_id, 'read', $ref_id) ||
439  $room->isUserBanned($usr_id)
440  ) {
441  $no_access[$usr_id] = $login;
442  } else {
443  $valid_users[$usr_id] = $usr_id;
444  $valid_user_to_login_map[$usr_id] = $login;
445  }
446  }
447 
448  if (count($no_access) || count($no_login)) {
449  $message = '';
450 
451  if (count($no_access) > 0) {
452  $message .= $this->lng->txt('chat_users_without_permission') . ':<br>';
453  $list = '';
454 
455  foreach ($no_access as $usr_id => $login) {
456  $list .= '<li>' . $login . '</li>';
457  }
458 
459  $message .= '<ul>';
460  $message .= $list;
461  $message .= '</ul>';
462  }
463 
464  if (count($no_login)) {
465  $message .= $this->lng->txt('chat_users_without_login') . ':<br>';
466  $list = '';
467 
468  foreach ($no_login as $usr_id) {
469  $list .= '<li>' . $usr_id . '</li>';
470  }
471 
472  $message .= '<ul>';
473  $message .= $list;
474  $message .= '</ul>';
475  }
476 
478  $_POST['usr_id'] = $usr_ids;
479  $this->inviteToChat();
480  return;
481  }
482 
483  $ref_id = $room->getRefIdByRoomId($room_id);
484 
485  require_once 'Services/Link/classes/class.ilLink.php';
486  if ($scope) {
487  $url = ilLink::_getStaticLink($ref_id, 'chtr', true, '_' . $scope);
488  } else {
489  $url = ilLink::_getStaticLink($ref_id, 'chtr');
490  }
491  $link = '<p><a target="chatframe" href="' . $url . '" title="' . $this->lng->txt('goto_invitation_chat') . '">' . $this->lng->txt('goto_invitation_chat') . '</a></p>';
492 
493  $userlist = array();
494  foreach ($valid_users as $id) {
495  $room->inviteUserToPrivateRoom($id, $scope);
496  $room->sendInvitationNotification(
497  null,
498  $this->user->getId(),
499  $id,
500  (int) $scope,
501  $url
502  );
503  $userlist[] = '<li>' . $valid_user_to_login_map[$id] . '</li>';
504  }
505 
506  if ($userlist) {
507  ilUtil::sendSuccess($this->lng->txt('chat_users_have_been_invited') . '<ul>' . implode('', $userlist) . '</ul>' . $link, true);
508  }
509 
510  $this->ctrl->redirect($this);
511  }
512 
516  protected function inviteToChat()
517  {
518  $this->tabs_gui->activateSubTab('buddy_view_table');
519  $this->activateTab('my_contacts');
520 
521  $this->lng->loadLanguageModule('chatroom');
522 
523  if (!isset($_POST['usr_id']) || !is_array($_POST['usr_id']) || 0 == count($_POST['usr_id'])) {
524  ilUtil::sendInfo($this->lng->txt('select_one'), true);
525  $this->ctrl->redirect($this);
526  }
527  $usr_ids = $_POST['usr_id'];
528 
529  require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
530 
531  $ilChatroom = new ilChatroom();
532  $chat_rooms = $ilChatroom->getAccessibleRoomIdByTitleMap($this->user->getId());
533  $subrooms = array();
534 
535  foreach ($chat_rooms as $room_id => $title) {
536  $subrooms[] = $ilChatroom->getPrivateSubRooms($room_id, $this->user->getId());
537  }
538 
539  include_once 'Services/Form/classes/class.ilPropertyFormGUI.php';
540 
541  $form = new ilPropertyFormGUI();
542  $form->setTitle($this->lng->txt('mail_invite_users_to_chat'));
543 
544  $psel = new ilSelectInputGUI($this->lng->txt('chat_select_room'), 'room_id');
545  $options = array();
546 
547  asort($chat_rooms);
548  foreach ($chat_rooms as $room_id => $room) {
549  $ref_id = $room_id;
550 
551  if ($ilChatroom->isUserBanned($this->user->getId())) {
552  continue;
553  }
554 
555  $options[$ref_id] = $room;
556 
557  foreach ($subrooms as $subroom) {
558  foreach ($subroom as $sub_id => $parent_id) {
559  if ($parent_id == $ref_id) {
561  $options[$ref_id . ',' . $sub_id] = '+&nbsp;' . $title;
562  }
563  }
564  }
565  }
566 
567  $psel->setOptions($options);
568  $form->addItem($psel);
569  $phidden = new ilHiddenInputGUI('usr_id');
570  $phidden->setValue(implode(',', $usr_ids));
571  $form->addItem($phidden);
572  $form->addCommandButton('submitInvitation', $this->lng->txt('submit'));
573  $form->addCommandButton('showContacts', $this->lng->txt('cancel'));
574  $form->setFormAction($this->ctrl->getFormAction($this, 'showContacts'));
575 
576  $this->tpl->setTitle($this->lng->txt('mail_invite_users_to_chat'));
577  $this->tpl->setContent($form->getHTML());
578  $this->tpl->show();
579  }
580 }
static _lookupLogin($a_user_id)
lookup login
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
changeContactsView()
This method is used to switch the contacts view between gallery and table in the mail system...
static getInstanceByGlobalUser()
This class represents a selection list property in a property form.
This class represents a property form user interface.
global $DIC
Definition: saml.php:7
$_GET["client_id"]
__construct()
ilContactGUI constructor.
static byRoomId($room_id, $initObject=false)
Returns ilChatroom by given $room_id.
if(!array_key_exists('StateId', $_REQUEST)) $id
ilUsersGalleryGUI: ilPublicUserProfileGUI ilUsersGalleryGUI: ilCourseMembershipGUI, ilGroupMembershipGUI
inviteToChat()
Send chat invitations to selected Users.
user()
Definition: user.php:4
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
This class represents a hidden form property in a property form.
GUI class for public user profile presentation.
catch(Exception $e) $message
Class UserMail this class handles user mails.
if(isset($_POST['submit'])) $form
static lookupPrivateRoomTitle($proom_id)
submitInvitation()
Last step of chat invitations check access for every selected user and send invitation.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
Class ilChatroom.
static getMailObjectRefId()
Determines the reference id of the mail object and stores this information in a local cache variable...
$login
Definition: cron.php:13
$url
if(empty($password)) $table
Definition: pwgen.php:24
static redirect($a_script)
static checkPermissionsOfUser($usr_id, $permissions, $ref_id)
Checks user permissions in question for a given user id in relation to a given ref_id.
$_POST["username"]
Class ilUsersGalleryUsers.