2015-04-22 07:50:11 +09:00
|
|
|
////////////////////////////////////
|
|
|
|
// Publications and Subscriptions //
|
|
|
|
////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Users pub/sub configs and methods
|
|
|
|
* @namespace Users.pubsub
|
|
|
|
*/
|
|
|
|
Users.pubsub = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Default user object fields in publication
|
|
|
|
* @type {Object}
|
|
|
|
*/
|
2015-06-05 10:55:52 +09:00
|
|
|
|
|
|
|
var publicFields = Users.simpleSchema().getPublicFields();
|
|
|
|
|
|
|
|
// add public fields as specified in schema
|
|
|
|
Users.pubsub.publicProperties = _.object(publicFields, _.map(publicFields, function () {return true}));
|
|
|
|
|
|
|
|
// add a few more fields
|
|
|
|
Users.pubsub.publicProperties = _.extend(Users.pubsub.publicProperties, {
|
2015-04-22 07:50:11 +09:00
|
|
|
'services.twitter.profile_image_url': true,
|
|
|
|
'services.twitter.profile_image_url_https': true,
|
|
|
|
'services.facebook.id': true,
|
|
|
|
'services.twitter.screenName': true,
|
2015-06-05 10:55:52 +09:00
|
|
|
});
|
2015-04-22 07:50:11 +09:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Options for your own user account (for security reasons, block certain properties)
|
|
|
|
* @type {Object}
|
|
|
|
*/
|
2015-04-27 09:55:29 +09:00
|
|
|
Users.pubsub.hiddenProperties = {
|
2015-04-22 07:50:11 +09:00
|
|
|
'services.password.bcrypt': false
|
2015-05-01 18:22:00 +02:00
|
|
|
};
|
2015-04-22 07:50:11 +09:00
|
|
|
|
|
|
|
/**
|
2015-05-12 11:18:46 +09:00
|
|
|
* Minimum required properties to display avatars and display names
|
2015-04-22 07:50:11 +09:00
|
|
|
* @type {Object}
|
|
|
|
*/
|
2015-04-25 13:20:51 +09:00
|
|
|
Users.pubsub.avatarProperties = {
|
2015-04-22 07:50:11 +09:00
|
|
|
_id: true,
|
2015-05-06 12:16:50 +09:00
|
|
|
'telescope.emailHash': true,
|
2015-04-28 15:54:19 +09:00
|
|
|
'telescope.slug': true,
|
2015-05-12 11:18:46 +09:00
|
|
|
'telescope.displayName': true,
|
2015-04-22 07:50:11 +09:00
|
|
|
username: true,
|
|
|
|
'profile.username': true,
|
|
|
|
'profile.github': true,
|
|
|
|
'profile.twitter': true,
|
|
|
|
'services.twitter.profile_image_url': true,
|
|
|
|
'services.twitter.profile_image_url_https': true,
|
|
|
|
'services.facebook.id': true,
|
|
|
|
'services.twitter.screenName': true,
|
|
|
|
'services.github.screenName': true, // Github is not really used, but there are some mentions to it in the code
|
2015-05-01 18:22:00 +02:00
|
|
|
};
|
2015-04-22 07:50:11 +09:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Build Users subscription with filter, sort, and limit args.
|
|
|
|
* @param {String} filterBy
|
|
|
|
* @param {String} sortBy
|
|
|
|
* @param {Number} limit
|
|
|
|
*/
|
|
|
|
Users.pubsub.getSubParams = function(filterBy, sortBy, limit) {
|
|
|
|
var find = {},
|
|
|
|
sort = {createdAt: -1};
|
|
|
|
|
|
|
|
switch(filterBy){
|
|
|
|
case 'invited':
|
|
|
|
// consider admins as invited
|
|
|
|
find = { $or: [{ isInvited: true }, { isAdmin: true }]};
|
|
|
|
break;
|
|
|
|
case 'uninvited':
|
|
|
|
find = { $and: [{ isInvited: false }, { isAdmin: false }]};
|
|
|
|
break;
|
|
|
|
case 'admin':
|
|
|
|
find = { isAdmin: true };
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(sortBy){
|
|
|
|
case 'username':
|
|
|
|
sort = { username: 1 };
|
|
|
|
break;
|
|
|
|
case 'karma':
|
|
|
|
sort = { karma: -1 };
|
|
|
|
break;
|
|
|
|
case 'postCount':
|
|
|
|
sort = { postCount: -1 };
|
|
|
|
break;
|
|
|
|
case 'commentCount':
|
|
|
|
sort = { commentCount: -1 };
|
2015-05-01 18:22:00 +02:00
|
|
|
break;
|
2015-04-22 07:50:11 +09:00
|
|
|
case 'invitedCount':
|
|
|
|
sort = { invitedCount: -1 };
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
find: find,
|
|
|
|
options: { sort: sort, limit: limit }
|
|
|
|
};
|
|
|
|
};
|