Merge pull request #2146 from ttyniwa/feature/PLT-1908

PLT-1908 Add a warning when demoting yourself from System Administrator from the team Manage Members menu
This commit is contained in:
Corey Hulen
2016-02-14 07:55:45 -08:00
3 changed files with 118 additions and 17 deletions

View File

@@ -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 {
</li>
);
}
const me = UserStore.getCurrentUser();
const {formatMessage} = this.props.intl;
let makeDemoteModal = null;
if (this.props.user.id === me.id) {
makeDemoteModal = (
<ConfirmModal
show={this.state.showDemoteModal}
title={formatMessage(holders.confirmDemoteRoleTitle)}
message={[formatMessage(holders.confirmDemoteDescription), React.createElement('br'), React.createElement('br'), formatMessage(holders.confirmDemotionCmd), serverError]}
confirm_button={formatMessage(holders.confirmDemotion)}
onConfirm={this.handleDemoteSubmit}
onCancel={this.handleDemoteCancel}
/>
);
}
return (
<tr>
@@ -231,6 +320,7 @@ export default class MemberListTeamItem extends React.Component {
{makeNotActive}
</ul>
</div>
{makeDemoteModal}
{serverError}
</td>
</tr>
@@ -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);

View File

@@ -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",

View File

@@ -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.confirmDemoteDescription": "Si te degradas a ti mismo de la función de Administrador de Sistema y no hay otro usuario con privilegios de Administrador de Sistema, tendrás que volver a asignar un Administrador del Sistema accediendo al servidor de Mattermost a través de un terminal y ejecutar el siguiente comando.",
"member_team_item.confirmDemoteRoleTitle": "Confirmar el decenso del rol de Administrador de Sistema",
"member_team_item.confirmDemotion": "Confirmar decenso",
"member_team_item.confirmDemotionCmd": "platform -assign_role -team_name=\"tuequipo\" -email=\"nombre@tuempresa.com\" -role=\"system_admin\"",
"members_popover.msg": "Mensaje",
"members_popover.title": "Miembros",
"more_channels.close": "Cerrar",