// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import UserStore from '../stores/user_store.jsx'; import ChannelStore from '../stores/channel_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 {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) { super(props); this.handleMakeMember = this.handleMakeMember.bind(this); 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 = { serverError: null, showDemoteModal: false, user: null, role: null }; } handleMakeMember() { 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, () => { AsyncClient.getProfiles(); AsyncClient.getChannelExtraInfo(ChannelStore.getCurrentId()); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeNotActive() { Client.updateActive(this.props.user.id, false, () => { AsyncClient.getProfiles(); AsyncClient.getChannelExtraInfo(ChannelStore.getCurrentId()); }, (err) => { this.setState({serverError: err.message}); } ); } 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: this.state.role }; Client.updateRoles(data, () => { const teamUrl = TeamStore.getCurrentTeamUrl(); if (teamUrl) { window.location.href = teamUrl; } else { window.location.href = '/'; } }, (err) => { this.setState({serverError: err.message}); } ); } render() { let serverError = null; if (this.state.serverError) { serverError = (
); } const user = this.props.user; let currentRoles = ( ); const timestamp = UserStore.getCurrentUser().update_at; if (user.roles.length > 0) { if (Utils.isSystemAdmin(user.roles)) { currentRoles = ( ); } else if (Utils.isAdmin(user.roles)) { currentRoles = ( ); } else { currentRoles = user.roles.charAt(0).toUpperCase() + user.roles.slice(1); } } const email = user.email; let showMakeMember = user.roles === 'admin' || user.roles === 'system_admin'; let showMakeAdmin = user.roles === '' || user.roles === 'system_admin'; let showMakeActive = false; let showMakeNotActive = user.roles !== 'system_admin'; if (user.delete_at > 0) { currentRoles = ( ); showMakeMember = false; showMakeAdmin = false; showMakeActive = true; showMakeNotActive = false; } let makeAdmin = null; if (showMakeAdmin) { makeAdmin = (
  • ); } let makeMember = null; if (showMakeMember) { makeMember = (
  • ); } let makeActive = null; if (showMakeActive) { makeActive = (
  • ); } let makeNotActive = null; if (showMakeNotActive) { makeNotActive = (
  • ); } const me = UserStore.getCurrentUser(); const {formatMessage} = this.props.intl; let makeDemoteModal = null; if (this.props.user.id === me.id) { makeDemoteModal = ( ); } return ( {Utils.displayUsername(user.id)} {email}
    {currentRoles}
      {makeAdmin} {makeMember} {makeActive} {makeNotActive}
    {makeDemoteModal} {serverError} ); } } MemberListTeamItem.propTypes = { intl: intlShape.isRequired, user: React.PropTypes.object.isRequired }; export default injectIntl(MemberListTeamItem);