diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl
index 29e35cd910..9f4e87c43d 100644
--- a/public/templates/topic.tpl
+++ b/public/templates/topic.tpl
@@ -76,6 +76,9 @@
+
+
+
diff --git a/src/groups.js b/src/groups.js
index 7762b94401..3e75be8579 100644
--- a/src/groups.js
+++ b/src/groups.js
@@ -1,130 +1,138 @@
-(function () {
+(function(Groups) {
"use strict";
var async = require('async'),
User = require('./user'),
- RDB = RDB || require('./redis'),
- Groups = {
- list: function (options, callback) {
- RDB.hvals('group:gid', function (err, gids) {
- if (gids.length > 0) {
- async.map(gids, function (gid, next) {
- Groups.get(gid, {
- expand: options.expand
- }, next);
- }, function (err, groups) {
- callback(err, groups.filter(function (group) {
- if (group.deleted === '1') {
- return false;
- } else {
- return true;
- }
- }));
- });
- } else {
- callback(null, []);
- }
- });
- },
- get: function (gid, options, callback) {
- async.parallel({
- base: function (next) {
- RDB.hgetall('gid:' + gid, next);
- },
- users: function (next) {
- RDB.smembers('gid:' + gid + ':members', function (err, uids) {
- if (options.expand) {
- if (err) {
- return next(err);
- }
+ RDB = RDB || require('./redis');
- async.map(uids, function (uid, next) {
- User.getUserData(uid, next);
- }, function (err, users) {
- next(err, users);
- });
- } else {
- next(err, uids);
- }
- });
- }
- }, function (err, results) {
- if (err) {
- return callback(err);
- }
-
- results.base.count = results.users.length;
- results.base.members = results.users;
-
- results.base.deletable = (results.base.gid !== '1');
-
- callback(err, results.base);
+ Groups.list = function(options, callback) {
+ RDB.hvals('group:gid', function (err, gids) {
+ if (gids.length > 0) {
+ async.map(gids, function (gid, next) {
+ Groups.get(gid, {
+ expand: options.expand
+ }, next);
+ }, function (err, groups) {
+ callback(err, groups.filter(function (group) {
+ if (group.deleted === '1') {
+ return false;
+ } else {
+ return true;
+ }
+ }));
});
- },
- getGidFromName: function (name, callback) {
- RDB.hget('group:gid', name, callback);
- },
- isMember: function (uid, gid, callback) {
- RDB.sismember('gid:' + gid + ':members', uid, callback);
- },
- isMemberByGroupName: function(uid, groupName, callback) {
- this.getGidFromName(groupName, function(err, gid) {
- if (err || !gid) {
- callback(null, false);
- } else {
- Groups.isMember(uid, gid, callback);
- }
- });
- },
- exists: function (name, callback) {
- RDB.hexists('group:gid', name, callback);
- },
- create: function (name, description, callback) {
- if (name.length === 0) {
- return callback(new Error('name-too-short'));
- }
-
- Groups.exists(name, function (err, exists) {
- if (!exists) {
- RDB.incr('next_gid', function (err, gid) {
- RDB.multi()
- .hset('group:gid', name, gid)
- .hmset('gid:' + gid, {
- gid: gid,
- name: name,
- description: description,
- deleted: '0'
- })
- .exec(function (err) {
- Groups.get(gid, {}, callback);
- });
- });
- } else {
- callback(new Error('group-exists'));
- }
- });
- },
- update: function (gid, values, callback) {
- RDB.exists('gid:' + gid, function (err, exists) {
- if (!err && exists) {
- RDB.hmset('gid:' + gid, values, callback);
- } else {
- callback(new Error('gid-not-found'));
- }
- });
- },
- destroy: function (gid, callback) {
- if (gid !== 1) {
- RDB.hset('gid:' + gid, 'deleted', '1', callback);
- }
- },
- join: function (gid, uid, callback) {
- RDB.sadd('gid:' + gid + ':members', uid, callback);
- },
- leave: function (gid, uid, callback) {
- RDB.srem('gid:' + gid + ':members', uid, callback);
+ } else {
+ callback(null, []);
}
- };
+ });
+ };
- module.exports = Groups;
-}());
\ No newline at end of file
+ Groups.get = function(gid, options, callback) {
+ async.parallel({
+ base: function (next) {
+ RDB.hgetall('gid:' + gid, next);
+ },
+ users: function (next) {
+ RDB.smembers('gid:' + gid + ':members', function (err, uids) {
+ if (options.expand) {
+ if (err) {
+ return next(err);
+ }
+
+ async.map(uids, function (uid, next) {
+ User.getUserData(uid, next);
+ }, function (err, users) {
+ next(err, users);
+ });
+ } else {
+ next(err, uids);
+ }
+ });
+ }
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+
+ results.base.count = results.users.length;
+ results.base.members = results.users;
+
+ results.base.deletable = (results.base.gid !== '1');
+
+ callback(err, results.base);
+ });
+ };
+
+ Groups.getGidFromName = function(name, callback) {
+ RDB.hget('group:gid', name, callback);
+ };
+
+ Groups.isMember = function(uid, gid, callback) {
+ RDB.sismember('gid:' + gid + ':members', uid, callback);
+ };
+
+ Groups.isMemberByGroupName = function(uid, groupName, callback)
+ this.getGidFromName(groupName, function(err, gid
+ if (err || !gid) {
+ callback(null, false);
+ } else {
+ Groups.isMember(uid, gid, callba
+ }
+ });
+ };
+
+ Groups.exists = function(name, callback) {
+ RDB.hexists('group:gid', name, callback);
+ };
+
+ Groups.create = function(name, description, callback) {
+ if (name.length === 0) {
+ return callback(new Error('name-too-short'));
+ }
+
+ Groups.exists(name, function (err, exists) {
+ if (!exists) {
+ RDB.incr('next_gid', function (err, gid) {
+ RDB.multi()
+ .hset('group:gid', name, gid)
+ .hmset('gid:' + gid, {
+ gid: gid,
+ name: name,
+ description: description,
+ deleted: '0'
+ })
+ .exec(function (err) {
+ Groups.get(gid, {}, callback);
+ });
+ });
+ } else {
+ callback(new Error('group-exists'));
+ }
+ });
+ };
+
+ Groups.update = function(gid, values, callback) {
+ RDB.exists('gid:' + gid, function (err, exists) {
+ if (!err && exists) {
+ RDB.hmset('gid:' + gid, values, callback);
+ } else {
+ callback(new Error('gid-not-found'));
+ }
+ });
+ };
+
+ Groups.destroy = function(gid, callback) {
+ if (gid !== 1) {
+ RDB.hset('gid:' + gid, 'deleted', '1', callback);
+ }
+ };
+
+ Groups.join = function(gid, uid, callback) {
+ RDB.sadd('gid:' + gid + ':members', uid, callback);
+ };
+
+ Groups.leave = function(gid, uid, callback) {
+ RDB.srem('gid:' + gid + ':members', uid, callback);
+ };
+
+}(module.exports));