diff --git a/packages/telescope-core/lib/client/handlebars.js b/packages/telescope-core/lib/client/handlebars.js
index 57492bd12..5bd20717a 100644
--- a/packages/telescope-core/lib/client/handlebars.js
+++ b/packages/telescope-core/lib/client/handlebars.js
@@ -25,13 +25,11 @@ Template.registerHelper('canPost', function() {
Template.registerHelper('canComment', function() {
return Users.can.comment(Meteor.user());
});
-Template.registerHelper('isAdmin', function(showError) {
+Template.registerHelper('isAdmin', function(user) {
+ var user = typeof user === "undefined" ? Meteor.user() : user;
if (Users.is.admin(Meteor.user())) {
return true;
}
- if ((typeof showError === 'string') && (showError === 'true')) {
- Messages.flash(i18n.t('sorry_you_do_not_have_access_to_this_page'), 'error');
- }
return false;
});
Template.registerHelper('canEdit', function(item) {
diff --git a/packages/telescope-core/lib/router/filters.js b/packages/telescope-core/lib/router/filters.js
index c0663e463..5f0dd516b 100644
--- a/packages/telescope-core/lib/router/filters.js
+++ b/packages/telescope-core/lib/router/filters.js
@@ -80,6 +80,7 @@ Router._filters = {
canViewRejectedPosts: function () {
var post = this.data();
+ var user = Meteor.user();
if (!!post && post.status === Posts.config.STATUS_REJECTED && !Users.can.viewRejectedPost(user, post)) {
this.render('no_rights');
} else {
diff --git a/packages/telescope-invites/lib/invites.js b/packages/telescope-invites/lib/invites.js
index f01b241aa..82b54d5dd 100644
--- a/packages/telescope-invites/lib/invites.js
+++ b/packages/telescope-invites/lib/invites.js
@@ -1,4 +1,4 @@
-InviteSchema = new SimpleSchema({
+var InviteSchema = new SimpleSchema({
_id: {
type: String,
optional: true
@@ -20,6 +20,69 @@ InviteSchema = new SimpleSchema({
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({
diff --git a/packages/telescope-invites/lib/server/invites.js b/packages/telescope-invites/lib/server/invites.js
index b302d3424..134893271 100644
--- a/packages/telescope-invites/lib/server/invites.js
+++ b/packages/telescope-invites/lib/server/invites.js
@@ -16,13 +16,12 @@ Meteor.methods({
var user = invitation.invitedUserEmail ?
Meteor.users.findOne({ emails : { $elemMatch: { address: invitation.invitedUserEmail } } }) :
- Meteor.users.findOne({ _id : invitation.userId }),
- userEmail = invitation.invitedUserEmail ? invitation.invitedUserEmail :
- Users.getEmail(user),
- currentUser = Meteor.user(),
- currentUserCanInvite = currentUserIsAdmin ||
- (currentUser.inviteCount > 0 && Users.can.invite(currentUser)),
- currentUserIsAdmin = Users.is.admin(currentUser);
+ Meteor.users.findOne({ _id : invitation.userId });
+
+ var userEmail = invitation.invitedUserEmail ? invitation.invitedUserEmail :Users.getEmail(user);
+ var currentUser = Meteor.user();
+ var currentUserIsAdmin = Users.is.admin(currentUser);
+ var currentUserCanInvite = currentUserIsAdmin || (currentUser.inviteCount > 0 && Users.can.invite(currentUser));
// check if the person is already invited
if(user && Users.can.invite(user)){
@@ -32,7 +31,7 @@ Meteor.methods({
throw new Meteor.Error(701, "You can't invite this user, sorry.");
}
- // don't allow duplicate multpile invite for the same person
+ // don't allow duplicate multiple invite for the same person
var existingInvite = Invites.findOne({ invitedUserEmail : userEmail });
if (existingInvite) {
@@ -48,15 +47,17 @@ Meteor.methods({
});
// update invinting user
- Meteor.users.update(Meteor.userId(), {$inc:{inviteCount: -1}});
+ Meteor.users.update(Meteor.userId(), {$inc:{"telescope.inviteCount": -1}, $inc:{"telescope.invitedCount": 1}});
if(user){
// update invited user
- Meteor.users.update(user._id, {$set: {
- isInvited: true,
- invitedBy: Meteor.userId(),
- invitedByName: Users.getDisplayName(currentUser)
- }});
+ Meteor.users.update(user._id, {
+ $set: {
+ "telescope.isInvited": true,
+ "telescope.invitedBy": Meteor.userId(),
+ "telescope.invitedByName": Users.getDisplayName(currentUser)
+ }
+ });
}
var communityName = Settings.get('title','Telescope'),
diff --git a/packages/telescope-invites/package.js b/packages/telescope-invites/package.js
index 92d6d1c80..860bcd552 100644
--- a/packages/telescope-invites/package.js
+++ b/packages/telescope-invites/package.js
@@ -75,8 +75,6 @@ Package.onUse(function (api) {
// -------------------------------- 3. Variables to export --------------------------------
- api.export([
- //
- ]);
+ api.export("Invites");
});
diff --git a/packages/telescope-lib/lib/collections.js b/packages/telescope-lib/lib/collections.js
index f31d2e449..f06ef4a1b 100644
--- a/packages/telescope-lib/lib/collections.js
+++ b/packages/telescope-lib/lib/collections.js
@@ -4,15 +4,20 @@
*/
/**
- * Add an additional field to a schema.
- * @param {Object} field
+ * Add an additional field (or an array of fields) to a schema.
+ * @param {Object|Object[]} field
*/
-Mongo.Collection.prototype.addField = function (field) {
+Mongo.Collection.prototype.addField = function (fieldOrFieldArray) {
var collection = this;
var fieldSchema = {};
- fieldSchema[field.fieldName] = field.fieldSchema;
+ var fieldArray = Array.isArray(fieldOrFieldArray) ? fieldOrFieldArray : [fieldOrFieldArray];
+
+ // loop over fields and add them to schema
+ fieldArray.forEach(function (field) {
+ fieldSchema[field.fieldName] = field.fieldSchema;
+ });
// add field schema to collection schema
collection.attachSchema(fieldSchema);
diff --git a/packages/telescope-users/lib/client/templates/profile/user_info.html b/packages/telescope-users/lib/client/templates/profile/user_info.html
index b2b92e4cd..37ce098ac 100644
--- a/packages/telescope-users/lib/client/templates/profile/user_info.html
+++ b/packages/telescope-users/lib/client/templates/profile/user_info.html
@@ -25,10 +25,14 @@
{{_ "edit_profile"}}
{{/if}}
{{#if canInvite}}
- {{#if inviteCount}}
- {{_ "invite"}} ({{inviteCount}} {{_ "left"}})
+ {{#if isAdmin}}
+ {{_ "invite"}}
{{else}}
- {{_ "invite_none_left"}}
+ {{#if inviteCount}}
+ {{_ "invite"}} ({{inviteCount}} {{_ "left"}})
+ {{else}}
+ {{_ "invite_none_left"}}
+ {{/if}}
{{/if}}
{{/if}}
diff --git a/packages/telescope-users/lib/client/templates/profile/user_info.js b/packages/telescope-users/lib/client/templates/profile/user_info.js
index 55f67642f..c0d78ab95 100644
--- a/packages/telescope-users/lib/client/templates/profile/user_info.js
+++ b/packages/telescope-users/lib/client/templates/profile/user_info.js
@@ -44,7 +44,15 @@ Template.user_info.helpers({
Template.user_info.events({
'click .invite-link': function(e, instance){
- Meteor.call('inviteUser', instance.data.user._id);
- Messages.flash('Thanks, user has been invited.', "success");
+ var user = this;
+ Meteor.call('inviteUser', {userId: user._id}, function(error, success){
+ if (error) {
+ Messages.flash(error, "error");
+ Messages.clearSeen();
+ } else {
+ Messages.flash('Thanks, user has been invited.', "success");
+ Messages.clearSeen();
+ }
+ });
}
});
diff --git a/packages/telescope-users/lib/users.js b/packages/telescope-users/lib/users.js
index 8c2aad737..f65311d80 100644
--- a/packages/telescope-users/lib/users.js
+++ b/packages/telescope-users/lib/users.js
@@ -90,31 +90,6 @@ Telescope.schemas.userData = new SimpleSchema({
},
template: "user_profile_bio"
},
- /**
- A count of the user's remaining invites
- */
- inviteCount: {
- type: Number,
- optional: true
- },
- /**
- A count of how many users have been invited by the user
- */
- invitedCount: {
- type: Number,
- optional: true
- },
- /**
- Whether the user is invited or not
- */
- isInvited: {
- type: Boolean,
- optional: true,
- editableBy: ["admin"],
- autoform: {
- omit: true
- }
- },
/**
The user's karma
*/