From ec34b85c4308b6ceab80f2f2735336e299e8ea3c Mon Sep 17 00:00:00 2001 From: Tatsuya Niwa Date: Thu, 11 Feb 2016 20:02:49 +0900 Subject: Add a warning when demoting yourself from System Administrator from the team Manage Members menu --- web/react/components/member_list_team_item.jsx | 127 +++++++++++++++++++++---- web/static/i18n/en.json | 4 + web/static/i18n/es.json | 4 + 3 files changed, 118 insertions(+), 17 deletions(-) diff --git a/web/react/components/member_list_team_item.jsx b/web/react/components/member_list_team_item.jsx index 30086d1b2..7b1f6170d 100644 --- a/web/react/components/member_list_team_item.jsx +++ b/web/react/components/member_list_team_item.jsx @@ -5,8 +5,29 @@ import UserStore from '../stores/user_store.jsx'; import * as Client from '../utils/client.jsx'; import * as AsyncClient from '../utils/async_client.jsx'; import * as Utils from '../utils/utils.jsx'; +import ConfirmModal from './confirm_modal.jsx'; +import TeamStore from '../stores/team_store.jsx'; -import {FormattedMessage} from 'mm-intl'; +import {injectIntl, intlShape, defineMessages, FormattedMessage} from 'mm-intl'; + +var holders = defineMessages({ + confirmDemoteRoleTitle: { + id: 'member_team_item.confirmDemoteRoleTitle', + defaultMessage: 'Confirm demotion from System Admin role' + }, + confirmDemotion: { + id: 'member_team_item.confirmDemotion', + defaultMessage: 'Confirm Demotion' + }, + confirmDemoteDescription: { + id: 'member_team_item.confirmDemoteDescription', + defaultMessage: 'If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you\'ll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.' + }, + confirmDemotionCmd: { + id: 'member_team_item.confirmDemotionCmd', + defaultMessage: 'platform -assign_role -team_name="yourteam" -email="name@yourcompany.com" -role="system_admin"' + } +}); export default class MemberListTeamItem extends React.Component { constructor(props) { @@ -16,23 +37,35 @@ export default class MemberListTeamItem extends React.Component { this.handleMakeActive = this.handleMakeActive.bind(this); this.handleMakeNotActive = this.handleMakeNotActive.bind(this); this.handleMakeAdmin = this.handleMakeAdmin.bind(this); + this.handleDemote = this.handleDemote.bind(this); + this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this); + this.handleDemoteCancel = this.handleDemoteCancel.bind(this); - this.state = {}; + this.state = { + serverError: null, + showDemoteModal: false, + user: null, + role: null + }; } handleMakeMember() { - const data = { - user_id: this.props.user.id, - new_roles: '' - }; - - Client.updateRoles(data, - () => { - AsyncClient.getProfiles(); - }, - (err) => { - this.setState({serverError: err.message}); - } - ); + const me = UserStore.getCurrentUser(); + if (this.props.user.id === me.id) { + this.handleDemote(this.props.user, ''); + } else { + const data = { + user_id: this.props.user.id, + new_roles: '' + }; + Client.updateRoles(data, + () => { + AsyncClient.getProfiles(); + }, + (err) => { + this.setState({serverError: err.message}); + } + ); + } } handleMakeActive() { Client.updateActive(this.props.user.id, true, @@ -55,14 +88,55 @@ export default class MemberListTeamItem extends React.Component { ); } handleMakeAdmin() { + const me = UserStore.getCurrentUser(); + if (this.props.user.id === me.id) { + this.handleDemote(this.props.user, 'admin'); + } else { + const data = { + user_id: this.props.user.id, + new_roles: 'admin' + }; + + Client.updateRoles(data, + () => { + AsyncClient.getProfiles(); + }, + (err) => { + this.setState({serverError: err.message}); + } + ); + } + } + handleDemote(user, role) { + this.setState({ + serverError: this.state.serverError, + showDemoteModal: true, + user, + role + }); + } + handleDemoteCancel() { + this.setState({ + serverError: null, + showDemoteModal: false, + user: null, + role: null + }); + } + handleDemoteSubmit() { const data = { user_id: this.props.user.id, - new_roles: 'admin' + new_roles: this.state.role }; Client.updateRoles(data, () => { - AsyncClient.getProfiles(); + const teamUrl = TeamStore.getCurrentTeamUrl(); + if (teamUrl) { + window.location.href = teamUrl; + } else { + window.location.href = '/'; + } }, (err) => { this.setState({serverError: err.message}); @@ -198,6 +272,21 @@ export default class MemberListTeamItem extends React.Component { ); } + const me = UserStore.getCurrentUser(); + const {formatMessage} = this.props.intl; + let makeDemoteModal = null; + if (this.props.user.id === me.id) { + makeDemoteModal = ( + + ); + } return ( @@ -231,6 +320,7 @@ export default class MemberListTeamItem extends React.Component { {makeNotActive} + {makeDemoteModal} {serverError} @@ -239,5 +329,8 @@ export default class MemberListTeamItem extends React.Component { } MemberListTeamItem.propTypes = { + intl: intlShape.isRequired, user: React.PropTypes.object.isRequired }; + +export default injectIntl(MemberListTeamItem); diff --git a/web/static/i18n/en.json b/web/static/i18n/en.json index 2c091ca7d..17bd6b32c 100644 --- a/web/static/i18n/en.json +++ b/web/static/i18n/en.json @@ -691,6 +691,10 @@ "member_team_item.makeMember": "Make Member", "member_team_item.makeActive": "Make Active", "member_team_item.makeInactive": "Make Inactive", + "member_team_item.confirmDemoteRoleTitle": "Confirm demotion from System Admin role", + "member_team_item.confirmDemotion": "Confirm Demotion", + "member_team_item.confirmDemoteDescription": "If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.", + "member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"yourteam\" -email=\"name@yourcompany.com\" -role=\"system_admin\"", "more_channels.join": "Join", "more_channels.noMore": "No more channels to join", "more_channels.createClick": "Click 'Create New Channel' to make a new one", diff --git a/web/static/i18n/es.json b/web/static/i18n/es.json index c44545e67..f4bcdbf9c 100644 --- a/web/static/i18n/es.json +++ b/web/static/i18n/es.json @@ -755,6 +755,10 @@ "member_team_item.member": "Miembro", "member_team_item.systemAdmin": "Administrador de Sistema", "member_team_item.teamAdmin": "Admin de Equipo", + "member_team_item.confirmDemoteRoleTitle": "Confirm demotion from System Admin role", + "member_team_item.confirmDemotion": "Confirm Demotion", + "member_team_item.confirmDemoteDescription": "If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.", + "member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"yourteam\" -email=\"name@yourcompany.com\" -role=\"system_admin\"", "members_popover.msg": "Mensaje", "members_popover.title": "Miembros", "more_channels.close": "Cerrar", -- cgit v1.2.3-1-g7c22