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() { function exposeConfigToTemplates() {
$(document).ready(function() { $(document).ready(function() {
templates.setGlobal('relative_path', RELATIVE_PATH); templates.setGlobal('relative_path', RELATIVE_PATH);
@ -492,11 +486,12 @@ var socket,
function handleStatusChange() { function handleStatusChange() {
$('#user-control-list .user-status').off('click').on('click', function(e) { $('#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) { if(err) {
return app.alertError(err.message); 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(); e.preventDefault();
}); });

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

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

@ -80,34 +80,11 @@ define('forum/topic/browsing', function() {
}; };
Browsing.onUserOnline = function(err, data) { Browsing.onUserOnline = function(err, data) {
updateOnlineIcon($('.username-field[data-username="' + data.username + '"'), data); updateOnlineIcon($('.username-field[data-username="' + data.username + '"]'), data);
updateBrowsingUsers(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) { function updateOnlineIcon(el, userData) {
translator.translate('[[global:' + userData.status + ']]', function(translated) { translator.translate('[[global:' + userData.status + ']]', function(translated) {
el.siblings('i') el.siblings('i')

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

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

@ -21,7 +21,8 @@ var async = require('async'),
categories = require('./categories'), categories = require('./categories'),
plugins = require('./plugins'), plugins = require('./plugins'),
meta = require('./meta'), meta = require('./meta'),
emitter = require('./emitter'); emitter = require('./emitter'),
websockets = require('./socket.io');
(function(Posts) { (function(Posts) {
require('./posts/delete')(Posts); require('./posts/delete')(Posts);
@ -227,7 +228,10 @@ var async = require('async'),
groups.getUserGroups(uids, next); groups.getUserGroups(uids, next);
}, },
userData: function(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) { }, function(err, results) {
if (err) { if (err) {
@ -237,6 +241,7 @@ var async = require('async'),
var userData = results.userData; var userData = results.userData;
for(var i=0; i<userData.length; ++i) { for(var i=0; i<userData.length; ++i) {
userData[i].groups = results.groups[i]; userData[i].groups = results.groups[i];
userData[i].status = !results.online[i] ? 'offline' : userData[i].status;
} }
async.map(userData, function(userData, next) { async.map(userData, function(userData, next) {

@ -282,6 +282,22 @@ function isUserOnline(uid) {
return Sockets.getUserSockets(uid).length > 0; 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; Sockets.updateRoomBrowsingText = updateRoomBrowsingText;
function updateRoomBrowsingText(roomName) { function updateRoomBrowsingText(roomName) {

@ -39,7 +39,8 @@ SocketPosts.reply = function(socket, data, callback) {
websockets.server.sockets.emit('event:new_post', { websockets.server.sockets.emit('event:new_post', {
posts: [postData], posts: [postData],
privileges: privileges, 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(); 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) { SocketUser.getOnlineAnonCount = function(socket, data, callback) {
callback(null, module.parent.exports.getOnlineAnonCount()); callback(null, module.parent.exports.getOnlineAnonCount());
}; };

Loading…
Cancel
Save