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} +
+ +
+