From 3925e8917a4f22911dc4daa102d7cb85a76515a2 Mon Sep 17 00:00:00 2001 From: Luis Fernando do Nascimento Date: Sun, 28 May 2017 17:45:38 -0300 Subject: [PATCH] Added logic to remove user reason once user gets activated --- client/methods/unsetUserReason.js | 6 ++++ .../rocketchat-lib/server/models/Users.js | 30 ++++++++++++------- .../client/tabs/userInfo.js | 5 +++- server/methods/unsetUserReason.js | 27 +++++++++++++++++ 4 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 client/methods/unsetUserReason.js create mode 100644 server/methods/unsetUserReason.js diff --git a/client/methods/unsetUserReason.js b/client/methods/unsetUserReason.js new file mode 100644 index 00000000000..245eb587dfb --- /dev/null +++ b/client/methods/unsetUserReason.js @@ -0,0 +1,6 @@ +Meteor.methods({ + unsetUserReason(userId) { + Meteor.users.update(userId, { $unset: { 'reason' : 1 } }); + return true; + } +}); diff --git a/packages/rocketchat-lib/server/models/Users.js b/packages/rocketchat-lib/server/models/Users.js index 184789c2a1c..ce21729643a 100644 --- a/packages/rocketchat-lib/server/models/Users.js +++ b/packages/rocketchat-lib/server/models/Users.js @@ -314,16 +314,6 @@ class ModelUsers extends RocketChat.models._Base { return this.update(_id, update); } - setReason(_id, reason) { - const update = { - $set: { - reason - } - }; - - return this.update(_id, update); - } - setCustomFields(_id, fields) { const values = {}; Object.keys(fields).reduce(key => { @@ -504,6 +494,26 @@ class ModelUsers extends RocketChat.models._Base { return this.update({ _id }, update); } + setReason(_id, reason) { + const update = { + $set: { + reason + } + }; + + return this.update(_id, update); + } + + unsetReason(_id) { + const update = { + $unset: { + 'reason' : true, + } + }; + + return this.update(_id, update); + } + // INSERT create(data) { const user = { diff --git a/packages/rocketchat-ui-flextab/client/tabs/userInfo.js b/packages/rocketchat-ui-flextab/client/tabs/userInfo.js index ede5cb950e2..883751232fe 100644 --- a/packages/rocketchat-ui-flextab/client/tabs/userInfo.js +++ b/packages/rocketchat-ui-flextab/client/tabs/userInfo.js @@ -184,7 +184,7 @@ Template.userInfo.helpers({ shouldDisplayReason() { const user = Template.instance().user.get(); - return RocketChat.settings.get('Accounts_ManuallyApproveNewUsers') && user.active === false; + return RocketChat.settings.get('Accounts_ManuallyApproveNewUsers') && user.active === false && user.reason; } }); @@ -395,6 +395,9 @@ Template.userInfo.events({ if (user) { return Meteor.call('setUserActiveStatus', user._id, true, function(error, result) { if (result) { + + Meteor.call('unsetUserReason', user._id); + toastr.success(t('User_has_been_activated')); } if (error) { diff --git a/server/methods/unsetUserReason.js b/server/methods/unsetUserReason.js new file mode 100644 index 00000000000..b2740a145bf --- /dev/null +++ b/server/methods/unsetUserReason.js @@ -0,0 +1,27 @@ +Meteor.methods({ + unsetUserReason(userId) { + check(userId, String); + + if (!Meteor.userId()) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { + method: 'unsetUserReason' + }); + } + + if (RocketChat.authz.hasPermission(Meteor.userId(), 'edit-other-user-active-status') !== true) { + throw new Meteor.Error('error-not-allowed', 'Not allowed', { + method: 'unsetUserReason' + }); + } + + const user = RocketChat.models.Users.findOneById(userId); + + if (user) { + RocketChat.models.Users.unsetReason(userId); + + return true; + } + + return false; + } +});