Vulcan/server/users.js

124 lines
3.3 KiB
JavaScript
Raw Normal View History

2012-10-18 17:20:20 +09:00
Accounts.onCreateUser(function(options, user){
var userProperties = {
profile: options.profile || {},
karma: 0,
isInvited: false,
postCount: 0,
commentCount: 0,
invitedCount: 0,
votes: {
upvotedPosts: [],
downvotedPosts: [],
upvotedComments: [],
downvotedComments: []
}
};
user = _.extend(user, userProperties);
2012-10-01 11:18:05 +10:00
if (options.email)
2012-10-01 13:08:46 +10:00
user.profile.email = options.email;
if (getEmail(user))
user.email_hash = getEmailHash(user);
2012-10-01 11:18:05 +10:00
2012-10-01 13:08:46 +10:00
if (!user.profile.name)
user.profile.name = user.username;
2012-10-01 11:18:05 +10:00
// set notifications default preferences
user.profile.notifications = {
users: false,
posts: false,
comments: true,
replies: true
};
// create slug from username
user.slug = slugify(getUserName(user));
2012-10-19 12:42:28 +09:00
// if this is the first user ever, make them an admin
if (!Meteor.users.find().count() ) {
setAdmin(user, true);
} else {
setAdmin(user, false);
}
2013-10-23 19:43:42 +09:00
// give new users a few invites (default to 3)
user.inviteCount = getSetting('startInvitesCount', 3);
2013-10-23 19:43:42 +09:00
trackEvent('new user', {username: user.username, email: user.profile.email});
// if user has already filled in their email, add them to MailChimp list
2014-08-05 12:25:26 +09:00
// if(user.profile.email)
// addToMailChimpList(user, false, function(error, result){
// if(error){
// console.log(error)
// }
// });
// if the new user has been invited
// set her status accordingly and update invitation info
if(invitesEnabled() && user.profile.email){
var invite = Invites.findOne({ invitedUserEmail : user.profile.email });
if(invite){
var invitedBy = Meteor.users.findOne({ _id : invite.invitingUserId });
user = _.extend(user, {
isInvited: true,
invitedBy: invitedBy._id,
invitedByName: getDisplayName(invitedBy)
});
Invites.update(invite._id, {$set : {
accepted : true
}});
}
}
// send notifications to admins
var admins = adminUsers();
admins.forEach(function(admin){
if(getUserSetting('notifications.users', false, admin)){
2014-08-05 10:59:54 +09:00
var emailProperties = {
profileUrl: getProfileUrl(user),
username: getUserName(user)
};
var html = getEmailTemplate('emailNewUser')(emailProperties);
2014-08-05 10:59:54 +09:00
sendEmail(getEmail(admin), 'New user account: '+getUserName(user), buildEmailTemplate(html));
}
});
2012-10-01 11:18:05 +10:00
return user;
2012-10-01 13:08:46 +10:00
});
2012-10-01 13:08:46 +10:00
Meteor.methods({
2014-10-15 16:48:04 -05:00
changeEmail: function (newEmail) {
Meteor.users.update(
Meteor.userId(),
{$set: {
emails: [{address: newEmail}],
email_hash: Gravatar.hash(newEmail),
// Just in case this gets called from somewhere other than /client/views/users/user_edit.js
"profile.email": newEmail
}
}
);
},
numberOfPostsToday: function(){
console.log(numberOfItemsInPast24Hours(Meteor.user(), Posts));
},
numberOfCommentsToday: function(){
console.log(numberOfItemsInPast24Hours(Meteor.user(), Comments));
2012-11-21 12:30:45 +09:00
},
testBuffer: function(){
// TODO
},
getScoreDiff: function(id){
var object = Posts.findOne(id);
var baseScore = object.baseScore;
var ageInHours = (new Date().getTime() - object.submitted) / (60 * 60 * 1000);
var newScore = baseScore / Math.pow(ageInHours + 2, 1.3);
return Math.abs(object.score - newScore);
2012-10-01 13:08:46 +10:00
}
});