var InviteSchema = new SimpleSchema({ _id: { type: String, optional: true }, invitingUserId: { type: String, optional: true }, invitedUserEmail: { type: String, regEx: SimpleSchema.RegEx.Email }, accepted: { type: Boolean, optional: true } }); Invites = new Meteor.Collection("invites"); Invites.attachSchema(InviteSchema); Users.addField([ /** A count of the user's remaining invites */ { fieldName: "telescope.inviteCount", fieldSchema: { type: Number, optional: true } }, /** A count of how many users have been invited by the user */ { fieldName: "telescope.invitedCount", fieldSchema: { type: Number, optional: true } }, /** Whether the user is invited or not */ { fieldName: "telescope.isInvited", fieldSchema: { type: Boolean, optional: true, editableBy: ["admin"], autoform: { omit: true } } }, /** The _id of the user who invited the current user */ { fieldName: "telescope.invitedBy", fieldSchema: { type: String, optional: true, autoform: { omit: true } } }, /** The name of the user who invited the current user */ { fieldName: "telescope.invitedByName", fieldSchema: { type: String, optional: true, autoform: { omit: true } } } ]); // invites are managed through Meteor method Invites.deny({ insert: function(){ return true; }, update: function(){ return true; }, remove: function(){ return true; } }); Telescope.modules.add("profileEdit", { template: 'user_invites', order: 2 }); function setStartingInvites (user) { // give new users a few invites (default to 3) user.inviteCount = Settings.get('startInvitesCount', 3); return user; } Telescope.callbacks.add("onCreateUser", setStartingInvites); function checkIfInvited (user) { // if the new user has been invited // set her status accordingly and update invitation info if(Telescope.utils.invitesEnabled() && Users.getEmail(user)){ var invite = Invites.findOne({ invitedUserEmail : Users.getEmail(user) }); if(invite){ var invitedBy = Meteor.users.findOne({ _id : invite.invitingUserId }); user = _.extend(user, { isInvited: true, invitedBy: invitedBy._id, invitedByName: Users.getDisplayName(invitedBy) }); Invites.update(invite._id, {$set : { accepted : true }}); } } return user; } Telescope.callbacks.add("onCreateUser", checkIfInvited);