2012-10-05 13:59:40 +09:00
|
|
|
isAdminById=function(userId){
|
2012-10-08 10:44:13 +09:00
|
|
|
var user = Meteor.users.findOne(userId);
|
2013-10-09 22:16:47 +09:00
|
|
|
return !!(user && isAdmin(user));
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-05 13:59:40 +09:00
|
|
|
isAdmin=function(user){
|
2013-10-24 14:34:50 +09:00
|
|
|
user = (typeof user === 'undefined') ? Meteor.user() : user;
|
2013-10-25 10:37:39 +09:00
|
|
|
return !!user && !!user.isAdmin;
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2014-10-03 16:21:06 -06:00
|
|
|
updateAdmin = function(userId, admin) {
|
|
|
|
Meteor.users.update(userId, {$set: {isAdmin: admin}});
|
|
|
|
};
|
2013-10-23 19:43:42 +09:00
|
|
|
isInvited=function(user){
|
|
|
|
if(!user || typeof user === 'undefined')
|
|
|
|
return false;
|
|
|
|
return isAdmin(user) || !!user.isInvited;
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2013-01-19 22:42:59 +09:00
|
|
|
adminUsers = function(){
|
|
|
|
return Meteor.users.find({isAdmin : true}).fetch();
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2014-12-06 18:19:54 +09:00
|
|
|
|
2014-10-06 09:49:50 -06:00
|
|
|
adminMongoQuery = {isAdmin: true};
|
|
|
|
notAdminMongoQuery = {isAdmin: false};
|
2014-12-06 18:19:54 +09:00
|
|
|
|
2013-10-24 14:24:03 +09:00
|
|
|
getUserName = function(user){
|
2014-08-30 10:04:56 +09:00
|
|
|
try{
|
|
|
|
if (user.username)
|
|
|
|
return user.username;
|
|
|
|
if (user && user.services && user.services.twitter && user.services.twitter.screenName)
|
|
|
|
return user.services.twitter.screenName
|
|
|
|
}
|
|
|
|
catch (error){
|
2014-09-16 15:18:27 -04:00
|
|
|
console.log(error);
|
2014-08-30 10:04:56 +09:00
|
|
|
return null;
|
|
|
|
}
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-01 14:52:32 +09:00
|
|
|
getDisplayName = function(user){
|
2014-08-12 17:47:11 +09:00
|
|
|
return (user.profile && user.profile.name) ? user.profile.name : getUserName(user);
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-23 12:24:38 +09:00
|
|
|
getDisplayNameById = function(userId){
|
|
|
|
return getDisplayName(Meteor.users.findOne(userId));
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2013-10-25 11:23:16 +09:00
|
|
|
getProfileUrl = function(user) {
|
2014-12-03 00:06:00 -08:00
|
|
|
return getProfileUrlBySlugOrId(user.slug);
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2014-12-03 00:06:00 -08:00
|
|
|
getProfileUrlBySlugOrId = function(slugOrId) {
|
2014-12-09 09:29:17 -08:00
|
|
|
return getRouteUrl('user_profile', {_idOrSlug: slugOrId});
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2014-06-22 13:20:10 +09:00
|
|
|
hasPassword = function(user) {
|
|
|
|
return !!user.services.password;
|
|
|
|
};
|
2013-02-28 11:41:36 +09:00
|
|
|
getTwitterName = function(user){
|
2013-11-07 09:57:57 +09:00
|
|
|
// return twitter name provided by user, or else the one used for twitter login
|
|
|
|
if(checkNested(user, 'profile', 'twitter')){
|
|
|
|
return user.profile.twitter;
|
|
|
|
}else if(checkNested(user, 'services', 'twitter', 'screenName')){
|
2013-02-28 11:41:36 +09:00
|
|
|
return user.services.twitter.screenName;
|
|
|
|
}
|
2013-11-08 11:42:00 +09:00
|
|
|
return null;
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2013-11-07 09:57:57 +09:00
|
|
|
getGitHubName = function(user){
|
|
|
|
// return twitter name provided by user, or else the one used for twitter login
|
|
|
|
if(checkNested(user, 'profile', 'github')){
|
|
|
|
return user.profile.github;
|
|
|
|
}else if(checkNested(user, 'services', 'github', 'screenName')){ // TODO: double-check this with GitHub login
|
|
|
|
return user.services.github.screenName;
|
|
|
|
}
|
2013-11-08 11:42:00 +09:00
|
|
|
return null;
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2013-02-28 11:41:36 +09:00
|
|
|
getTwitterNameById = function(userId){
|
|
|
|
return getTwitterName(Meteor.users.findOne(userId));
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-03 16:33:28 +09:00
|
|
|
getEmail = function(user){
|
2013-10-21 18:56:22 +08:00
|
|
|
if(user.profile && user.profile.email){
|
2012-10-18 11:46:35 +09:00
|
|
|
return user.profile.email;
|
2014-12-03 00:06:00 -08:00
|
|
|
}else{
|
|
|
|
return null;
|
2012-10-08 10:44:13 +09:00
|
|
|
}
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2014-09-12 11:42:44 +09:00
|
|
|
getEmailHash = function(user){
|
|
|
|
// has to be this way to work with Gravatar
|
2014-10-15 16:48:04 -05:00
|
|
|
return Gravatar.hash(getEmail(user));
|
2014-09-12 11:42:44 +09:00
|
|
|
};
|
2014-09-27 12:30:40 -05:00
|
|
|
getAvatarUrl = function(user) {
|
2014-10-13 16:14:48 -05:00
|
|
|
console.warn('FUNCTION getAvatarUrl() IS DEPRECATED -- package bengott:avatar is used instead.')
|
2014-09-30 12:34:42 -05:00
|
|
|
return Avatar.getUrl(user);
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-03 16:33:28 +09:00
|
|
|
getCurrentUserEmail = function(){
|
2012-10-08 10:44:13 +09:00
|
|
|
return Meteor.user() ? getEmail(Meteor.user()) : '';
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-03 16:33:28 +09:00
|
|
|
userProfileComplete = function(user) {
|
2014-10-06 17:11:43 -06:00
|
|
|
for (var i = 0; i < userProfileCompleteChecks.length; i++) {
|
|
|
|
if (!userProfileCompleteChecks[i](user)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-05 13:59:40 +09:00
|
|
|
|
2012-10-30 12:01:11 +09:00
|
|
|
findLast = function(user, collection){
|
2013-01-13 19:18:01 +09:00
|
|
|
return collection.findOne({userId: user._id}, {sort: {createdAt: -1}});
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-30 12:01:11 +09:00
|
|
|
timeSinceLast = function(user, collection){
|
2012-10-08 10:44:13 +09:00
|
|
|
var now = new Date().getTime();
|
2012-10-30 12:01:11 +09:00
|
|
|
var last = findLast(user, collection);
|
2012-10-08 11:23:12 +09:00
|
|
|
if(!last)
|
2012-10-30 12:01:11 +09:00
|
|
|
return 999; // if this is the user's first post or comment ever, stop here
|
2013-01-13 19:18:01 +09:00
|
|
|
return Math.abs(Math.floor((now-last.createdAt)/1000));
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2012-10-30 12:01:11 +09:00
|
|
|
numberOfItemsInPast24Hours = function(user, collection){
|
|
|
|
var mDate = moment(new Date());
|
|
|
|
var items=collection.find({
|
|
|
|
userId: user._id,
|
2013-01-13 19:18:01 +09:00
|
|
|
createdAt: {
|
2014-09-18 16:30:52 -04:00
|
|
|
$gte: mDate.subtract(24, 'hours').valueOf()
|
2012-10-30 12:01:11 +09:00
|
|
|
}
|
|
|
|
});
|
|
|
|
return items.count();
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2013-10-23 10:21:08 +08:00
|
|
|
getUserSetting = function(setting, defaultValue, user){
|
|
|
|
var user = (typeof user == 'undefined') ? Meteor.user() : user;
|
|
|
|
var defaultValue = (typeof defaultValue == "undefined") ? null: defaultValue;
|
|
|
|
var settingValue = getProperty(user.profile, setting);
|
|
|
|
return (settingValue == null) ? defaultValue : settingValue;
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|
2014-08-05 12:25:26 +09:00
|
|
|
setUserSetting = function (setting, value, userArgument) {
|
|
|
|
// note: for some very weird reason, doesn't work when called from Accounts.onCreateUser
|
|
|
|
|
|
|
|
var user;
|
|
|
|
|
|
|
|
if(Meteor.isClient){
|
|
|
|
user = Meteor.user(); // on client, default to current user
|
|
|
|
}else if (Meteor.isServer){
|
|
|
|
user = userArgument; // on server, use argument
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!user)
|
2014-09-16 15:18:27 -04:00
|
|
|
throw new Meteor.Error(500, 'User not defined');
|
2014-08-05 12:25:26 +09:00
|
|
|
|
2014-09-16 15:18:27 -04:00
|
|
|
console.log('Setting user setting "'+setting+'" to "'+value+'" for '+getUserName(user));
|
2014-08-05 12:25:26 +09:00
|
|
|
var find = {_id: user._id};
|
2014-08-05 10:16:05 +09:00
|
|
|
var field = {};
|
|
|
|
field['profile.'+setting] = value;
|
2014-08-05 12:25:26 +09:00
|
|
|
var options = {$set: field};
|
|
|
|
var result = Meteor.users.update(find, options, {validate: false});
|
2014-09-16 15:18:27 -04:00
|
|
|
};
|
2014-08-05 12:25:26 +09:00
|
|
|
|
2013-10-23 10:21:08 +08:00
|
|
|
getProperty = function(object, property){
|
|
|
|
// recursive function to get nested properties
|
|
|
|
var array = property.split('.');
|
|
|
|
if(array.length > 1){
|
|
|
|
var parent = array.shift();
|
|
|
|
// if our property is not at this level, call function again one level deeper if we can go deeper, else return null
|
2014-05-06 20:15:48 -07:00
|
|
|
return (typeof object[parent] == "undefined") ? null : getProperty(object[parent], array.join('.'));
|
2013-10-23 10:21:08 +08:00
|
|
|
}else{
|
|
|
|
// else return property
|
|
|
|
return object[array[0]];
|
|
|
|
}
|
2014-05-06 20:15:48 -07:00
|
|
|
};
|