From d4923398417ac8130b6e5bc347abfefbc7444352 Mon Sep 17 00:00:00 2001 From: barisusakli <barisusakli@gmail.com> Date: Mon, 3 Nov 2014 15:31:41 -0500 Subject: [PATCH] closes #2315 --- public/src/admin/manage/users.js | 14 ++++++++++++++ src/emailer.js | 24 ++++++++++++++---------- src/socket.io/admin/user.js | 22 ++++++++++++++++++++++ src/views/admin/manage/users.tpl | 1 + 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index 54eead3572..d4d5f50404 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -124,6 +124,20 @@ define('admin/manage/users', ['admin/modules/selectable'], function(selectable) return false; }); + $('.password-reset-email').on('click', function() { + var uids = getSelectedUids(); + if (!uids.length) { + return; + } + + bootbox.confirm('Do you want to send password reset email(s) to these user(s)?', function(confirm) { + if (confirm) { + socket.emit('admin.user.sendPasswordResetEmail', uids, done('Emails sent')); + } + }); + return false; + }); + $('.delete-user').on('click', function() { var uids = getSelectedUids(); if (!uids.length) { diff --git a/src/emailer.js b/src/emailer.js index d77cc9556a..d3b7d1f9aa 100644 --- a/src/emailer.js +++ b/src/emailer.js @@ -36,21 +36,25 @@ Emailer.send = function(template, uid, params) { next(undefined, translated); }); }, function(err, translated) { - if(err) { + if (err) { return winston.error(err.message); } else if (!results.email) { return winston.warn('uid : ' + uid + ' has no email, not sending.'); } - Plugins.fireHook('action:email.send', { - to: results.email, - from: meta.config['email:from'] || 'no-reply@localhost.lan', - subject: translated[2], - html: translated[0], - plaintext: translated[1], - template: template, - uid: uid - }); + if (Plugins.hasListeners('action:email.send')) { + Plugins.fireHook('action:email.send', { + to: results.email, + from: meta.config['email:from'] || 'no-reply@localhost.lan', + subject: translated[2], + html: translated[0], + plaintext: translated[1], + template: template, + uid: uid + }); + } else { + winston.warn('[emailer] No active email plugin found!'); + } }); }); }; diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index 0647b1397b..a8ebe9659e 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -118,6 +118,28 @@ User.validateEmail = function(socket, uids, callback) { }, callback); }; +User.sendPasswordResetEmail = function(socket, uids, callback) { + if (!Array.isArray(uids)) { + return callback(new Error('[[error:invalid-data]]')); + } + + uids = uids.filter(function(uid) { + return parseInt(uid, 10); + }); + + async.each(uids, function(uid, next) { + user.getUserFields(uid, ['email', 'username'], function(err, userData) { + if (err) { + return next(err); + } + if (!userData.email) { + return next(new Error('[[error:user-doesnt-have-email, ' + userData.username + ']]')); + } + user.reset.send(userData.email, next); + }); + }, callback); +}; + User.deleteUsers = function(socket, uids, callback) { if(!Array.isArray(uids)) { return callback(new Error('[[error:invalid-data]]')); diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index 056ae48ad7..9f8ab3f322 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -18,6 +18,7 @@ <li><a href="#" class="remove-admin-user"><i class="fa fa-fw fa-ban"></i> Remove Admin</a></li> <li class="divider"></li> <li><a href="#" class="validate-email"><i class="fa fa-fw fa-check"></i> Validate Email</a></li> + <li><a href="#" class="password-reset-email"><i class="fa fa-fw fa-key"></i> Send Password Reset Email</a></li> <li class="divider"></li> <li><a href="#" class="ban-user"><i class="fa fa-fw fa-gavel"></i> Ban User</a></li> <li><a href="#" class="unban-user"><i class="fa fa-fw fa-comment-o"></i> Unban User</a></li>