diff --git a/public/src/admin/manage/registration.js b/public/src/admin/manage/registration.js
index 0592fc02a9..55578901e8 100644
--- a/public/src/admin/manage/registration.js
+++ b/public/src/admin/manage/registration.js
@@ -8,7 +8,6 @@ define('admin/manage/registration', function() {
Registration.init = function() {
$('.users-list').on('click', '[data-action]', function(ev) {
- var $this = this;
var parent = $(this).parents('[data-username]');
var action = $(this).attr('data-action');
var username = parent.attr('data-username');
@@ -22,6 +21,37 @@ define('admin/manage/registration', function() {
});
return false;
});
+
+ $('.invites-list').on('click', '[data-action]', function(ev) {
+ var parent = $(this).parents('[data-invitation-mail][data-invited-by]');
+ var email = parent.attr('data-invitation-mail');
+ var invitedBy = parent.attr('data-invited-by');
+ var action = $(this).attr('data-action');
+ var method = 'admin.user.deleteInvitation';
+
+ var removeRow = function () {
+ var nextRow = parent.next(),
+ thisRowinvitedBy = parent.find('.invited-by'),
+ nextRowInvitedBy = nextRow.find('.invited-by');
+ if (nextRowInvitedBy.html() !== undefined && nextRowInvitedBy.html().length < 2) {
+ nextRowInvitedBy.html(thisRowinvitedBy.html());
+ }
+ parent.remove();
+ };
+ if (action === 'delete') {
+ bootbox.confirm('Are you sure you wish to delete this invitation?', function(confirm) {
+ if (confirm) {
+ socket.emit(method, {email: email, invitedBy: invitedBy}, function(err) {
+ if (err) {
+ return app.alertError(err.message);
+ }
+ removeRow();
+ });
+ }
+ });
+ }
+ return false;
+ });
};
return Registration;
diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js
index a6c9ef3288..8db2c9e580 100644
--- a/src/controllers/authentication.js
+++ b/src/controllers/authentication.js
@@ -93,7 +93,7 @@ function registerAndLoginUser(req, res, userData, callback) {
}
},
function(next) {
- user.deleteInvitation(userData.email);
+ user.deleteInvitationKey(userData.email);
plugins.fireHook('filter:register.complete', {uid: uid, referrer: req.body.referrer || nconf.get('relative_path') + '/'}, next);
}
], callback);
diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js
index a241affb90..c46e01a99c 100644
--- a/src/socket.io/admin/user.js
+++ b/src/socket.io/admin/user.js
@@ -212,6 +212,10 @@ User.search = function(socket, data, callback) {
});
};
+User.deleteInvitation = function(socket, data, callback) {
+ user.deleteInvitation(data.invitedBy, data.email, callback);
+};
+
User.acceptRegistration = function(socket, data, callback) {
user.acceptRegistration(data.username, callback);
};
@@ -221,4 +225,4 @@ User.rejectRegistration = function(socket, data, callback) {
};
-module.exports = User;
\ No newline at end of file
+module.exports = User;
diff --git a/src/user.js b/src/user.js
index e9546b8c6e..582686f774 100644
--- a/src/user.js
+++ b/src/user.js
@@ -39,7 +39,6 @@ var async = require('async'),
if (err || userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
return callback(err);
}
-
User.setUserField(uid, 'lastonline', now, callback);
});
};
@@ -257,4 +256,3 @@ var async = require('async'),
}(exports));
-
diff --git a/src/user/invite.js b/src/user/invite.js
index 638432e810..34521550a5 100644
--- a/src/user/invite.js
+++ b/src/user/invite.js
@@ -120,7 +120,31 @@ module.exports = function(User) {
], callback);
};
- User.deleteInvitation = function(email, callback) {
+ User.deleteInvitation = function(invitedBy, email, callback) {
+ callback = callback || function() {};
+ async.waterfall([
+ function getInvitedByUid(next) {
+ User.getUidByUsername(invitedBy, next);
+ },
+ function deleteRegistries(invitedByUid, next) {
+ if (!invitedByUid) {
+ return next(new Error('[[error:invalid-username]]'));
+ }
+ async.parallel([
+ function deleteFromReferenceList(next) {
+ db.setRemove('invitation:uid:' + invitedByUid, email, next);
+ },
+ function deleteInviteKey(next) {
+ db.delete('invitation:email:' + email, callback);
+ }
+ ], function(err) {
+ next(err)
+ });
+ }
+ ], callback);
+ };
+
+ User.deleteInvitationKey = function(email, callback) {
callback = callback || function() {};
db.delete('invitation:email:' + email, callback);
};
diff --git a/src/views/admin/manage/registration.tpl b/src/views/admin/manage/registration.tpl
index 6cf35b65cc..f4dbe697ef 100644
--- a/src/views/admin/manage/registration.tpl
+++ b/src/views/admin/manage/registration.tpl
@@ -66,18 +66,23 @@
The username will be displayed to the right of the emails for users who have redeemed their invitations.
Inviter Username | Invitee Email | Invitee Username (if registered) | |
---|---|---|---|
{invites.username} | + +|||
{invites.username} | {invites.invitations.email} | -{invites.invitations.username} | +{invites.invitations.username}
+
+
+
+ |