pull/2487/head
jmontoyaa 9 years ago
parent 2ab2f84d45
commit 8ee3753aa4
  1. 14
      main/inc/ajax/chat.ajax.php
  2. 46
      main/inc/lib/chat.lib.php
  3. 337
      main/inc/lib/javascript/chat/css/chat.css
  4. 1342
      main/inc/lib/javascript/chat/js/chat.js
  5. 107
      main/template/default/chat/chat.tpl

@ -9,6 +9,10 @@ $_dont_save_user_course_access = true;
require_once __DIR__.'/../global.inc.php';
if (api_get_setting('allow_global_chat') == 'false') {
exit;
}
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
if (api_is_anonymous()) {
@ -21,10 +25,6 @@ if ($action == 'preview') {
exit;
}
if (api_get_setting('allow_global_chat') == 'false') {
exit;
}
$to_user_id = isset($_REQUEST['to']) ? $_REQUEST['to'] : null;
$message = isset($_REQUEST['message']) ? $_REQUEST['message'] : null;
@ -94,7 +94,11 @@ switch ($action) {
echo Display::tag('p', $videoChatLink, ['class' => 'lead']);
break;
case 'notify_not_support':
$chat->send(api_get_user_id(), $to_user_id, get_lang('TheXUserBrowserDoesNotSupportWebRTC'));
$chat->send(
api_get_user_id(),
$to_user_id,
get_lang('TheXUserBrowserDoesNotSupportWebRTC')
);
break;
default:
echo '';

@ -10,7 +10,6 @@ use ChamiloSession as Session;
*/
class Chat extends Model
{
public $table;
public $columns = array(
'id',
'from_user',
@ -36,7 +35,7 @@ class Chat extends Model
* Get user chat status
* @return int 0 if disconnected, 1 if connected
*/
public function get_user_status()
public function getUserStatus()
{
$status = UserManager::get_extra_user_data_by_field(
api_get_user_id(),
@ -57,7 +56,11 @@ class Chat extends Model
*/
public function setUserStatus($status)
{
UserManager::update_extra_field_value(api_get_user_id(), 'user_chat_status', $status);
UserManager::update_extra_field_value(
api_get_user_id(),
'user_chat_status',
$status
);
}
/**
@ -66,13 +69,11 @@ class Chat extends Model
*/
public function startSession()
{
$items = array();
if (isset($_SESSION['chatHistory'])) {
$items = $_SESSION['chatHistory'];
}
$items = Session::read('chatHistory');
$return = array(
'user_status' => $this->get_user_status(),
'user_status' => $this->getUserStatus(),
'me' => get_lang('Me'),
'user_id' => api_get_user_id(),
'items' => $items
);
echo json_encode($return);
@ -88,12 +89,11 @@ class Chat extends Model
$to_user_id = api_get_user_id();
$sql = "SELECT * FROM ".$this->table."
WHERE to_user = '".intval($to_user_id)."' AND ( recd = 0 )
WHERE to_user = '".intval($to_user_id)."' AND (recd = 0)
ORDER BY id ASC";
$result = Database::query($sql);
$chat_list = array();
while ($chat = Database::fetch_array($result, 'ASSOC')) {
$chat_list[$chat['from_user']]['items'][] = $chat;
}
@ -103,17 +103,17 @@ class Chat extends Model
$rows = $rows['items'];
$user_info = api_get_user_info($from_user_id, true);
//Cleaning tsChatBoxes
// Cleaning tsChatBoxes
unset($_SESSION['tsChatBoxes'][$from_user_id]);
foreach ($rows as $chat) {
$chat['message'] = Security::remove_XSS($chat['message']);
$item = array(
's' => '0',
'f' => $from_user_id,
'm' => $chat['message'],
'username' => $user_info['complete_name'],
'date' => api_strtotime($chat['sent'], 'UTC'),
'id' => $chat['id']
);
$items[$from_user_id]['items'][] = $item;
@ -136,7 +136,11 @@ class Chat extends Model
$message = sprintf(get_lang('SentAtX'), $time);
if ($now > 180) {
$item = array('s' => '2', 'f' => $user_id, 'm' => $message);
$item = array(
's' => '2',
'f' => $user_id,
'm' => $message
);
if (isset($_SESSION['chatHistory'][$user_id])) {
$_SESSION['chatHistory'][$user_id]['items'][] = $item;
@ -147,7 +151,8 @@ class Chat extends Model
}
}
$sql = "UPDATE ".$this->table." SET recd = 1
$sql = "UPDATE ".$this->table."
SET recd = 1
WHERE to_user = '".$to_user_id."' AND recd = 0";
Database::query($sql);
@ -204,10 +209,10 @@ class Chat extends Model
);
if ($user_friend_relation == USER_RELATION_TYPE_FRIEND) {
$now = api_get_utc_datetime();
$user_info = api_get_user_info($to_user_id, true);
$this->save_window($to_user_id);
$_SESSION['openChatBoxes'][$to_user_id] = api_get_utc_datetime();
$_SESSION['openChatBoxes'][$to_user_id] = $now;
if ($sanitize) {
$messagesan = self::sanitize($message);
@ -222,6 +227,7 @@ class Chat extends Model
"s" => "1",
"f" => $from_user_id,
"m" => $messagesan,
'date' => api_strtotime($now, 'UTC'),
"username" => get_lang('Me')
);
$_SESSION['chatHistory'][$to_user_id]['items'][] = $item;
@ -242,12 +248,12 @@ class Chat extends Model
}
if ($printResult) {
echo "1";
echo '1';
exit;
}
} else {
if ($printResult) {
echo "0";
echo '0';
exit;
}
}
@ -269,7 +275,7 @@ class Chat extends Model
* Filter chat messages to avoid XSS or other JS
* @param string $text Unfiltered message
*
* @return string Filterd mssage
* @return string Filtered mssage
*/
public function sanitize($text)
{
@ -283,7 +289,7 @@ class Chat extends Model
/**
* SET Disable Chat
* @param boolean status to disable chat
* @param boolean $status to disable chat
* @return void
*/
public static function setDisableChat($status = true)

@ -1,163 +1,174 @@
.chatboxmain {
position: fixed;
width: auto;
z-index: 9000;
bottom: 0px;
right: 20px;
display: block;
}
.chatboxheadmain {
color: #ffffff;
background-color: #000;
min-height: 34px;
padding: 0 10px;
}
#chatboxtitlemain {
font-weight: normal;
float: left;
font-size: 12px;
padding-top: 2px;
cursor:pointer;
}
.user_status_main {
width:18px;
display:inline;
float:left;
}
.chatbox {
position: fixed;
position:expression("absolute");
width: 225px;
display:none;
z-index: 9000;
}
.user_status {
width:8px;
display:inline-block;
margin-right: 5px;
}
.chatimage{
display: inline-block;
margin-right: 5px;
}
.chatboxtitle {
font-weight: normal;
display: inline-block;
font-size: 10px;
width: auto;
cursor:pointer;
overflow: hidden;
padding-left: 2px;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 10px;
}
.chatboxhead {
/* background-color: #222; */
padding: 5px;
color: #ffffff;
border-right:1px solid #222;
border-left:1px solid #222;
background-color: #222;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
background-image: -moz-linear-gradient(top, #333333, #222222);
background-image: -ms-linear-gradient(top, #333333, #222222);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
background-image: -webkit-linear-gradient(top, #333333, #222222);
background-image: -o-linear-gradient(top, #333333, #222222);
background-image: linear-gradient(top, #333333, #222222);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
}
.chatboxblink {
background-color: #FF921F;
border-right:1px solid #EF7A00;
border-left:1px solid #EF7A00;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#FF921F), to(#FF921F));
background-image: -moz-linear-gradient(top, #FF921F, #FFAC55);
background-image: -ms-linear-gradient(top, #FF921F, #FF921F);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FF921F), color-stop(100%, #FF921F));
background-image: -webkit-linear-gradient(top, #FF921F, #FF921F);
background-image: -o-linear-gradient(top, #FF921F, #FF921F);
background-image: linear-gradient(top, #FF921F, #FF921F);
}
.chatboxcontent {
font-family: arial,sans-serif;
font-size: 13px;
color: #333333;
height:200px;
width:225px;
overflow-y:auto;
overflow-x:auto;
padding:7px;
border-left:1px solid #cccccc;
border-right:1px solid #cccccc;
border-bottom:1px solid #eeeeee;
background-color: #ffffff;
line-height: 1.3em;
}
.chatboxinput {
padding: 5px;
background-color: #ffffff;
border-left:1px solid #cccccc;
border-right:1px solid #cccccc;
border-bottom:1px solid #cccccc;
}
.chatboxtextarea {
width: 206px;
height:44px;
padding:3px 0pt 3px 3px;
border: 1px solid #eeeeee;
margin: 1px;
overflow:hidden;
}
.chatboxtextareaselected {
border: 2px solid #f99d39;
margin:0;
}
.chatboxmessage {
margin-left:1em;
}
.chatboxinfo {
margin-left:-1em;
color:#666666;
}
.chatboxmessagefrom {
margin-left:-1em;
font-weight: bold;
}
.chatboxmessagecontent {
}
.chatboxoptions {
float: right;
}
.chatboxoptions a {
text-decoration: none;
color: white;
font-weight:bold;
font-family:Verdana,Arial,"Bitstream Vera Sans",sans-serif;
}
.chatboxoptions a:hover {
background-color: #aaa;
}
.chatboxmain {
position: fixed;
width: auto;
z-index: 9000;
bottom: 0px;
right: 20px;
display: block;
}
.chatboxheadmain {
color: #ffffff;
background-color: #000;
min-height: 34px;
padding: 0 10px;
}
#chatboxtitlemain {
font-weight: normal;
float: left;
font-size: 12px;
padding-top: 2px;
cursor:pointer;
}
.user_status_main {
width:18px;
display:inline;
float:left;
}
.chatbox {
position: fixed;
position:expression("absolute");
width: 320px;
display:none;
z-index: 9000;
}
.chatboxmessage_me {
background-color: #4080ff;
color: #fff;
width: 80%;
float:right !important;
border-radius: 12px;
}
.chatboxmessage {
background-color: #ebedf2;
color: #2a2f35;
margin-left:1em;
width: 80%;
float:left;
border-radius: 12px;
}
.chatboxmessagecontent {
}
.chatboxcontent {
font-family: arial,sans-serif;
font-size: 13px;
color: #333333;
height:200px;
overflow-y:auto;
overflow-x:auto;
padding:7px;
border-left:1px solid #cccccc;
border-right:1px solid #cccccc;
border-bottom:1px solid #eeeeee;
background-color: #ffffff;
line-height: 1.3em;
}
.user_status {
width:8px;
display:inline-block;
margin-right: 5px;
}
.chatimage {
display: inline-block;
margin-right: 5px;
}
.chatboxtitle {
font-weight: normal;
display: inline-block;
font-size: 10px;
width: auto;
cursor:pointer;
overflow: hidden;
padding-left: 2px;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 10px;
}
.chatboxhead {
/* background-color: #222; */
padding: 5px;
color: #ffffff;
border-right:1px solid #222;
border-left:1px solid #222;
background-color: #222;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
background-image: -moz-linear-gradient(top, #333333, #222222);
background-image: -ms-linear-gradient(top, #333333, #222222);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
background-image: -webkit-linear-gradient(top, #333333, #222222);
background-image: -o-linear-gradient(top, #333333, #222222);
background-image: linear-gradient(top, #333333, #222222);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
}
.chatboxblink {
background-color: #FF921F;
border-right:1px solid #EF7A00;
border-left:1px solid #EF7A00;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#FF921F), to(#FF921F));
background-image: -moz-linear-gradient(top, #FF921F, #FFAC55);
background-image: -ms-linear-gradient(top, #FF921F, #FF921F);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FF921F), color-stop(100%, #FF921F));
background-image: -webkit-linear-gradient(top, #FF921F, #FF921F);
background-image: -o-linear-gradient(top, #FF921F, #FF921F);
background-image: linear-gradient(top, #FF921F, #FF921F);
}
.chatboxinput {
padding: 5px;
background-color: #ffffff;
border-left:1px solid #cccccc;
border-right:1px solid #cccccc;
border-bottom:1px solid #cccccc;
}
.chatboxtextarea {
width: 300px;
height:44px;
padding:3px 0pt 3px 3px;
border: 1px solid #eeeeee;
margin: 1px;
overflow:hidden;
}
.chatboxtextareaselected {
border: 2px solid #f99d39;
margin:0;
}
.chatboxinfo {
margin-left:-1em;
color:#666666;
}
.chatboxmessagefrom {
margin-left:-1em;
font-weight: bold;
}
.chatboxoptions {
float: right;
}
.chatboxoptions a {
text-decoration: none;
color: white;
font-weight:bold;
font-family:Verdana,Arial,"Bitstream Vera Sans",sans-serif;
}
.chatboxoptions a:hover {
background-color: #aaa;
}

File diff suppressed because it is too large Load Diff

@ -70,24 +70,23 @@
currentFriend: 0,
call: false,
track: function () {
return $
.get(ChChat._ajaxUrl, {
action: 'track',
size: ChChat._historySize,
users_online: ChChat.usersOnline,
friend: ChChat.currentFriend
})
.done(function (response) {
if (response.data.history) {
ChChat._historySize = response.data.oldFileSize;
ChChat.setHistory(response.data.history);
}
return $.get(ChChat._ajaxUrl, {
action: 'track',
size: ChChat._historySize,
users_online: ChChat.usersOnline,
friend: ChChat.currentFriend
})
.done(function (response) {
if (response.data.history) {
ChChat._historySize = response.data.oldFileSize;
ChChat.setHistory(response.data.history);
}
if (response.data.userList) {
ChChat.usersOnline = response.data.usersOnline;
ChChat.setConnectedUsers(response.data.userList);
}
});
if (response.data.userList) {
ChChat.usersOnline = response.data.usersOnline;
ChChat.setConnectedUsers(response.data.userList);
}
});
},
setHistory: function (messageList) {
var chatHistoryContainer = ChChat.currentFriend ? ('#chat-history-' + ChChat.currentFriend) : '#chat-history';
@ -129,18 +128,17 @@
$('#chat-users').html(html);
},
onPreviewListener: function () {
$
.post(ChChat._ajaxUrl, {
action: 'preview',
'message': $('textarea#chat-writer').val()
})
.done(function (response) {
if (!response.status) {
return;
}
$.post(ChChat._ajaxUrl, {
action: 'preview',
'message': $('textarea#chat-writer').val()
})
.done(function (response) {
if (!response.status) {
return;
}
$('#html-preview').html(response.data.message);
});
$('#html-preview').html(response.data.message);
});
},
onSendMessageListener: function (e) {
e.preventDefault();
@ -152,42 +150,38 @@
var self = this;
self.disabled = true;
$
.post(ChChat._ajaxUrl, {
action: 'write',
message: $('textarea#chat-writer').val(),
friend: ChChat.currentFriend
})
.done(function (response) {
self.disabled = false;
if (!response.status) {
return;
}
$.post(ChChat._ajaxUrl, {
action: 'write',
message: $('textarea#chat-writer').val(),
friend: ChChat.currentFriend
})
.done(function (response) {
self.disabled = false;
$('textarea#chat-writer').val('');
$(".emoji-wysiwyg-editor").html('');
});
if (!response.status) {
return;
}
$('textarea#chat-writer').val('');
$(".emoji-wysiwyg-editor").html('');
});
},
onResetListener: function (e) {
if (!confirm("{{ 'ConfirmReset'|get_lang }}")) {
e.preventDefault();
return;
}
$.get(ChChat._ajaxUrl, {
action: 'reset',
friend: ChChat.currentFriend
})
.done(function (response) {
if (!response.status) {
return;
}
$
.get(ChChat._ajaxUrl, {
action: 'reset',
friend: ChChat.currentFriend
})
.done(function (response) {
if (!response.status) {
return;
}
ChChat.setHistory(response.data);
});
ChChat.setHistory(response.data);
});
},
init: function () {
ChChat.track().done(function () {
@ -311,7 +305,6 @@
$('#chat-tabs ul.nav-tabs').on('shown.bs.tab', 'li a', function (e) {
var jSelf = $(this);
var userId = parseInt(jSelf.parent().data('user')) || 0;
if (!userId) {

Loading…
Cancel
Save