/**
  * @param ilChatroom $room
  * @return array
  */
 public function getMessages(ilChatroom $room)
 {
     /**
      * @var $ilUser ilObjUser
      */
     global $ilUser;
     include 'Modules/Chatroom/classes/class.ilChatroomUser.php';
     $messages = $room->getLastMessagesForChatViewer($room->getSetting('display_past_msgs'), new ilChatroomUser($ilUser, $room));
     $output_messages = array();
     foreach ($messages as $msg) {
         $output_messages[] = $msg;
     }
     return $output_messages;
 }
 /**
  * Saves file, fetched from $_FILES to specified upload path.
  *
  * @global ilObjUser $ilUser
  */
 public function uploadFile()
 {
     global $ilCtrl;
     if (!ilChatroom::checkUserPermissions('read', $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass("ilrepositorygui", "");
     }
     $upload_path = $this->getUploadPath();
     $this->checkUploadPath($upload_path);
     /**
      * @todo: filename must be unique.
      */
     $file = $_FILES['file_to_upload']['tmp_name'];
     $filename = $_FILES['file_to_upload']['name'];
     $type = $_FILES['file_to_upload']['type'];
     $target = $upload_path . $filename;
     if (ilUtil::moveUploadedFile($file, $filename, $target)) {
         global $ilUser;
         require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
         require_once 'Modules/Chatroom/classes/class.ilChatroomUser.php';
         $room = ilChatroom::byObjectId($this->gui->object->getId());
         $chat_user = new ilChatroomUser($ilUser, $room);
         $user_id = $chat_user->getUserId();
         if (!$room) {
             throw new Exception('unkown room');
         } else {
             if (!$room->isSubscribed($chat_user->getUserId())) {
                 throw new Exception('not subscribed');
             }
         }
         $room->saveFileUploadToDb($user_id, $filename, $type);
         $this->displayLinkToUploadedFile($room, $chat_user);
     }
 }
 /**
  * @param int $invited_id
  */
 private function inviteById($invited_id)
 {
     /**
      * @var $ilUser ilObjUser
      * @var $ilCtrl ilCtrl
      */
     global $ilUser, $ilCtrl;
     if (!ilChatroom::checkUserPermissions('read', $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass('ilrepositorygui', 'ref_id', ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass('ilrepositorygui', '');
     }
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     $chat_user = new ilChatroomUser($ilUser, $room);
     $user_id = $chat_user->getUserId();
     if (!$room) {
         $response = json_encode(array('success' => false, 'reason' => 'unkown room'));
         echo json_encode($response);
         exit;
     } else {
         if ($_REQUEST['sub'] && !$room->isOwnerOfPrivateRoom($user_id, $_REQUEST['sub'])) {
             $response = json_encode(array('success' => false, 'reason' => 'not owner of private room'));
             echo json_encode($response);
             exit;
         }
     }
     $connector = $this->gui->getConnector();
     $result = $connector->inviteToPrivateRoom($room, $_REQUEST['sub'], $ilUser, $invited_id);
     $room->sendInvitationNotification($this->gui, $chat_user, $invited_id, (int) $_REQUEST['sub']);
     echo json_encode($result);
     exit;
 }
 /**
  * Displays window box to kick a user fetched from $_REQUEST['user'].
  *
  * @global ilObjUser $ilUser
  * @param string $method
  */
 public function executeDefault($method)
 {
     global $ilUser, $ilCtrl;
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     require_once 'Modules/Chatroom/classes/class.ilChatroomUser.php';
     if (!ilChatroom::checkUserPermissions(array('moderate'), $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass("ilrepositorygui", "");
     }
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     if ($room) {
         // if user is in scope
         $scope = $room->getRoomId();
         $chat_user = new ilChatroomUser($ilUser, $room);
         $message = json_encode($this->buildMessage(ilUtil::stripSlashes((int) $_REQUEST['sub']), $chat_user));
         $params = array('message' => $message);
         $query = http_build_query($params);
         $connector = $this->gui->getConnector();
         $response = $connector->post($scope, $query);
         $responseObject = json_decode($response);
         $room->clearMessages($_REQUEST['sub']);
     } else {
         $response = json_encode(array('success' => false, 'reason' => 'unkown room'));
     }
     echo $response;
     exit;
 }
 public function executeDefault($method)
 {
     global $tpl, $ilUser, $ilCtrl, $lng, $ilAccess;
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     $chat_user = new ilChatroomUser($ilUser, $room);
     $result = new stdClass();
     $result->users = $room->getConnectedUsers();
     $result->private_rooms = $room->getActivePrivateRooms($ilUser->getId());
     $result->userinfo = array('moderator' => $ilAccess->checkAccess('moderate', '', $_GET['ref_id']), 'userid' => $chat_user->getUserId());
     $smileys = array();
     include_once 'Modules/Chatroom/classes/class.ilChatroomSmilies.php';
     $smileys_array = ilChatroomSmilies::_getSmilies();
     foreach ($smileys_array as $smiley_array) {
         foreach ($smiley_array as $key => $value) {
             if ($key == 'smiley_keywords') {
                 $new_keys = explode("\n", $value);
             }
             if ($key == 'smiley_fullpath') {
                 $new_val = $value;
             }
         }
         foreach ($new_keys as $new_key) {
             $smileys[$new_key] = $new_val;
         }
     }
     $result->smileys = $smileys;
     echo json_encode($result);
     exit;
 }
 /**
  * Prepares and displays the info screen.
  *
  * @global ilAccessHandler $ilAccess
  * @global ilCtrl2 $ilCtrl
  * @global ilLanguage $lng
  * @param string $method
  */
 public function executeDefault($method)
 {
     global $ilAccess, $ilCtrl, $lng;
     include_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     if (!ilChatroom::checkUserPermissions('read', $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass("ilrepositorygui", "");
     }
     $this->gui->switchToVisibleMode();
     if (!$ilAccess->checkAccess("visible", "", $this->gui->ref_id)) {
         $this->gui->ilias->raiseError($lng->txt("msg_no_perm_read"), $this->ilias->error_obj->MESSAGE);
     }
     $info = new ilInfoScreenGUI($this->gui);
     $info->enablePrivateNotes();
     if ($ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
         $info->enableNews();
     }
     $info->addMetaDataSections($this->gui->object->getId(), 0, $this->gui->object->getType());
     if (!$method) {
         $ilCtrl->setCmd('showSummary');
     } else {
         $ilCtrl->setCmd($method);
     }
     $ilCtrl->forwardCommand($info);
 }
 /**
  * Prepares and displays settings form.
  * @param ilPropertyFormGUI $settingsForm
  */
 public function general(ilPropertyFormGUI $settingsForm = null)
 {
     /**
      * @var $lng    ilLanguage
      * @var $tpl    ilTemplate
      * @var $ilCtrl ilCtrl
      */
     global $lng, $tpl, $ilCtrl;
     if (!ilChatroom::checkUserPermissions(array('read', 'write'), $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass('ilrepositorygui', 'ref_id', ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass('ilrepositorygui', '');
     }
     $chatSettings = new ilSetting('chatroom');
     if (!$chatSettings->get('chat_enabled')) {
         ilUtil::sendInfo($lng->txt('server_disabled'), true);
     }
     $this->gui->switchToVisibleMode();
     $formFactory = new ilChatroomFormFactory();
     if (!$settingsForm) {
         $settingsForm = $formFactory->getSettingsForm();
     }
     $room = ilChatRoom::byObjectId($this->gui->object->getId());
     $settings = array('title' => $this->gui->object->getTitle(), 'desc' => $this->gui->object->getDescription());
     if ($room) {
         ilChatroomFormFactory::applyValues($settingsForm, array_merge($settings, $room->getSettings()));
     } else {
         ilChatroomFormFactory::applyValues($settingsForm, $settings);
     }
     $settingsForm->setTitle($lng->txt('settings_title'));
     $settingsForm->addCommandButton('settings-saveGeneral', $lng->txt('save'));
     $settingsForm->setFormAction($ilCtrl->getFormAction($this->gui, 'settings-saveGeneral'));
     $tpl->setVariable('ADM_CONTENT', $settingsForm->getHtml());
 }
 /**
  * Switches GUI to visible mode and calls editSmiliesObject method
  * which prepares and displays the table of existing smilies.
  *
  */
 public function view()
 {
     include_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     ilChatroom::checkUserPermissions('read', $this->gui->ref_id);
     $this->gui->switchToVisibleMode();
     self::_checkSetup();
     $this->editSmiliesObject();
 }
Example #9
0
 public function cloneObject($a_target_id, $a_copy_id = 0, $a_omit_tree = false)
 {
     global $rbacreview;
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     $original_room = ilChatroom::byObjectId($this->getId());
     $newObj = parent::cloneObject($a_target_id, $a_copy_id, $a_omit_tree);
     $objId = $newObj->getId();
     $original_settings = $original_room->getSettings();
     $room = new ilChatroom();
     $original_settings['object_id'] = $objId;
     $room->saveSettings($original_settings);
     // rbac log
     include_once "Services/AccessControl/classes/class.ilRbacLog.php";
     $rbac_log_roles = $rbacreview->getParentRoleIds($newObj->getRefId(), false);
     $rbac_log = ilRbacLog::gatherFaPa($newObj->getRefId(), array_keys($rbac_log_roles), true);
     ilRbacLog::add(ilRbacLog::CREATE_OBJECT, $newObj->getRefId(), $rbac_log);
     return $newObj;
 }
 /**
  * Prepares and posts message fetched from $_REQUEST['message']
  * to recipients fetched from $_REQUEST['recipient']
  * and adds an entry to history if successful.
  *
  * @global ilObjUser $ilUser
  * @param string $method
  */
 public function executeDefault($method)
 {
     global $ilUser, $ilCtrl;
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     require_once 'Modules/Chatroom/classes/class.ilChatroomUser.php';
     if (!ilChatroom::checkUserPermissions('read', $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass("ilrepositorygui", "");
     }
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     $chat_user = new ilChatroomUser($ilUser, $room);
     $user_id = $chat_user->getUserId();
     if (!$room) {
         throw new Exception('unkown room');
     } else {
         if (!$room->isSubscribed($chat_user->getUserId())) {
             throw new Exception('not subscribed');
         } else {
             if (isset($_REQUEST['sub']) && !$room->userIsInPrivateRoom($_REQUEST['sub'], $chat_user->getUserId())) {
                 $response = json_encode(array('success' => false, 'reason' => 'not subscribed to private room'));
                 echo json_encode($response);
                 exit;
             }
         }
     }
     $scope = $room->getRoomId();
     $params = array();
     if ($recipient = $_REQUEST['recipient']) {
         $params['recipients'] = join(',', array_unique(array($user_id, $recipient)));
         $params['recipient_names'] = implode(',', array($chat_user->getUsername(), $_REQUEST['recipient_name']));
         $params['public'] = isset($_REQUEST['public']) ? (int) $_REQUEST['public'] : 0;
     } else {
         $params['public'] = 1;
     }
     if ($_REQUEST['sub']) {
         $params['sub'] = (int) $_REQUEST['sub'];
     }
     $messageObject = $this->buildMessage(ilUtil::stripSlashes($_REQUEST['message']), $params, $chat_user);
     $message = json_encode($messageObject);
     $params = array_merge($params, array('message' => $message));
     //print_r($params);exit;
     $query = http_build_query($params);
     $connector = $this->gui->getConnector();
     $response = $connector->post($scope, $query);
     $responseObject = json_decode($response);
     if ($responseObject->success == true) {
         $room->addHistoryEntry($messageObject, $recipient, $publicMessage);
     }
     echo $response;
     exit;
 }
 /**
  * Get item properties
  *
  * @return	array		array of property arrays:
  * 						"alert" (boolean) => display as an alert property (usually in red)
  * 						"property" (string) => property name
  * 						"value" (string) => property value
  */
 public function getProperties()
 {
     /**
      * @var $lng ilLanguage
      */
     global $lng;
     $props = array();
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     $room = ilChatroom::byObjectId($this->obj_id);
     if ($room) {
         $props[] = array("alert" => false, "property" => $lng->txt("chat_users_active"), "value" => $room->countActiveUsers());
         if ($this->obj_id == self::$publicRoomObjId) {
             $props[] = array("alert" => false, "property" => $lng->txt("notice"), 'value' => $lng->txt('public_room'));
         }
         if (self::$chat_enabled === null) {
             $chatSetting = new ilSetting('chatroom');
             self::$chat_enabled = (bool) $chatSetting->get('chat_enabled');
         }
         if (!self::$chat_enabled) {
             $props[] = array("alert" => true, "property" => $lng->txt("status"), 'value' => $lng->txt("server_disabled"));
         }
     }
     return $props;
 }
 /**
  * Kicks user from subroom into mainroom
  * 
  * @global ilObjUser $ilUser 
  */
 public function sub()
 {
     global $ilUser, $ilCtrl;
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     require_once 'Modules/Chatroom/classes/class.ilChatroomUser.php';
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     if ($room) {
         if (!$room->isOwnerOfPrivateRoom($ilUser->getId(), $_REQUEST['sub'])) {
             if (!ilChatroom::checkPermissionsOfUser($ilUser->getId(), array('read', 'moderate'), $this->gui->ref_id)) {
                 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", ROOT_FOLDER_ID);
                 $ilCtrl->redirectByClass("ilrepositorygui", "");
             }
         }
         $scope = $room->getRoomId();
         $params = array();
         $params['user'] = $_REQUEST['user'];
         $params['sub'] = $_REQUEST['sub'];
         if ($room->userIsInPrivateRoom($params['sub'], $params['user'])) {
             $query = http_build_query($params);
             $connector = $this->gui->getConnector();
             $response = $connector->leavePrivateRoom($scope, $query);
             $responseObject = json_decode($response);
             /*
             			if( $responseObject->success == true && $room->getSetting( 'enable_history' ) )
             			{
             			//$room->addHistoryEntry( $message, $recipient, $publicMessage );
             			}
             */
             $room->unsubscribeUserFromPrivateRoom($params['sub'], $params['user']);
             $this->recantInvitation($params['sub'], $params['user']);
             $message = json_encode(array('type' => 'userjustkicked', 'user' => $params['user'], 'sub' => $params['sub']));
             $connector->sendMessage($room->getRoomId(), $message, array('public' => 1, 'sub' => 0));
         } else {
             $response = json_encode(array('success' => true, 'message' => 'was not in room'));
         }
         echo $response;
         exit;
     }
 }
 /**
  * Sets autogen_usernames default option for chatrooms
  * @param array $obj_ids
  */
 public static function setChatroomSettings($obj_ids)
 {
     if (is_array($obj_ids)) {
         foreach ($obj_ids as $obj_id) {
             $room = new ilChatroom();
             $room->saveSettings(array('object_id' => $obj_id, 'autogen_usernames' => 'Autogen #', 'room_type' => 'repository'));
         }
     }
 }
 /**
  * @param ilChatroom     $room
  * @param string         $title
  * @param ilChatroomUser $owner
  * @return mixed
  */
 public function createPrivateRoom(ilChatroom $room, $title, ilChatroomUser $owner)
 {
     $settings = array('public' => false);
     $params['user'] = $owner->getUserId();
     $params['id'] = $room->addPrivateRoom($title, $owner, $settings);
     $query = http_build_query($params);
     $response = $this->sendCreatePrivateRoom($room->getRoomId(), $query);
     $responseObject = json_decode($response);
     $return = $responseObject;
     if ($responseObject->success == true) {
         $message = json_encode(array('type' => 'private_room_created', 'timestamp' => date('c'), 'public' => 0, 'title' => $title, 'id' => $responseObject->id, 'proom_id' => $responseObject->id, 'owner' => $owner->getUserId()));
         $result = $this->sendMessage($room->getRoomId(), $message, array('public' => 0, 'recipients' => $owner->getUserId()));
         $params = array();
         $params['user'] = $owner->getUserId();
         $params['sub'] = $responseObject->id;
         $query = http_build_query($params);
         $response = $this->enterPrivateRoom($room->getRoomId(), $query);
         $room->subscribeUserToPrivateRoom($params['sub'], $params['user']);
         $message = json_encode(array('type' => 'private_room_entered', 'user' => $owner->getUserId(), 'timestamp' => date('c'), 'sub' => $responseObject->id));
         $this->sendMessage($room->getRoomId(), $message);
     }
     return $responseObject;
 }
 /**
  * Instantiates, prepares and returns object.
  * $class_name = 'ilObj' . $objDefinition->getClassName( $new_type ).
  * Fetches title from $_POST['title'], description from $_POST['desc']
  * and RefID from $_GET['ref_id'].
  * @return ilObject
  */
 public function insertObject()
 {
     /**
      * @var $rbacsystem    ilRbacSystem
      * @var $objDefinition ilObjectDefinition
      * @var $rbacreview    ilRbacReview
      */
     global $rbacsystem, $objDefinition, $rbacreview;
     $new_type = $this->type;
     // create permission is already checked in createObject.
     // This check here is done to prevent hacking attempts
     if (!$rbacsystem->checkAccess('create', $_GET['ref_id'], $new_type)) {
         $this->ilias->raiseError($this->lng->txt('no_create_permission'), $this->ilias->error_obj->MESSAGE);
     }
     $location = $objDefinition->getLocation($new_type);
     // create and insert object in objecttree
     $class_name = 'ilObj' . $objDefinition->getClassName($new_type);
     include_once $location . '/class.' . $class_name . '.php';
     /**
      * @var $newObj ilObjChatroom
      */
     $newObj = new $class_name();
     $newObj->setType($new_type);
     $newObj->setTitle(ilUtil::stripSlashes($_POST['title']));
     $newObj->setDescription(ilUtil::stripSlashes($_POST['desc']));
     $newObj->create();
     $newObj->createReference();
     $newObj->putInTree($_GET['ref_id']);
     $newObj->setPermissions($_GET['ref_id']);
     $objId = $newObj->getId();
     $room = new ilChatroom();
     $room->saveSettings(array('object_id' => $objId, 'autogen_usernames' => 'Autogen #', 'display_past_msgs' => 20, 'private_rooms_enabled' => 0));
     // rbac log
     include_once 'Services/AccessControl/classes/class.ilRbacLog.php';
     $rbac_log_roles = $rbacreview->getParentRoleIds($newObj->getRefId(), false);
     $rbac_log = ilRbacLog::gatherFaPa($newObj->getRefId(), array_keys($rbac_log_roles), true);
     ilRbacLog::add(ilRbacLog::CREATE_OBJECT, $newObj->getRefId(), $rbac_log);
     $this->object = $newObj;
     return $newObj;
 }
 /**
  * Requires ilChatroom and calls its disconnectAllUsersFromAllRooms()
  * method.
  */
 private function serverStarted()
 {
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     ilChatroom::disconnectAllUsersFromAllRooms();
 }
 /**
  * Prepares and displays history period form by session.
  *
  * @global ilLanguage $lng
  * @global ilCtrl2 $ilCtrl
  * @global ilObjUser $ilUser
  */
 public function bySession($export = false)
 {
     global $lng, $ilCtrl, $ilUser;
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     $scope = $room->getRoomId();
     $chat_user = new ilChatroomUser($ilUser, $room);
     $formFactory = new ilChatroomFormFactory();
     $durationForm = $formFactory->getSessionForm($room->getSessions($chat_user));
     $durationForm->setTitle($lng->txt('history_bysession_title'));
     $durationForm->addCommandButton('history-bySessionExport', $lng->txt('export'));
     $durationForm->addCommandButton('history-bySession', $lng->txt('show'));
     $durationForm->setFormAction($ilCtrl->getFormAction($this->gui), 'history-bySession');
     if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
         $durationForm->checkInput();
         $postVals = explode(',', $_POST['session']);
         $durationForm->setValuesByArray(array('session' => $_POST['session']));
         $messages = $room->getHistory($from = new ilDateTime($postVals[0], IL_CAL_UNIX), $to = new ilDateTime($postVals[1], IL_CAL_UNIX), $chat_user->getUserId(), isset($_REQUEST['scope']) ? $_REQUEST['scope'] : 0);
     } else {
         $last_session = $room->getLastSession($chat_user);
         if ($last_session) {
             $from = new ilDateTime($last_session['connected'], IL_CAL_UNIX);
             $to = new ilDateTime($last_session['disconnected'], IL_CAL_UNIX);
         } else {
             $from = null;
             $to = null;
         }
         $messages = $room->getHistory($from, $to, $chat_user->getUserId(), isset($_REQUEST['scope']) ? $_REQUEST['scope'] : 0);
     }
     if ($from && $to) {
         $psessions = $room->getPrivateRoomSessions($from, $to, $chat_user->getUserId(), $scope);
     } else {
         $from = new ilDateTime();
         $to = new ilDateTime();
         $psessions = array();
     }
     $psessions = $room->getPrivateRoomSessions($from, $to, $chat_user->getUserId(), $scope);
     $this->showMessages($messages, $durationForm, $export, $psessions, $from, $to);
 }
 /**
  * Builds tabs and subtabs using given $tabs, $config and $command
  * parameters.
  * @param ilTabsGUI $tabs
  * @param array     $config
  * @param array     $command
  */
 private function buildTabs(ilTabsGUI $tabs, $config, $command)
 {
     /**
      * @var $rbacsystem ilRbacSystem
      */
     global $rbacsystem;
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     foreach ($config as $id => $tabDefinition) {
         if (!ilChatroom::checkUserPermissions($tabDefinition['permission'], $this->gui->getRefId(), false)) {
             continue;
         } else {
             if (isset($tabDefinition['enabled']) && !$tabDefinition['enabled']) {
                 continue;
             }
         }
         $tabs->addTab($id, $this->getLabel($tabDefinition, $id), $tabDefinition['link']);
         if ($command[0] == $id && isset($tabDefinition['subtabs']) && is_array($tabDefinition['subtabs'])) {
             foreach ($tabDefinition['subtabs'] as $subid => $subTabDefinition) {
                 if (!$rbacsystem->checkAccess($subTabDefinition['permission'], $this->gui->getRefId())) {
                     continue;
                 } else {
                     if (isset($subTabDefinition['enabled']) && !$subTabDefinition['enabled']) {
                         continue;
                     }
                 }
                 $tabs->addSubTab($subid, $this->getLabel($subTabDefinition, $subid), $subTabDefinition['link']);
             }
         }
     }
 }
 /**
  *
  */
 public function invitePD()
 {
     /**
      * @var $ilUser ilObjUser
      * @var $ilCtrl ilCtrl
      */
     global $ilUser, $ilCtrl;
     $chatSettings = new ilSetting('chatroom');
     if (!$chatSettings->get('chat_enabled')) {
         $ilCtrl->redirect($this->gui, 'settings-general');
     }
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     $chat_user = new ilChatroomUser($ilUser, $room);
     $user_id = $_REQUEST['usr_id'];
     $connector = $this->gui->getConnector();
     $title = $room->getUniquePrivateRoomTitle($chat_user->getUsername());
     $response = $connector->createPrivateRoom($room, $title, $chat_user);
     $connector->inviteToPrivateRoom($room, $response->id, $ilUser, $user_id);
     $room->sendInvitationNotification($this->gui, $chat_user, $user_id, $response->id);
     $_REQUEST['sub'] = $response->id;
     $_SESSION['show_invitation_message'] = $user_id;
     $ilCtrl->setParameter($this->gui, 'sub', $response->id);
     $ilCtrl->redirect($this->gui, 'view');
 }
 /**
  * Kicks and bans user, fetched from $_REQUEST['user'] and adds history entry.
  *
  * @global ilObjUser $ilUser
  */
 public function active()
 {
     global $ilUser, $ilCtrl;
     if (!ilChatroom::checkUserPermissions(array('read', 'moderate'), $this->gui->ref_id)) {
         $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", ROOT_FOLDER_ID);
         $ilCtrl->redirectByClass("ilrepositorygui", "");
     }
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     if ($room) {
         // if user is in scope
         $scope = $room->getRoomId();
         $chat_user = new ilChatroomUser($ilUser, $room);
         $messageObject = $this->buildMessage(ilUtil::stripSlashes($_REQUEST['user']), $chat_user);
         $message = json_encode($messageObject);
         $params = array('message' => $message, 'userToKick' => $_REQUEST['user']);
         $query = http_build_query($params);
         $connector = $this->gui->getConnector();
         $response = $connector->kick($scope, $query);
         $responseObject = json_decode($response);
         $room->banUser($_REQUEST['user']);
         if ($responseObject->success == true) {
             $room->addHistoryEntry($messageObject, '', 1);
             $message = json_encode(array('type' => 'userjustkicked', 'user' => $params['userToKick'], 'sub' => 0));
             $connector->sendMessage($room->getRoomId(), $message, array('public' => 1, 'sub' => 0));
             $room->disconnectUser($params['userToKick']);
         }
     } else {
         $response = json_encode(array('success' => false, 'reason' => 'unkown room'));
     }
     echo $response;
     exit;
 }
 public function listUsers()
 {
     global $ilUser;
     $room = ilChatroom::byObjectId($this->gui->object->getId());
     echo json_encode($room->listUsersInPrivateRoom($_REQUEST['sub']));
     exit;
 }
 /**
  */
 protected function getMessages()
 {
     /**
      * @var $ilAccess ilAccessHandler
      * @var $ilUser   ilObjUser
      * @var $lng	  ilLanguage
      */
     global $ilAccess, $ilUser, $lng;
     $result = new stdClass();
     $result->ok = false;
     if (!(int) $_REQUEST['ref_id']) {
         echo ilJsonUtil::encode($result);
         exit;
     }
     /**
      * @var $object ilObjChatroom
      */
     $object = ilObjectFactory::getInstanceByRefId((int) $_REQUEST['ref_id'], false);
     if (!$object || !$ilAccess->checkAccess('read', '', $_REQUEST['ref_id'])) {
         ilObjUser::_writePref($ilUser->getId(), 'chatviewer_last_selected_room', 0);
         $result->errormsg = $lng->txt('msg_no_perm_read');
         echo ilJsonUtil::encode($result);
         exit;
     }
     require_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     $room = ilChatroom::byObjectId($object->getId());
     $block = new ilChatroomBlock();
     $msg = $block->getMessages($room);
     $ilUser->setPref('chatviewer_last_selected_room', $object->getRefId());
     ilObjUser::_writePref($ilUser->getId(), 'chatviewer_last_selected_room', $object->getRefId());
     $result->messages = array_reverse($msg);
     $result->ok = true;
     include_once 'Services/JSON/classes/class.ilJsonUtil.php';
     echo ilJsonUtil::encode($result);
     exit;
 }
 /**
  * @param ilPropertyFormGUI $form
  */
 public function clientsettings(ilPropertyFormGUI $form = null)
 {
     /**
      * @var $tpl    ilTemplate
      * @var $ilCtrl ilCtrl
      * @var $lng    ilLanguage
      */
     global $tpl, $ilCtrl, $lng;
     ilChatroom::checkUserPermissions('read', $this->gui->ref_id);
     $this->defaultActions();
     $this->gui->switchToVisibleMode();
     $this->showSoapWarningIfNeeded();
     require_once 'Modules/Chatroom/classes/class.ilChatroomAdmin.php';
     $adminSettings = new ilChatroomAdmin($this->gui->object->getId());
     if ($form === null) {
         require_once 'Modules/Chatroom/classes/class.ilChatroomFormFactory.php';
         $factory = new ilChatroomFormFactory();
         $form = $factory->getClientSettingsForm();
         if (!$this->commonSettings->get('soap_user_administration')) {
             $form->getItemByPostVar('chat_enabled')->setDisabled(!(bool) $this->commonSettings->get('soap_user_administration'));
             $form->getItemByPostVar('chat_enabled')->setChecked(0);
         }
         $data = (array) $adminSettings->loadClientSettings();
         if (!$data['osd_intervall']) {
             $data['osd_intervall'] = 60;
         }
         if (!$data) {
             $data = array();
         }
         if (!$data['url']) {
             $data['url'] = ilUtil::_getHttpPath();
         }
         if (!$data['client']) {
             $data['client'] = CLIENT_ID;
         }
         $data['password_retype'] = $data['password'];
         $form->setValuesByArray($data);
     }
     require_once 'Modules/Chatroom/classes/class.ilChatroomServerConnector.php';
     $serverSettings = (array) $adminSettings->loadGeneralSettings();
     if ($serverSettings['port'] && $serverSettings['address'] && !(bool) @ilChatroomServerConnector::checkServerConnection()) {
         ilUtil::sendInfo($lng->txt('chat_cannot_connect_to_server'));
     }
     $form->setTitle($lng->txt('general_settings_title'));
     $form->addCommandButton('view-saveClientSettings', $lng->txt('save'));
     $form->setFormAction($ilCtrl->getFormAction($this->gui, 'view-saveClientSettings'));
     $settingsTpl = new ilTemplate('tpl.chatroom_serversettings.html', true, true, 'Modules/Chatroom');
     $settingsTpl->setVariable('VAL_SERVERSETTINGS_FORM', $form->getHTML());
     $settingsTpl->setVariable('LBL_SERVERSETTINGS_FURTHER_INFORMATION', sprintf($lng->txt('server_further_information'), ilUtil::_getHttpPath() . '/Modules/Chatroom/server/README.txt'));
     $tpl->setVariable('ADM_CONTENT', $settingsTpl->get());
 }
 /**
  * Last step of chat invitations
  * check access for every selected user and send invitation
  */
 public function submitInvitation()
 {
     /**
      * @var $ilUser ilObjUser
      * @var $ilCtrl ilCtrl
      * @var $lng    ilLanguage
      */
     global $ilUser, $ilCtrl, $lng;
     if (!$_POST['addr_ids']) {
         ilUtil::sendFailure($lng->txt('select_one'), true);
         $ilCtrl->redirect($this, 'showAddressbook');
     }
     if (!$_POST['room_id']) {
         ilUtil::sendFailure($lng->txt('select_one'));
         $_POST['addr_id'] = explode(',', $_POST['addr_ids']);
         $this->inviteToChat();
         return;
     }
     // get selected users (comma seperated user id list)
     $ids = explode(',', $_POST['addr_ids']);
     // get selected chatroom from POST-String, format: "room_id , scope"
     $room_ids = explode(',', $_POST['room_id']);
     $room_id = (int) $room_ids[0];
     $scope = 0;
     if (count($room_ids) > 0) {
         $scope = (int) $room_ids[1];
     }
     include_once 'Modules/Chatroom/classes/class.ilChatroom.php';
     $room = ilChatroom::byRoomId((int) $room_id, true);
     $no_access = array();
     $no_login = array();
     $valid_users = array();
     $valid_user_to_login_map = array();
     foreach ($ids as $id) {
         $entry = $this->abook->getEntry($id);
         if ($entry['login']) {
             $user_id = $ilUser->getUserIdByLogin($entry['login']);
             if (!$user_id) {
                 $no_login[] = $id;
                 continue;
             }
             $ref_id = $room->getRefIdByRoomId($room_id);
             if (!ilChatroom::checkPermissionsOfUser($user_id, 'read', $ref_id) || $room->isUserBanned($user_id)) {
                 $no_access[] = $id;
             } else {
                 $valid_users[] = $user_id;
                 $valid_user_to_login_map[$user_id] = $entry['login'];
             }
         } else {
             $no_login[] = $id;
         }
     }
     if (count($no_access) || count($no_login)) {
         $message = '';
         if (count($no_access)) {
             $message .= $lng->txt('chat_users_without_permission') . ':<br>';
             $list = '';
             foreach ($no_access as $e) {
                 $list .= '<li>' . $this->abook->entryToString($e) . '</li>';
             }
             $message .= '<ul>';
             $message .= $list;
             $message .= '</ul>';
         }
         if (count($no_login)) {
             $message .= $lng->txt('chat_users_without_login') . ':<br>';
             $list = '';
             foreach ($no_login as $e) {
                 $list .= '<li>' . $this->abook->entryToString($e) . '</li>';
             }
             $message .= '<ul>';
             $message .= $list;
             $message .= '</ul>';
         }
         ilUtil::sendFailure($message);
         $_POST['addr_id'] = $ids;
         $this->inviteToChat();
         return;
     }
     $ref_id = $room->getRefIdByRoomId($room_id);
     $url = '';
     include_once 'Services/Link/classes/class.ilLink.php';
     if ($scope) {
         $url = ilLink::_getStaticLink($ref_id, 'chta', true, '_' . $scope);
     } else {
         $url = ilLink::_getStaticLink($ref_id, 'chta');
     }
     $link = '<p><a target="chatframe" href="' . $url . '" title="' . $lng->txt('goto_invitation_chat') . '">' . $lng->txt('goto_invitation_chat') . '</a></p>';
     $userlist = array();
     foreach ($valid_users as $id) {
         $room->inviteUserToPrivateRoom($id, $scope);
         $room->sendInvitationNotification(null, $ilUser->getId(), $id, (int) $scope, $url);
         $userlist[] = '<li>' . $valid_user_to_login_map[$id] . '</li>';
     }
     if ($userlist) {
         ilUtil::sendSuccess($lng->txt('chat_users_have_been_invited') . '<ul>' . implode('', $userlist) . '</ul>' . $link, true);
     }
     $ilCtrl->redirect($this, 'showAddressbook');
 }
Example #25
0
 /**
  * Returns an anonymous username containing a random number.
  *
  * @return string
  */
 public function buildAnonymousName()
 {
     $anonymous_name = str_replace('#', mt_rand(0, 10000), $this->room->getSetting('autogen_usernames'));
     return $anonymous_name;
 }