mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-03-04 11:31:23 +01:00
@@ -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());
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user