From 202edfa47ecbe16b8ffe3f5f7b891bae6d1fc765 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 20 Sep 2016 14:26:26 +0300 Subject: [PATCH] chat history access --- public/src/client/chats.js | 2 +- public/src/modules/chat.js | 4 +- src/controllers/accounts/chats.js | 113 ++++++++++++++++-------------- src/routes/accounts.js | 2 +- 4 files changed, 65 insertions(+), 56 deletions(-) diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 619dbc9ec0..e2019c6c5a 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -265,7 +265,7 @@ define('forum/chats', [ }; Chats.switchChat = function(roomid) { - ajaxify.go('chats/' + roomid); + ajaxify.go('user/' + ajaxify.data.userslug + '/chats/' + roomid); }; Chats.loadChatSince = function(roomId, chatContentEl, since) { diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 8e0b435434..5178d2d03c 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -31,7 +31,7 @@ define('chat', [ if (!ajaxify.currentPage.match(/^chats\//)) { app.openChat(roomId); } else { - ajaxify.go('chats/' + roomId); + ajaxify.go('user/' + app.user.userslug + '/chats/' + roomId); } }); @@ -214,7 +214,7 @@ define('chat', [ components.get('chat/input').val(text); }); - ajaxify.go('chats/' + chatModal.attr('roomId')); + ajaxify.go('user/' + app.user.userslug + '/chats/' + chatModal.attr('roomId')); module.close(chatModal); } diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js index 4af94c5521..b638cb0006 100644 --- a/src/controllers/accounts/chats.js +++ b/src/controllers/accounts/chats.js @@ -4,6 +4,7 @@ var async = require('async'); var messaging = require('../../messaging'); var meta = require('../../meta'); +var user = require('../../user'); var helpers = require('../helpers'); @@ -13,65 +14,73 @@ chatsController.get = function(req, res, callback) { if (parseInt(meta.config.disableChat, 10) === 1) { return callback(); } - - messaging.getRecentChats(req.uid, 0, 19, function(err, recentChats) { + var uid; + var recentChats; + async.waterfall([ + function(next) { + user.getUidByUserslug(req.params.userslug, next); + }, + function(_uid, next) { + uid = _uid; + if (!uid) { + return callback(); + } + messaging.getRecentChats(uid, 0, 19, next); + }, + function(_recentChats, next) { + recentChats = _recentChats; + if (!req.params.roomid) { + return res.render('chats', { + rooms: recentChats.rooms, + userslug: req.params.userslug, + nextStart: recentChats.nextStart, + allowed: true, + title: '[[pages:chats]]', + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[pages:chats]]'}]) + }); + } + messaging.isUserInRoom(req.uid, req.params.roomid, next); + }, + function(inRoom, next) { + if (!inRoom && parseInt(req.uid, 10) === parseInt(uid, 10)) { + return callback(); + } + async.parallel({ + users: async.apply(messaging.getUsersInRoom, req.params.roomid, 0, -1), + messages: async.apply(messaging.getMessages, { + uid: uid, + roomId: req.params.roomid, + since: 'recent', + isNew: false + }), + room: async.apply(messaging.getRoomData, req.params.roomid) + }, next); + } + ], function(err, data) { if (err) { return callback(err); } + var room = data.room; + room.messages = data.messages; - if (!req.params.roomid) { - return res.render('chats', { - rooms: recentChats.rooms, - nextStart: recentChats.nextStart, - allowed: true, - title: '[[pages:chats]]', - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[pages:chats]]'}]) - }); - } - - async.waterfall([ - function (next) { - messaging.isUserInRoom(req.uid, req.params.roomid, next); - }, - function (inRoom, next) { - if (!inRoom) { - return callback(); - } - - async.parallel({ - users: async.apply(messaging.getUsersInRoom, req.params.roomid, 0, -1), - messages: async.apply(messaging.getMessages, { - uid: req.uid, - roomId: req.params.roomid, - since: 'recent', - isNew: false - }), - room: async.apply(messaging.getRoomData, req.params.roomid) - }, next); - } - ], function(err, data) { - if (err) { - return callback(err); - } - var room = data.room; - room.messages = data.messages; - - room.isOwner = parseInt(room.owner, 10) === parseInt(req.uid, 10); - room.users = data.users.filter(function(user) { - return user && parseInt(user.uid, 10) && parseInt(user.uid, 10) !== req.uid; - }); + room.isOwner = parseInt(room.owner, 10) === parseInt(req.uid, 10); + room.users = data.users.filter(function(user) { + return user && parseInt(user.uid, 10) && parseInt(user.uid, 10) !== req.uid; + }); - room.rooms = recentChats.rooms; - room.nextStart = recentChats.nextStart; - room.title = room.roomName; - room.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[pages:chats]]', url: '/chats'}, {text: room.roomName}]); - room.maximumUsersInChatRoom = parseInt(meta.config.maximumUsersInChatRoom, 10) || 0; - room.maximumChatMessageLength = parseInt(meta.config.maximumChatMessageLength, 10) || 1000; - room.showUserInput = !room.maximumUsersInChatRoom || room.maximumUsersInChatRoom > 2; + room.rooms = recentChats.rooms; + room.userslug = req.params.userslug; + room.nextStart = recentChats.nextStart; + room.title = room.roomName; + room.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[pages:chats]]', url: '/chats'}, {text: room.roomName}]); + room.maximumUsersInChatRoom = parseInt(meta.config.maximumUsersInChatRoom, 10) || 0; + room.maximumChatMessageLength = parseInt(meta.config.maximumChatMessageLength, 10) || 1000; + room.showUserInput = !room.maximumUsersInChatRoom || room.maximumUsersInChatRoom > 2; - res.render('chats', room); - }); + res.render('chats', room); }); }; + + module.exports = chatsController; \ No newline at end of file diff --git a/src/routes/accounts.js b/src/routes/accounts.js index 7b6ead07cf..d74316f816 100644 --- a/src/routes/accounts.js +++ b/src/routes/accounts.js @@ -31,5 +31,5 @@ module.exports = function (app, middleware, controllers) { app.delete('/api/user/:userslug/session/:uuid', [middleware.requireUser], controllers.accounts.session.revoke); setupPageRoute(app, '/notifications', middleware, [middleware.authenticate], controllers.accounts.notifications.get); - setupPageRoute(app, '/chats/:roomid?', middleware, [middleware.authenticate], controllers.accounts.chats.get); + setupPageRoute(app, '/user/:userslug/chats/:roomid?', middleware, accountMiddlewares, controllers.accounts.chats.get); };