From f20926f93dd3caa0fd4e8e440721f4c473b63f39 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 23 May 2014 09:47:33 -0400 Subject: [PATCH] finished up group list and group details pages - closed #1563 --- public/language/en_GB/groups.json | 4 +++- src/controllers/groups.js | 17 ++++++++++++----- src/groups.js | 18 ++++++++++++++++++ src/routes/debug.js | 7 +++---- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json index 0f8487c6dc..954c9780e5 100644 --- a/public/language/en_GB/groups.json +++ b/public/language/en_GB/groups.json @@ -2,5 +2,7 @@ "view_group": "View Group", "details.title": "Group Details", - "details.members": "Member List" + "details.members": "Member List", + "details.has_no_posts": "This group's members have not made any posts.", + "details.latest_posts": "Latest Posts" } \ No newline at end of file diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 28de099ea2..8a27e10041 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -1,6 +1,7 @@ "use strict"; var groups = require('../groups'), + async = require('async'), groupsController = {}; @@ -9,7 +10,6 @@ groupsController.list = function(req, res) { truncateUserList: true, expand: true }, function(err, groups) { - console.log(groups); res.render('groups/list', { groups: groups }); @@ -17,11 +17,18 @@ groupsController.list = function(req, res) { }; groupsController.details = function(req, res) { - groups.get(req.params.name, { - expand: true - }, function(err, groupObj) { + async.parallel({ + group: function(next) { + groups.get(req.params.name, { + expand: true + }, next); + }, + posts: function(next) { + groups.getLatestMemberPosts(req.params.name, 10, next); + } + }, function(err, results) { if (!err) { - res.render('groups/details', groupObj); + res.render('groups/details', results); } else { res.redirect('404'); } diff --git a/src/groups.js b/src/groups.js index 102d818c3b..1c528a6855 100644 --- a/src/groups.js +++ b/src/groups.js @@ -6,6 +6,7 @@ user = require('./user'), meta = require('./meta'), db = require('./database'), + posts = require('./posts'), utils = require('../public/src/utils'), ephemeralGroups = ['guests'], @@ -304,4 +305,21 @@ }, callback); }); }; + + Groups.getLatestMemberPosts = function(groupName, max, callback) { + Groups.get(groupName, {}, function(err, groupObj) { + if (err || parseInt(groupObj.memberCount, 10) === 0) { + return callback(null, []); + } + + var keys = groupObj.members.map(function(uid) { + return 'uid:' + uid + ':posts'; + }); + db.getSortedSetRevUnion(keys, 0, max-1, function(err, pids) { + posts.getPostSummaryByPids(pids, false, function(err, posts) { + callback(null, posts); + }) + }) + }); + } }(module.exports)); diff --git a/src/routes/debug.js b/src/routes/debug.js index ed988db2ee..1484f1483e 100644 --- a/src/routes/debug.js +++ b/src/routes/debug.js @@ -54,10 +54,9 @@ module.exports = function(app, middleware, controllers) { }); app.get('/test', function(req, res) { - var db = require('../database'); - db.getSortedSetUnion(['uid:1:posts', 'uid:3:posts'], function(err, pids) { - console.log(err); - res.json(pids); + var a = require('../groups'); + a.getLatestMemberPosts('mcg', 5, function() { + res.json(arguments); }); }); });