diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index 38ab5f88e5..4c6f202c0a 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -1,8 +1,8 @@ 'use strict'; define('admin/manage/users', [ - 'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', -], function (translator, Benchpress, autocomplete, api, slugify, bootbox) { + 'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'accounts/invite', +], function (translator, Benchpress, autocomplete, api, slugify, bootbox, AccountInvite) { var Users = {}; Users.init = function () { @@ -380,13 +380,10 @@ define('admin/manage/users', [ } handleSearch(); - handleUserCreate(); - - handleInvite(); - handleSort(); handleFilter(); + AccountInvite.handle(); }; function handleSearch() { @@ -453,59 +450,6 @@ define('admin/manage/users', [ }); } - function handleInvite() { - $('[component="user/invite"]').on('click', function (e) { - e.preventDefault(); - api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => { - Benchpress.parse('modals/invite', { groups: groups }, function (html) { - bootbox.dialog({ - message: html, - title: '[[admin/manage/users:invite]]', - onEscape: true, - buttons: { - cancel: { - label: '[[admin/manage/users:alerts.button-cancel]]', - className: 'btn-default', - }, - invite: { - label: '[[admin/manage/users:invite]]', - className: 'btn-primary', - callback: sendInvites, - }, - }, - }); - }); - }).catch((err) => { - app.alertError(err.message); - }); - }); - } - - function sendInvites() { - var $emails = $('#invite-modal-emails'); - var $groups = $('#invite-modal-groups'); - - var data = { - emails: $emails.val() - .split(',') - .map(m => m.trim()) - .filter(Boolean) - .filter((m, i, arr) => i === arr.indexOf(m)) - .join(','), - groupsToJoin: $groups.val(), - }; - - if (!data.emails) { - return; - } - - api.post(`/users/${app.user.uid}/invites`, data).then(() => { - app.alertSuccess('[[admin/manage/users:alerts.email-sent-to, ' + data.emails.replace(/,/g, ', ') + ']]'); - }).catch((err) => { - app.alertError(err.message); - }); - } - function buildSearchQuery(params) { if ($('#user-search').val()) { params.query = $('#user-search').val(); diff --git a/public/src/client/users.js b/public/src/client/users.js index 70f8783b9c..50ecab2ac1 100644 --- a/public/src/client/users.js +++ b/public/src/client/users.js @@ -2,8 +2,8 @@ define('forum/users', [ - 'translator', 'benchpress', 'api', 'bootbox', -], function (translator, Benchpress, api, bootbox) { + 'translator', 'benchpress', 'api', 'accounts/invite', +], function (translator, Benchpress, api, AccountInvite) { var Users = {}; var searchTimeoutID = 0; @@ -25,7 +25,7 @@ define('forum/users', [ Users.handleSearch(); - handleInvite(); + AccountInvite.handle(); socket.removeListener('event:user_status_change', onUserStatusChange); socket.on('event:user_status_change', onUserStatusChange); @@ -135,58 +135,5 @@ define('forum/users', [ return utils.params().section || ''; } - function handleInvite() { - $('[component="user/invite"]').on('click', function (e) { - e.preventDefault(); - api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => { - Benchpress.parse('modals/invite', { groups: groups }, function (html) { - bootbox.dialog({ - message: html, - title: '[[users:invite]]', - onEscape: true, - buttons: { - cancel: { - label: '[[modules:bootbox.cancel]]', - className: 'btn-default', - }, - invite: { - label: '[[users:invite]]', - className: 'btn-primary', - callback: sendInvites, - }, - }, - }); - }); - }).catch((err) => { - app.alertError(err.message); - }); - }); - } - - function sendInvites() { - var $emails = $('#invite-modal-emails'); - var $groups = $('#invite-modal-groups'); - - var data = { - emails: $emails.val() - .split(',') - .map(m => m.trim()) - .filter(Boolean) - .filter((m, i, arr) => i === arr.indexOf(m)) - .join(','), - groupsToJoin: $groups.val(), - }; - - if (!data.emails) { - return; - } - - api.post(`/users/${app.user.uid}/invites`, data).then(() => { - app.alertSuccess('[[users:invitation-email-sent, ' + data.emails.replace(/,/g, ', ') + ']]'); - }).catch((err) => { - app.alertError(err.message); - }); - } - return Users; }); diff --git a/public/src/modules/accounts/invite.js b/public/src/modules/accounts/invite.js new file mode 100644 index 0000000000..621c84bcba --- /dev/null +++ b/public/src/modules/accounts/invite.js @@ -0,0 +1,64 @@ +'use strict'; + +define('accounts/invite', ['api', 'benchpress', 'bootbox'], function (api, Benchpress, bootbox) { + const Invite = {}; + + function isACP() { + return ajaxify.data.template.name.startsWith('admin/'); + } + + Invite.handle = function () { + $('[component="user/invite"]').on('click', function (e) { + e.preventDefault(); + api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => { + Benchpress.parse('modals/invite', { groups: groups }, function (html) { + bootbox.dialog({ + message: html, + title: `[[${isACP ? 'admin/manage/users:invite' : 'users:invite'}]]`, + onEscape: true, + buttons: { + cancel: { + label: `[[${isACP ? 'admin/manage/users:alerts.button-cancel' : 'modules:bootbox.cancel'}]]`, + className: 'btn-default', + }, + invite: { + label: `[[${isACP ? 'admin/manage/users:invite' : 'users:invite'}]]`, + className: 'btn-primary', + callback: Invite.send, + }, + }, + }); + }); + }).catch((err) => { + app.alertError(err.message); + }); + }); + }; + + Invite.send = function () { + var $emails = $('#invite-modal-emails'); + var $groups = $('#invite-modal-groups'); + + var data = { + emails: $emails.val() + .split(',') + .map(m => m.trim()) + .filter(Boolean) + .filter((m, i, arr) => i === arr.indexOf(m)) + .join(','), + groupsToJoin: $groups.val(), + }; + + if (!data.emails) { + return; + } + + api.post(`/users/${app.user.uid}/invites`, data).then(() => { + app.alertSuccess(`[[${isACP ? 'admin/manage/users:alerts.email-sent-to' : 'users:invitation-email-sent'}, ${data.emails.replace(/,/g, ', ')}]]`); + }).catch((err) => { + app.alertError(err.message); + }); + }; + + return Invite; +});