summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorTatsuya Niwa <tty.niwa@gmail.com>2016-02-11 20:02:49 +0900
committerTatsuya Niwa <tty.niwa@gmail.com>2016-02-11 20:02:49 +0900
commitec34b85c4308b6ceab80f2f2735336e299e8ea3c (patch)
tree5ba65560ca5abd723dc0a8d01b264ffd9719a6a8 /web
parent00795908f62aa28d6717199cf727a4bbf22a105a (diff)
downloadchat-ec34b85c4308b6ceab80f2f2735336e299e8ea3c.tar.gz
chat-ec34b85c4308b6ceab80f2f2735336e299e8ea3c.tar.bz2
chat-ec34b85c4308b6ceab80f2f2735336e299e8ea3c.zip
Add a warning when demoting yourself from System Administrator from the team Manage Members menu
Diffstat (limited to 'web')
-rw-r--r--web/react/components/member_list_team_item.jsx127
-rw-r--r--web/static/i18n/en.json4
-rw-r--r--web/static/i18n/es.json4
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 {
</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);
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",