ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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
4require_once 'Services/Mail/classes/class.ilFormatMail.php';
5require_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']) {
274 $this->ctrl->redirectByClass('ilUsersGalleryGUI');
275 break;
276
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->getAllRooms($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 foreach ($chat_rooms as $room_id => $room) {
548 $ref_id = $room_id;
549
550 if ($ilChatroom->isUserBanned($this->user->getId())) {
551 continue;
552 }
553
554 $options[$ref_id] = $room;
555
556 foreach ($subrooms as $subroom) {
557 foreach ($subroom as $sub_id => $parent_id) {
558 if ($parent_id == $ref_id) {
560 $options[$ref_id . ',' . $sub_id] = '+&nbsp;' . $title;
561 }
562 }
563 }
564 }
565
566 $psel->setOptions($options);
567 $form->addItem($psel);
568 $phidden = new ilHiddenInputGUI('usr_id');
569 $phidden->setValue(implode(',', $usr_ids));
570 $form->addItem($phidden);
571 $form->addCommandButton('submitInvitation', $this->lng->txt('submit'));
572 $form->addCommandButton('showContacts', $this->lng->txt('cancel'));
573 $form->setFormAction($this->ctrl->getFormAction($this, 'showContacts'));
574
575 $this->tpl->setTitle($this->lng->txt('mail_invite_users_to_chat'));
576 $this->tpl->setContent($form->getHTML());
577 $this->tpl->show();
578 }
579}
user()
Definition: user.php:4
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
error($a_errmsg)
set error message @access public
static getInstanceByGlobalUser()
Class ilChatroom.
static lookupPrivateRoomTitle($proom_id)
static checkPermissionsOfUser($usr_id, $permissions, $ref_id)
Checks user permissions in question for a given user id in relation to a given ref_id.
static byRoomId($room_id, $initObject=false)
Returns ilChatroom by given $room_id.
inviteToChat()
Send chat invitations to selected Users.
__construct()
ilContactGUI constructor.
changeContactsView()
This method is used to switch the contacts view between gallery and table in the mail system.
submitInvitation()
Last step of chat invitations check access for every selected user and send invitation.
Class UserMail this class handles user mails.
This class represents a hidden form property in a property form.
static getMailObjectRefId()
Determines the reference id of the mail object and stores this information in a local cache variable.
static _lookupLogin($a_user_id)
lookup login
This class represents a property form user interface.
GUI class for public user profile presentation.
This class represents a selection list property in a property form.
static getInstance()
Factory.
Class ilUsersGalleryUsers.
@ilCtrl_Calls ilUsersGalleryGUI: ilPublicUserProfileGUI @ilCtrl_isCalledBy ilUsersGalleryGUI: ilCours...
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
if(!array_key_exists('StateId', $_REQUEST)) $id
catch(Exception $e) $message
$url
if(empty($password)) $table
Definition: pwgen.php:24
if(isset($_POST['submit'])) $form
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
global $DIC
Definition: saml.php:7