// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import ConfirmModal from '../confirm_modal.jsx'; import UserStore from 'stores/user_store.jsx'; import TeamStore from 'stores/team_store.jsx'; import Client from 'client/web_client.jsx'; import Constants from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; import * as AsyncClient from 'utils/async_client.jsx'; import {updateUserRoles, updateActive} from 'actions/user_actions.jsx'; import {updateTeamMemberRoles} from 'actions/team_actions.jsx'; import {FormattedMessage} from 'react-intl'; import React from 'react'; export default class AdminTeamMembersDropdown extends React.Component { constructor(props) { super(props); this.handleMakeMember = this.handleMakeMember.bind(this); this.handleRemoveFromTeam = this.handleRemoveFromTeam.bind(this); this.handleMakeActive = this.handleMakeActive.bind(this); this.handleMakeNotActive = this.handleMakeNotActive.bind(this); this.handleMakeTeamAdmin = this.handleMakeTeamAdmin.bind(this); this.handleMakeSystemAdmin = this.handleMakeSystemAdmin.bind(this); this.handleResetPassword = this.handleResetPassword.bind(this); this.handleResetMfa = this.handleResetMfa.bind(this); this.handleDemoteSystemAdmin = this.handleDemoteSystemAdmin.bind(this); this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this); this.handleDemoteCancel = this.handleDemoteCancel.bind(this); this.doMakeMember = this.doMakeMember.bind(this); this.doMakeTeamAdmin = this.doMakeTeamAdmin.bind(this); this.state = { serverError: null, showDemoteModal: false, user: null, role: null }; } doMakeMember() { updateUserRoles( this.props.user.id, 'system_user', null, (err) => { this.setState({serverError: err.message}); } ); updateTeamMemberRoles( this.props.teamMember.team_id, this.props.user.id, 'team_user', null, (err) => { this.setState({serverError: err.message}); } ); } handleMakeMember(e) { e.preventDefault(); const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemoteSystemAdmin(this.props.user, 'member'); } else { this.doMakeMember(); } } handleRemoveFromTeam() { Client.removeUserFromTeam( this.props.teamMember.team_id, this.props.user.id, () => { AsyncClient.getTeamStats(this.props.teamMember.team_id); UserStore.removeProfileFromTeam(this.props.teamMember.team_id, this.props.user.id); UserStore.emitInTeamChange(); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeActive(e) { e.preventDefault(); updateActive(this.props.user.id, true, null, (err) => { this.setState({serverError: err.message}); } ); } handleMakeNotActive(e) { e.preventDefault(); updateActive(this.props.user.id, false, null, (err) => { this.setState({serverError: err.message}); } ); } doMakeTeamAdmin() { updateTeamMemberRoles( this.props.teamMember.team_id, this.props.user.id, 'team_user team_admin', null, (err) => { this.setState({serverError: err.message}); } ); } handleMakeTeamAdmin(e) { e.preventDefault(); const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemoteSystemAdmin(this.props.user, 'teamadmin'); } else { this.doMakeTeamAdmin(); } } handleMakeSystemAdmin(e) { e.preventDefault(); updateUserRoles( this.props.user.id, 'system_user system_admin', null, (err) => { this.setState({serverError: err.message}); } ); } handleResetPassword(e) { e.preventDefault(); this.props.doPasswordReset(this.props.user); } handleResetMfa(e) { e.preventDefault(); Client.adminResetMfa(this.props.user.id, () => { AsyncClient.getUser(this.props.user.id); }, (err) => { this.setState({serverError: err.message}); } ); } handleDemoteSystemAdmin(user, role) { this.setState({ serverError: this.state.serverError, showDemoteModal: true, user, role }); } handleDemoteCancel() { this.setState({ serverError: null, showDemoteModal: false, user: null, role: null }); } handleDemoteSubmit() { if (this.state.role === 'member') { this.doMakeMember(); } else { this.doMakeTeamAdmin(); } const teamUrl = TeamStore.getCurrentTeamUrl(); if (teamUrl) { // the channel is added to the URL cause endless loading not being fully fixed window.location.href = teamUrl + '/channels/town-square'; } else { window.location.href = '/'; } } render() { let serverError = null; if (this.state.serverError) { serverError = (