closes #2035, closes #2036

v1.18.x
barisusakli 11 years ago
parent ff46d1211d
commit 171f02101d

@ -375,12 +375,6 @@ var socket,
});
};
function updateOnlineStatus(uid) {
socket.emit('user.isOnline', uid, function(err, data) {
$('#logged-in-menu #user_label #user-profile-link>i').attr('class', 'fa fa-circle status ' + data.status);
});
}
function exposeConfigToTemplates() {
$(document).ready(function() {
templates.setGlobal('relative_path', RELATIVE_PATH);
@ -492,11 +486,12 @@ var socket,
function handleStatusChange() {
$('#user-control-list .user-status').off('click').on('click', function(e) {
socket.emit('user.setStatus', $(this).attr('data-status'), function(err, data) {
var status = $(this).attr('data-status');
socket.emit('user.setStatus', status, function(err, data) {
if(err) {
return app.alertError(err.message);
}
updateOnlineStatus(data.uid);
$('#logged-in-menu #user_label #user-profile-link>i').attr('class', 'fa fa-circle status ' + status);
});
e.preventDefault();
});

@ -35,8 +35,6 @@ define('forum/account/profile', ['forum/account/header'], function(header) {
socket.on('user.isOnline', handleUserOnline);
socket.emit('user.isOnline', theirid, handleUserOnline);
if (yourid !== theirid) {
socket.emit('user.increaseViewCount', theirid);
}

@ -362,7 +362,6 @@ define('forum/topic', dependencies, function(pagination, infinitescroll, threadT
}
function processPage(element) {
browsing.populateOnlineUsers();
app.createUserTooltips();
app.replaceSelfLinks(element.find('a'));
utils.addCommasToNumbers(element.find('.formatted-number'));

@ -80,34 +80,11 @@ define('forum/topic/browsing', function() {
};
Browsing.onUserOnline = function(err, data) {
updateOnlineIcon($('.username-field[data-username="' + data.username + '"'), data);
updateOnlineIcon($('.username-field[data-username="' + data.username + '"]'), data);
updateBrowsingUsers(data);
};
Browsing.populateOnlineUsers = function () {
var uids = [];
$('.post-row').each(function () {
var uid = $(this).attr('data-uid');
if(uids.indexOf(uid) === -1) {
uids.push(uid);
}
});
socket.emit('user.getOnlineUsers', uids, function (err, users) {
$('.username-field').each(function () {
var el = $(this),
uid = el.parents('li').attr('data-uid');
if (uid && users[uid]) {
updateOnlineIcon(el, users[uid]);
}
});
});
};
function updateOnlineIcon(el, userData) {
translator.translate('[[global:' + userData.status + ']]', function(translated) {
el.siblings('i')

@ -7,7 +7,6 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar,
var newMessage = false;
module.prepareDOM = function() {
// Chats Dropdown
var chatsToggleEl = $('#chat_dropdown'),
chatsListEl = $('#chat-list');
@ -74,7 +73,6 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar,
if (modal.is(":visible")) {
module.bringModalToTop(modal);
checkOnlineStatus(modal);
taskbar.updateActive(modal.attr('UUID'));
Chats.scrollToBottom(modal.find('#chat-content'));
} else {
@ -114,6 +112,10 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar,
var modal = module.getModal(withUid);
modal.find('.user-typing').addClass('hide');
});
socket.on('user.isOnline', function(err, data) {
updateStatus(data.status);
});
};
module.bringModalToTop = function(chatModal) {
@ -138,20 +140,16 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar,
function checkStatus(chatModal) {
socket.emit('user.isOnline', chatModal.attr('touid'), function(err, data) {
translator.translate('[[global:' + data.status + ']]', function(translated) {
$('#chat-user-status').attr('class', 'fa fa-circle status ' + data.status)
.attr('title', translated)
.attr('data-original-title', translated);
});
updateStatus(data.status);
});
}
function checkOnlineStatus(chatModal) {
if(parseInt(chatModal.attr('intervalId'), 10) === 0) {
chatModal.attr('intervalId', setInterval(function() {
checkStatus(chatModal);
}, 1000));
}
function updateStatus(status) {
translator.translate('[[global:' + status + ']]', function(translated) {
$('#chat-user-status').attr('class', 'fa fa-circle status ' + status)
.attr('title', translated)
.attr('data-original-title', translated);
});
}
module.createModal = function(username, touid, callback) {
@ -221,7 +219,7 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar,
addSendHandler(chatModal);
getChatMessages(chatModal, function() {
checkOnlineStatus(chatModal);
checkStatus(chatModal);
});
chatModal.find('.user-typing .text').translateText('[[modules:chat.user_typing, ' + username + ']]');
@ -259,7 +257,7 @@ define('chat', ['taskbar', 'string', 'sounds', 'forum/chats'], function(taskbar,
module.load = function(uuid) {
var chatModal = $('div[UUID="'+uuid+'"]');
chatModal.removeClass('hide');
checkOnlineStatus(chatModal);
checkStatus(chatModal);
taskbar.updateActive(uuid);
Chats.scrollToBottom(chatModal.find('#chat-content'));
module.center(chatModal);

@ -18,7 +18,8 @@ var fs = require('fs'),
plugins = require('../plugins'),
languages = require('../languages'),
image = require('../image'),
file = require('../file');
file = require('../file'),
websockets = require('../socket.io');
function userNotFound(res) {
if (res.locals.isAPI) {
@ -116,6 +117,7 @@ function getUserDataByUserSlug(userslug, callerUID, callback) {
userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1;
userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10);
userData.profile_links = results.profile_links;
userData.status = !websockets.isUserOnline(userData.uid) ? 'offline' : userData.status;
userData.followingCount = results.followStats.followingCount;
userData.followerCount = results.followStats.followerCount;

@ -21,7 +21,8 @@ var async = require('async'),
categories = require('./categories'),
plugins = require('./plugins'),
meta = require('./meta'),
emitter = require('./emitter');
emitter = require('./emitter'),
websockets = require('./socket.io');
(function(Posts) {
require('./posts/delete')(Posts);
@ -227,7 +228,10 @@ var async = require('async'),
groups.getUserGroups(uids, next);
},
userData: function(next) {
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned'], next);
user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status'], next);
},
online: function(next) {
websockets.isUsersOnline(uids, next);
}
}, function(err, results) {
if (err) {
@ -237,6 +241,7 @@ var async = require('async'),
var userData = results.userData;
for(var i=0; i<userData.length; ++i) {
userData[i].groups = results.groups[i];
userData[i].status = !results.online[i] ? 'offline' : userData[i].status;
}
async.map(userData, function(userData, next) {

@ -282,6 +282,22 @@ function isUserOnline(uid) {
return Sockets.getUserSockets(uid).length > 0;
}
Sockets.isUsersOnline = function(uids, callback) {
var sockets = io.sockets.clients();
if(!Array.isArray(sockets) || !sockets.length) {
return callback(null, []);
}
sockets = sockets.map(function(s) {
return s.uid;
});
callback(null, uids.map(function(uid) {
return sockets.indexOf(parseInt(uid, 10)) !== -1;
}));
};
Sockets.updateRoomBrowsingText = updateRoomBrowsingText;
function updateRoomBrowsingText(roomName) {

@ -39,7 +39,8 @@ SocketPosts.reply = function(socket, data, callback) {
websockets.server.sockets.emit('event:new_post', {
posts: [postData],
privileges: privileges,
'reputation:disabled': parseInt(meta.config['reputation:disabled'], 10) === 1
'reputation:disabled': parseInt(meta.config['reputation:disabled'], 10) === 1,
'downvote:disabled': parseInt(meta.config['downvote:disabled'], 10) === 1,
});
module.parent.exports.emitTopicPostStats();

@ -264,26 +264,6 @@ SocketUser.setTopicSort = function(socket, sort, callback) {
}
};
SocketUser.getOnlineUsers = function(socket, uids, callback) {
var returnData = {};
if (!uids) {
return callback(new Error('[[error:invalid-data]]'));
}
user.isOnline(uids, function(err, userData) {
if (err) {
return callback(err);
}
userData.forEach(function(user) {
if (user) {
returnData[user.uid] = user;
}
});
callback(null, returnData);
});
};
SocketUser.getOnlineAnonCount = function(socket, data, callback) {
callback(null, module.parent.exports.getOnlineAnonCount());
};

Loading…
Cancel
Save