diff --git a/packages/component-invite/src/controllers/assignCollectionRole.js b/packages/component-invite/src/controllers/assignCollectionRole.js index 2dc68984601b5ab8ddf8a60ea8ae01db49434cb0..36a16362ff3ab1e7002ce38375849053bd9802a9 100644 --- a/packages/component-invite/src/controllers/assignCollectionRole.js +++ b/packages/component-invite/src/controllers/assignCollectionRole.js @@ -63,12 +63,19 @@ module.exports = async ( try { let user = await models.User.findByEmail(email) - const team = await teamHelper.setupManuscriptTeam( - models, - user, + let team = teamHelper.getTeamByGroupAndCollection( collectionId, role, + models.Team, ) + if (team === undefined) { + team = await teamHelper.setupManuscriptTeam( + models, + user, + collectionId, + role, + ) + } // getting the updated user from the DB - creating a team also updates the user user = await models.User.findByEmail(email) @@ -84,7 +91,7 @@ module.exports = async ( return res.status(200).json(user) } catch (e) { logger.error(e) - return res.status(500).json({ error: 'Mailing could not be sent.' }) + return res.status(500).json({ error: 'Mail could not be sent.' }) } } catch (e) { const notFoundError = await helpers.handleNotFoundError(e, 'user') diff --git a/packages/component-invite/src/helpers/Team.js b/packages/component-invite/src/helpers/Team.js index 553b4cd75f9d84eceecca548b54a851a94c77331..ae6758c967a6ddb379699ffeb1332d81967b55cc 100644 --- a/packages/component-invite/src/helpers/Team.js +++ b/packages/component-invite/src/helpers/Team.js @@ -166,6 +166,16 @@ const getInviteData = (invitations, collectionId, role) => { return { timestamp, status } } +const getTeamByGroupAndCollection = async (collectionId, role, TeamModel) => { + const teams = await TeamModel.all() + return teams.find( + team => + team.group === role && + team.object.type === 'collection' && + team.object.id === collectionId, + ) +} + module.exports = { createNewTeam, setupEiCTeams, @@ -175,4 +185,5 @@ module.exports = { removeTeamMember, getTeamMembersByCollection, getInviteData, + getTeamByGroupAndCollection, } diff --git a/packages/component-invite/src/helpers/helpers.js b/packages/component-invite/src/helpers/helpers.js index b575118780be1e6c3da1932adac332d543051a5b..2ec5f5f9f7d8ce52f0bba0f12417d8a3f9e09128 100644 --- a/packages/component-invite/src/helpers/helpers.js +++ b/packages/component-invite/src/helpers/helpers.js @@ -96,6 +96,7 @@ const createNewUser = async ( title, editorInChief: role === 'editorInChief', admin: role === 'admin', + handlingEditor: role === 'handlingEditor', } let newUser = new UserModel(userBody) try { diff --git a/packages/component-invite/src/routes/postInvite.js b/packages/component-invite/src/routes/postInvite.js index 6c8d4de3a92bccf49ad4f3a4a5de8335796dafb1..c0f7b4affe79e61ee1fad8c167cd40d784c67963 100644 --- a/packages/component-invite/src/routes/postInvite.js +++ b/packages/component-invite/src/routes/postInvite.js @@ -30,7 +30,7 @@ module.exports = models => async (req, res) => { const collectionId = get(req, 'params.collectionId') const url = `${req.protocol}://${req.get('host')}` - if (collectionId) { + if (collectionId) return require('../controllers/assignCollectionRole')( email, role, @@ -40,7 +40,6 @@ module.exports = models => async (req, res) => { models, url, ) - } if (reqUser.admin) return require('../controllers/inviteGlobalRole')( diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js index f8a4b92db911afe4af19cb34d7936ba798d620a6..db5c012a2ebd47b616d43852aa4f331dc292d490 100644 --- a/packages/xpub-faraday/config/default.js +++ b/packages/xpub-faraday/config/default.js @@ -48,10 +48,10 @@ module.exports = { url: process.env.PUBSWEET_INVITE_PASSWORD_RESET_URL || '/invite', }, roles: { - global: ['admin', 'editorInChief', 'author'], + global: ['admin', 'editorInChief', 'author', 'handlingEditor'], collection: ['handlingEditor', 'reviewer'], inviteRights: { - admin: ['admin', 'editorInChief', 'author'], + admin: ['admin', 'editorInChief', 'author', 'handlingEditor'], editorInChief: ['handlingEditor'], handlingEditor: ['reviewer'], }, diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js index 1ed3e06f9bc48bce828e3542295611e8f748b23e..550c6caa6c0ae14212271b1f57d95e431079363c 100644 --- a/packages/xpub-faraday/config/validations.js +++ b/packages/xpub-faraday/config/validations.js @@ -97,6 +97,7 @@ module.exports = { invitations: Joi.array(), teams: Joi.array(), editorInChief: Joi.boolean(), + handlingEditor: Joi.boolean(), }, team: { group: Joi.string(),