2015-10-08 12:27:09 -04:00
|
|
|
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
2015-09-23 12:49:28 -07:00
|
|
|
// See License.txt for license information.
|
|
|
|
|
|
2015-11-19 21:12:56 -05:00
|
|
|
import * as Client from '../../utils/client.jsx';
|
|
|
|
|
import * as Utils from '../../utils/utils.jsx';
|
2016-01-24 23:54:49 +09:00
|
|
|
import UserStore from '../../stores/user_store.jsx';
|
|
|
|
|
import DemoteOwnRoleModal from './demote_own_role_modal.jsx';
|
2015-09-23 12:49:28 -07:00
|
|
|
|
2016-01-27 15:49:26 -03:00
|
|
|
import {FormattedMessage} from 'mm-intl';
|
|
|
|
|
|
2015-09-23 12:49:28 -07:00
|
|
|
export default class UserItem 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);
|
2015-09-23 15:16:48 -07:00
|
|
|
this.handleMakeSystemAdmin = this.handleMakeSystemAdmin.bind(this);
|
2015-09-23 12:49:28 -07:00
|
|
|
this.handleResetPassword = this.handleResetPassword.bind(this);
|
2016-01-24 23:54:49 +09:00
|
|
|
this.doDemote = this.doDemote.bind(this);
|
|
|
|
|
this.doDemoteSubmit = this.doDemoteSubmit.bind(this);
|
|
|
|
|
this.doDemoteDismiss = this.doDemoteDismiss.bind(this);
|
2015-09-23 12:49:28 -07:00
|
|
|
|
2016-01-24 23:54:49 +09:00
|
|
|
this.state = {
|
|
|
|
|
serverError: null,
|
|
|
|
|
showDemoteModal: false,
|
|
|
|
|
user: null,
|
|
|
|
|
role: null
|
|
|
|
|
};
|
2015-09-23 12:49:28 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handleMakeMember(e) {
|
|
|
|
|
e.preventDefault();
|
2016-01-24 23:54:49 +09:00
|
|
|
var me = UserStore.getCurrentUser();
|
|
|
|
|
if (this.props.user.id === me.id) {
|
|
|
|
|
this.doDemote(this.props.user, '');
|
|
|
|
|
} else {
|
|
|
|
|
const data = {
|
|
|
|
|
user_id: this.props.user.id,
|
|
|
|
|
new_roles: ''
|
|
|
|
|
};
|
2015-09-23 12:49:28 -07:00
|
|
|
|
2016-01-24 23:54:49 +09:00
|
|
|
Client.updateRoles(data,
|
|
|
|
|
() => {
|
|
|
|
|
this.props.refreshProfiles();
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
this.setState({serverError: err.message});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
2015-09-23 12:49:28 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handleMakeActive(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
Client.updateActive(this.props.user.id, true,
|
|
|
|
|
() => {
|
|
|
|
|
this.props.refreshProfiles();
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
this.setState({serverError: err.message});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handleMakeNotActive(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
Client.updateActive(this.props.user.id, false,
|
|
|
|
|
() => {
|
|
|
|
|
this.props.refreshProfiles();
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
this.setState({serverError: err.message});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handleMakeAdmin(e) {
|
|
|
|
|
e.preventDefault();
|
2016-01-24 23:54:49 +09:00
|
|
|
var me = UserStore.getCurrentUser();
|
|
|
|
|
if (this.props.user.id === me.id) {
|
|
|
|
|
this.doDemote(this.props.user, 'admin');
|
|
|
|
|
} else {
|
|
|
|
|
const data = {
|
|
|
|
|
user_id: this.props.user.id,
|
|
|
|
|
new_roles: 'admin'
|
|
|
|
|
};
|
2015-09-23 12:49:28 -07:00
|
|
|
|
2016-01-24 23:54:49 +09:00
|
|
|
Client.updateRoles(data,
|
|
|
|
|
() => {
|
|
|
|
|
this.props.refreshProfiles();
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
this.setState({serverError: err.message});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
2015-09-23 12:49:28 -07:00
|
|
|
}
|
|
|
|
|
|
2015-09-23 15:16:48 -07:00
|
|
|
handleMakeSystemAdmin(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
const data = {
|
|
|
|
|
user_id: this.props.user.id,
|
|
|
|
|
new_roles: 'system_admin'
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Client.updateRoles(data,
|
|
|
|
|
() => {
|
|
|
|
|
this.props.refreshProfiles();
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
this.setState({serverError: err.message});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-23 12:49:28 -07:00
|
|
|
handleResetPassword(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
this.props.doPasswordReset(this.props.user);
|
|
|
|
|
}
|
|
|
|
|
|
2016-01-24 23:54:49 +09:00
|
|
|
doDemote(user, role) {
|
|
|
|
|
this.setState({
|
|
|
|
|
serverError: this.state.serverError,
|
|
|
|
|
showDemoteModal: true,
|
|
|
|
|
user,
|
|
|
|
|
role
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
doDemoteDismiss() {
|
|
|
|
|
this.setState({
|
|
|
|
|
serverError: this.state.serverError,
|
|
|
|
|
showDemoteModal: false,
|
|
|
|
|
user: null,
|
|
|
|
|
role: null
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
doDemoteSubmit() {
|
|
|
|
|
this.setState({
|
|
|
|
|
serverError: this.state.serverError,
|
|
|
|
|
showDemoteModal: false,
|
|
|
|
|
user: null,
|
|
|
|
|
role: null
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-23 12:49:28 -07:00
|
|
|
render() {
|
|
|
|
|
let serverError = null;
|
|
|
|
|
if (this.state.serverError) {
|
|
|
|
|
serverError = (
|
|
|
|
|
<div className='has-error'>
|
|
|
|
|
<label className='has-error control-label'>{this.state.serverError}</label>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const user = this.props.user;
|
2016-01-27 15:49:26 -03:00
|
|
|
let currentRoles = (
|
|
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.member'
|
|
|
|
|
defaultMessage='Member'
|
|
|
|
|
/>
|
|
|
|
|
);
|
2015-09-23 12:49:28 -07:00
|
|
|
if (user.roles.length > 0) {
|
2015-10-13 13:20:56 +03:00
|
|
|
if (Utils.isSystemAdmin(user.roles)) {
|
2016-01-27 15:49:26 -03:00
|
|
|
currentRoles = (
|
|
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.sysAdmin'
|
|
|
|
|
defaultMessage='System Admin'
|
|
|
|
|
/>
|
|
|
|
|
);
|
2015-10-13 13:20:56 +03:00
|
|
|
} else if (Utils.isAdmin(user.roles)) {
|
2016-01-27 15:49:26 -03:00
|
|
|
currentRoles = (
|
|
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.teamAdmin'
|
|
|
|
|
defaultMessage='Team Admin'
|
|
|
|
|
/>
|
|
|
|
|
);
|
2015-09-23 12:49:28 -07:00
|
|
|
} else {
|
|
|
|
|
currentRoles = user.roles.charAt(0).toUpperCase() + user.roles.slice(1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const email = user.email;
|
2015-09-23 15:16:48 -07:00
|
|
|
let showMakeMember = user.roles === 'admin' || user.roles === 'system_admin';
|
|
|
|
|
let showMakeAdmin = user.roles === '' || user.roles === 'system_admin';
|
|
|
|
|
let showMakeSystemAdmin = user.roles === '' || user.roles === 'admin';
|
2015-09-23 12:49:28 -07:00
|
|
|
let showMakeActive = false;
|
|
|
|
|
let showMakeNotActive = user.roles !== 'system_admin';
|
|
|
|
|
|
|
|
|
|
if (user.delete_at > 0) {
|
2016-01-27 15:49:26 -03:00
|
|
|
currentRoles = (
|
|
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.inactive'
|
|
|
|
|
defaultMessage='Inactive'
|
|
|
|
|
/>
|
|
|
|
|
);
|
2015-09-23 12:49:28 -07:00
|
|
|
showMakeMember = false;
|
|
|
|
|
showMakeAdmin = false;
|
2015-09-23 15:16:48 -07:00
|
|
|
showMakeSystemAdmin = false;
|
2015-09-23 12:49:28 -07:00
|
|
|
showMakeActive = true;
|
|
|
|
|
showMakeNotActive = false;
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-23 15:16:48 -07:00
|
|
|
let makeSystemAdmin = null;
|
|
|
|
|
if (showMakeSystemAdmin) {
|
|
|
|
|
makeSystemAdmin = (
|
|
|
|
|
<li role='presentation'>
|
|
|
|
|
<a
|
|
|
|
|
role='menuitem'
|
|
|
|
|
href='#'
|
|
|
|
|
onClick={this.handleMakeSystemAdmin}
|
|
|
|
|
>
|
2016-01-27 15:49:26 -03:00
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.makeSysAdmin'
|
|
|
|
|
defaultMessage='Make System Admin'
|
|
|
|
|
/>
|
2015-09-23 15:16:48 -07:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-23 12:49:28 -07:00
|
|
|
let makeAdmin = null;
|
|
|
|
|
if (showMakeAdmin) {
|
|
|
|
|
makeAdmin = (
|
|
|
|
|
<li role='presentation'>
|
|
|
|
|
<a
|
|
|
|
|
role='menuitem'
|
|
|
|
|
href='#'
|
|
|
|
|
onClick={this.handleMakeAdmin}
|
|
|
|
|
>
|
2016-01-27 15:49:26 -03:00
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.makeTeamAdmin'
|
|
|
|
|
defaultMessage='Make Team Admin'
|
|
|
|
|
/>
|
2015-09-23 12:49:28 -07:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let makeMember = null;
|
|
|
|
|
if (showMakeMember) {
|
|
|
|
|
makeMember = (
|
|
|
|
|
<li role='presentation'>
|
|
|
|
|
<a
|
|
|
|
|
role='menuitem'
|
|
|
|
|
href='#'
|
|
|
|
|
onClick={this.handleMakeMember}
|
|
|
|
|
>
|
2016-01-27 15:49:26 -03:00
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.makeMember'
|
|
|
|
|
defaultMessage='Make Member'
|
|
|
|
|
/>
|
2015-09-23 12:49:28 -07:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let makeActive = null;
|
|
|
|
|
if (showMakeActive) {
|
|
|
|
|
makeActive = (
|
|
|
|
|
<li role='presentation'>
|
|
|
|
|
<a
|
|
|
|
|
role='menuitem'
|
|
|
|
|
href='#'
|
|
|
|
|
onClick={this.handleMakeActive}
|
|
|
|
|
>
|
2016-01-27 15:49:26 -03:00
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.makeActive'
|
|
|
|
|
defaultMessage='Make Active'
|
|
|
|
|
/>
|
2015-09-23 12:49:28 -07:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let makeNotActive = null;
|
|
|
|
|
if (showMakeNotActive) {
|
|
|
|
|
makeNotActive = (
|
|
|
|
|
<li role='presentation'>
|
|
|
|
|
<a
|
|
|
|
|
role='menuitem'
|
|
|
|
|
href='#'
|
|
|
|
|
onClick={this.handleMakeNotActive}
|
|
|
|
|
>
|
2016-01-27 15:49:26 -03:00
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.makeInactive'
|
|
|
|
|
defaultMessage='Make Inactive'
|
|
|
|
|
/>
|
2015-09-23 12:49:28 -07:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
);
|
|
|
|
|
}
|
2016-01-24 23:54:49 +09:00
|
|
|
var me = UserStore.getCurrentUser();
|
|
|
|
|
let makeDemoteModal = null;
|
|
|
|
|
if (this.props.user.id === me.id) {
|
|
|
|
|
makeDemoteModal = (
|
|
|
|
|
<DemoteOwnRoleModal
|
|
|
|
|
user={this.state.user}
|
|
|
|
|
role={this.state.role}
|
|
|
|
|
show={this.state.showDemoteModal}
|
|
|
|
|
onModalSubmit={this.doDemoteSubmit}
|
|
|
|
|
onModalDismissed={this.doDemoteDismiss}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
}
|
2015-09-23 12:49:28 -07:00
|
|
|
|
|
|
|
|
return (
|
2015-11-05 21:43:41 +05:00
|
|
|
<tr>
|
|
|
|
|
<td className='row member-div'>
|
|
|
|
|
<img
|
|
|
|
|
className='post-profile-img pull-left'
|
|
|
|
|
src={`/api/v1/users/${user.id}/image?time=${user.update_at}&${Utils.getSessionIndex()}`}
|
|
|
|
|
height='36'
|
|
|
|
|
width='36'
|
|
|
|
|
/>
|
|
|
|
|
<span className='member-name'>{Utils.getDisplayName(user)}</span>
|
|
|
|
|
<span className='member-email'>{email}</span>
|
|
|
|
|
<div className='dropdown member-drop'>
|
|
|
|
|
<a
|
|
|
|
|
href='#'
|
|
|
|
|
className='dropdown-toggle theme'
|
|
|
|
|
type='button'
|
|
|
|
|
data-toggle='dropdown'
|
|
|
|
|
aria-expanded='true'
|
|
|
|
|
>
|
|
|
|
|
<span>{currentRoles} </span>
|
|
|
|
|
<span className='caret'></span>
|
|
|
|
|
</a>
|
|
|
|
|
<ul
|
|
|
|
|
className='dropdown-menu member-menu'
|
|
|
|
|
role='menu'
|
|
|
|
|
>
|
|
|
|
|
{makeAdmin}
|
|
|
|
|
{makeMember}
|
|
|
|
|
{makeActive}
|
|
|
|
|
{makeNotActive}
|
|
|
|
|
{makeSystemAdmin}
|
|
|
|
|
<li role='presentation'>
|
|
|
|
|
<a
|
|
|
|
|
role='menuitem'
|
|
|
|
|
href='#'
|
|
|
|
|
onClick={this.handleResetPassword}
|
|
|
|
|
>
|
2016-01-27 15:49:26 -03:00
|
|
|
<FormattedMessage
|
|
|
|
|
id='admin.user_item.resetPwd'
|
|
|
|
|
defaultMessage='Reset Password'
|
|
|
|
|
/>
|
2015-11-05 21:43:41 +05:00
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
2016-01-24 23:54:49 +09:00
|
|
|
{makeDemoteModal}
|
2015-11-05 21:43:41 +05:00
|
|
|
{serverError}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
2015-09-23 12:49:28 -07:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UserItem.propTypes = {
|
|
|
|
|
user: React.PropTypes.object.isRequired,
|
|
|
|
|
refreshProfiles: React.PropTypes.func.isRequired,
|
|
|
|
|
doPasswordReset: React.PropTypes.func.isRequired
|
|
|
|
|
};
|