Add a warning when demoting yourself from System Administrator from the team Manage Members menu

Этот коммит содержится в:
Tatsuya Niwa
2016-02-11 20:02:49 +09:00
родитель 00795908f6
Коммит ec34b85c43
3 изменённых файлов: 118 добавлений и 17 удалений

Просмотреть файл

@@ -5,8 +5,29 @@ import UserStore from '../stores/user_store.jsx';
import * as Client from '../utils/client.jsx'; import * as Client from '../utils/client.jsx';
import * as AsyncClient from '../utils/async_client.jsx'; import * as AsyncClient from '../utils/async_client.jsx';
import * as Utils from '../utils/utils.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 { export default class MemberListTeamItem extends React.Component {
constructor(props) { constructor(props) {
@@ -16,23 +37,35 @@ export default class MemberListTeamItem extends React.Component {
this.handleMakeActive = this.handleMakeActive.bind(this); this.handleMakeActive = this.handleMakeActive.bind(this);
this.handleMakeNotActive = this.handleMakeNotActive.bind(this); this.handleMakeNotActive = this.handleMakeNotActive.bind(this);
this.handleMakeAdmin = this.handleMakeAdmin.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() { handleMakeMember() {
const data = { const me = UserStore.getCurrentUser();
user_id: this.props.user.id, if (this.props.user.id === me.id) {
new_roles: '' this.handleDemote(this.props.user, '');
}; } else {
const data = {
Client.updateRoles(data, user_id: this.props.user.id,
() => { new_roles: ''
AsyncClient.getProfiles(); };
}, Client.updateRoles(data,
(err) => { () => {
this.setState({serverError: err.message}); AsyncClient.getProfiles();
} },
); (err) => {
this.setState({serverError: err.message});
}
);
}
} }
handleMakeActive() { handleMakeActive() {
Client.updateActive(this.props.user.id, true, Client.updateActive(this.props.user.id, true,
@@ -55,14 +88,55 @@ export default class MemberListTeamItem extends React.Component {
); );
} }
handleMakeAdmin() { 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 = { const data = {
user_id: this.props.user.id, user_id: this.props.user.id,
new_roles: 'admin' new_roles: this.state.role
}; };
Client.updateRoles(data, Client.updateRoles(data,
() => { () => {
AsyncClient.getProfiles(); const teamUrl = TeamStore.getCurrentTeamUrl();
if (teamUrl) {
window.location.href = teamUrl;
} else {
window.location.href = '/';
}
}, },
(err) => { (err) => {
this.setState({serverError: err.message}); this.setState({serverError: err.message});
@@ -198,6 +272,21 @@ export default class MemberListTeamItem extends React.Component {
</li> </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 ( return (
<tr> <tr>
@@ -231,6 +320,7 @@ export default class MemberListTeamItem extends React.Component {
{makeNotActive} {makeNotActive}
</ul> </ul>
</div> </div>
{makeDemoteModal}
{serverError} {serverError}
</td> </td>
</tr> </tr>
@@ -239,5 +329,8 @@ export default class MemberListTeamItem extends React.Component {
} }
MemberListTeamItem.propTypes = { MemberListTeamItem.propTypes = {
intl: intlShape.isRequired,
user: React.PropTypes.object.isRequired user: React.PropTypes.object.isRequired
}; };
export default injectIntl(MemberListTeamItem);

Просмотреть файл

@@ -691,6 +691,10 @@
"member_team_item.makeMember": "Make Member", "member_team_item.makeMember": "Make Member",
"member_team_item.makeActive": "Make Active", "member_team_item.makeActive": "Make Active",
"member_team_item.makeInactive": "Make Inactive", "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.join": "Join",
"more_channels.noMore": "No more channels to join", "more_channels.noMore": "No more channels to join",
"more_channels.createClick": "Click 'Create New Channel' to make a new one", "more_channels.createClick": "Click 'Create New Channel' to make a new one",

Просмотреть файл

@@ -755,6 +755,10 @@
"member_team_item.member": "Miembro", "member_team_item.member": "Miembro",
"member_team_item.systemAdmin": "Administrador de Sistema", "member_team_item.systemAdmin": "Administrador de Sistema",
"member_team_item.teamAdmin": "Admin de Equipo", "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.msg": "Mensaje",
"members_popover.title": "Miembros", "members_popover.title": "Miembros",
"more_channels.close": "Cerrar", "more_channels.close": "Cerrar",