From 67905667a9e8c6f94bc0fb89087dbe65914518cc Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Sat, 28 Nov 2015 15:33:17 -0700 Subject: [PATCH] Added admin-only invites --- src/controllers/index.js | 2 +- src/controllers/users.js | 12 +++---- src/socket.io/user.js | 53 +++++++++++++++++-------------- src/views/admin/settings/user.tpl | 1 + 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/controllers/index.js b/src/controllers/index.js index f418c16572..e4261730f0 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -108,7 +108,7 @@ Controllers.register = function(req, res, next) { async.waterfall([ function(next) { - if (registrationType === 'invite-only') { + if (registrationType === 'invite-only' || registrationType === 'admin-invite-only') { user.verifyInvitation(req.query, next); } else { next(); diff --git a/src/controllers/users.js b/src/controllers/users.js index 21d1490717..7207150d0d 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -155,9 +155,11 @@ function render(req, res, data, next) { return next(err); } - if (!req.uid) { - return next(new Error('[[error:no-privileges]]')); - } + var registrationType = meta.config.registrationType; + + data.templateData.maximumInvites = meta.config.maximumInvites; + data.templateData.inviteOnly = registrationType === 'invite-only' || registrationType === 'admin-invite-only'; + data.templateData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1; user.getInvitesNumber(req.uid, function(err, num) { if (err) { @@ -165,11 +167,9 @@ function render(req, res, data, next) { } data.templateData.invites = num; - data.templateData.maximumInvites = meta.config.maximumInvites; - data.templateData.inviteOnly = meta.config.registrationType === 'invite-only'; - data.templateData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1; res.render('users', data.templateData); }); + }); } diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 3f2f72c6f4..14b0c2c828 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -270,36 +270,41 @@ SocketUser.invite = function(socket, email, callback) { return callback(new Error('[[error:invalid-data]]')); } - if (meta.config.registrationType !== 'invite-only') { + var registrationType = meta.config.registrationType + + if (registrationType !== 'invite-only' && registrationType !== 'admin-invite-only') { return callback(new Error('[[error:forum-not-invite-only]]')); } var max = meta.config.maximumInvites; - if (max) { - async.waterfall([ - function(next) { - user.getInvitesNumber(socket.uid, next); - }, - function(invites, next) { - user.isAdministrator(socket.uid, function(err, admin) { - next(err, invites, admin); - }); - }, - function(invites, admin, next) { - console.log(admin, invites, max); - if (!admin && invites > max) { - return next(new Error('[[error:invite-maximum-met, ' + invites + ', ' + max + ']]')); + user.isAdministrator(socket.uid, function(err, admin) { + if (err) { + return callback(err); + } + if (registrationType === 'admin-invite-only' && !admin) { + return callback(new Error('[[error:no-privileges]]')); + } + if (max) { + async.waterfall([ + function(next) { + user.getInvitesNumber(socket.uid, next); + }, + function(invites, next) { + if (!admin && invites > max) { + return next(new Error('[[error:invite-maximum-met, ' + invites + ', ' + max + ']]')); + } + next(); + }, + function(next) { + user.sendInvitationEmail(socket.uid, email, next); } - next(); - }, - function(next) { - user.sendInvitationEmail(socket.uid, email, next); - } - ], callback); - } else { - user.sendInvitationEmail(socket.uid, email, callback); - } + ], callback); + } else { + user.sendInvitationEmail(socket.uid, email, callback); + } + }); + }; diff --git a/src/views/admin/settings/user.tpl b/src/views/admin/settings/user.tpl index 6f6b83f78d..bd0e746c91 100644 --- a/src/views/admin/settings/user.tpl +++ b/src/views/admin/settings/user.tpl @@ -33,6 +33,7 @@ +