* PLT-2697 Fixing team admins

* Fixing eslint error

* Fixing loc issues

* Fixing func

* Fixing func
Этот коммит содержится в:
Corey Hulen
2016-05-06 11:28:22 -07:00
коммит произвёл Christopher Speller
родитель 4f799b980f
Коммит 6c75662b82
30 изменённых файлов: 442 добавлений и 142 удалений

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

@@ -19,10 +19,12 @@ export default class UserList extends React.Component {
this.doPasswordReset = this.doPasswordReset.bind(this);
this.doPasswordResetDismiss = this.doPasswordResetDismiss.bind(this);
this.doPasswordResetSubmit = this.doPasswordResetSubmit.bind(this);
this.getTeamMemberForUser = this.getTeamMemberForUser.bind(this);
this.state = {
teamId: props.team.id,
users: null,
teamMembers: null,
serverError: null,
showPasswordModal: false,
user: null
@@ -38,6 +40,21 @@ export default class UserList extends React.Component {
}
getTeamProfiles(teamId) {
Client.getTeamMembers(
teamId,
(data) => {
this.setState({
teamMembers: data
});
},
(err) => {
this.setState({
teamMembers: null,
serverError: err.message
});
}
);
Client.getProfilesForTeam(
teamId,
(users) => {
@@ -110,6 +127,22 @@ export default class UserList extends React.Component {
});
}
getTeamMemberForUser(userId) {
if (this.state.teamMembers) {
for (const index in this.state.teamMembers) {
if (this.state.teamMembers.hasOwnProperty(index)) {
var teamMember = this.state.teamMembers[index];
if (teamMember.user_id === userId) {
return teamMember;
}
}
}
}
return null;
}
componentWillReceiveProps(newProps) {
this.getTeamProfiles(newProps.team.id);
}
@@ -120,7 +153,7 @@ export default class UserList extends React.Component {
serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
}
if (this.state.users == null) {
if (this.state.users == null || this.state.teamMembers == null) {
return (
<div className='wrapper--fixed'>
<h3>
@@ -139,10 +172,14 @@ export default class UserList extends React.Component {
}
var memberList = this.state.users.map((user) => {
var teamMember = this.getTeamMemberForUser(user.id);
return (
<UserItem
team={this.props.team}
key={'user_' + user.id}
user={user}
teamMember={teamMember}
refreshProfiles={this.getCurrentTeamProfiles}
doPasswordReset={this.doPasswordReset}
/>);

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

@@ -42,6 +42,7 @@ export default class UserItem extends React.Component {
this.handleDemote(this.props.user, '');
} else {
Client.updateRoles(
this.props.team.id,
this.props.user.id,
'',
() => {
@@ -85,6 +86,7 @@ export default class UserItem extends React.Component {
this.handleDemote(this.props.user, 'admin');
} else {
Client.updateRoles(
this.props.team.id,
this.props.user.id,
'admin',
() => {
@@ -101,6 +103,7 @@ export default class UserItem extends React.Component {
e.preventDefault();
Client.updateRoles(
this.props.team.id,
this.props.user.id,
'system_admin',
() => {
@@ -150,9 +153,12 @@ export default class UserItem extends React.Component {
handleDemoteSubmit() {
Client.updateRoles(
this.props.team.id,
this.props.user.id,
this.state.role,
() => {
this.props.refreshProfiles();
this.setState({
serverError: null,
showDemoteModal: false,
@@ -185,6 +191,7 @@ export default class UserItem extends React.Component {
);
}
const teamMember = this.props.teamMember;
const user = this.props.user;
let currentRoles = (
<FormattedMessage
@@ -192,32 +199,28 @@ export default class UserItem extends React.Component {
defaultMessage='Member'
/>
);
if (user.roles.length > 0) {
if (Utils.isSystemAdmin(user.roles)) {
currentRoles = (
<FormattedMessage
id='admin.user_item.sysAdmin'
defaultMessage='System Admin'
/>
);
} else if (Utils.isAdmin(user.roles)) {
currentRoles = (
<FormattedMessage
id='admin.user_item.teamAdmin'
defaultMessage='Team Admin'
/>
);
} else {
currentRoles = user.roles.charAt(0).toUpperCase() + user.roles.slice(1);
}
if (teamMember.roles.length > 0 && Utils.isAdmin(teamMember.roles)) {
currentRoles = (
<FormattedMessage
id='team_members_dropdown.teamAdmin'
defaultMessage='Team Admin'
/>
);
}
if (user.roles.length > 0 && Utils.isSystemAdmin(user.roles)) {
currentRoles = (
<FormattedMessage
id='team_members_dropdown.systemAdmin'
defaultMessage='System Admin'
/>
);
}
const email = user.email;
let showMakeMember = user.roles === 'admin' || user.roles === 'system_admin';
//let showMakeAdmin = user.roles === '' || user.roles === 'system_admin';
let showMakeAdmin = false;
let showMakeMember = teamMember.roles === 'admin' || user.roles === 'system_admin';
let showMakeAdmin = teamMember.roles === '' && user.roles !== 'system_admin';
let showMakeSystemAdmin = user.roles === '' || user.roles === 'admin';
let showMakeActive = false;
let showMakeNotActive = user.roles !== 'system_admin';
@@ -521,7 +524,9 @@ export default class UserItem extends React.Component {
}
UserItem.propTypes = {
team: React.PropTypes.object.isRequired,
user: React.PropTypes.object.isRequired,
teamMember: React.PropTypes.object.isRequired,
refreshProfiles: React.PropTypes.func.isRequired,
doPasswordReset: React.PropTypes.func.isRequired
};

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

@@ -494,7 +494,7 @@ export function formatAuditInfo(audit, formatMessage) {
if (actingUserInfo[0] === 'session_user') {
const actingUser = UserStore.getProfile(actingUserInfo[1]);
const user = UserStore.getCurrentUser();
if (user && actingUser && (Utils.isAdmin(user.roles) || Utils.isSystemAdmin(user.roles))) {
if (user && actingUser && (Utils.isSystemAdmin(user.roles))) {
auditDesc += formatMessage(holders.by, {username: actingUser.username});
} else if (user && actingUser) {
auditDesc += formatMessage(holders.byAdmin);

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

@@ -18,6 +18,7 @@ import ToggleModalButton from './toggle_modal_button.jsx';
import ChannelStore from 'stores/channel_store.jsx';
import UserStore from 'stores/user_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import SearchStore from 'stores/search_store.jsx';
import PreferenceStore from 'stores/preference_store.jsx';
@@ -181,7 +182,7 @@ export default class ChannelHeader extends React.Component {
);
let channelTitle = channel.display_name;
const currentId = this.state.currentUser.id;
const isAdmin = Utils.isAdmin(this.state.memberChannel.roles) || Utils.isAdmin(this.state.currentUser.roles);
const isAdmin = Utils.isAdmin(this.state.memberChannel.roles) || TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
const isDirect = (this.state.channel.type === 'D');
if (isDirect) {

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

@@ -452,7 +452,8 @@ export default class Navbar extends React.Component {
/>
</Popover>
);
isAdmin = Utils.isAdmin(this.state.member.roles);
isAdmin = Utils.isAdmin(this.state.member.roles) || TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
if (channel.type === 'O') {
channelTitle = channel.display_name;

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

@@ -7,6 +7,7 @@ import * as Utils from 'utils/utils.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
import AboutBuildModal from './about_build_modal.jsx';
import TeamMembersModal from './team_members_modal.jsx';
import ToggleModalButton from './toggle_modal_button.jsx';
@@ -79,8 +80,8 @@ export default class NavbarDropdown extends React.Component {
let integrationsLink = null;
if (currentUser != null) {
isAdmin = Utils.isAdmin(currentUser.roles);
isSystemAdmin = Utils.isSystemAdmin(currentUser.roles);
isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
isSystemAdmin = UserStore.isSystemAdminForCurrentUser();
inviteLink = (
<li>

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

@@ -5,6 +5,8 @@ import $ from 'jquery';
import * as Utils from 'utils/utils.jsx';
import TimeSince from './time_since.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
import Constants from 'utils/constants.jsx';
@@ -30,7 +32,7 @@ export default class PostInfo extends React.Component {
createDropdown() {
var post = this.props.post;
var isOwner = this.props.currentUser.id === post.user_id;
var isAdmin = Utils.isAdmin(this.props.currentUser.roles);
var isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
if (post.state === Constants.POST_FAILED || post.state === Constants.POST_LOADING || Utils.isPostEphemeral(post)) {
return '';

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

@@ -6,6 +6,8 @@ import FileAttachmentList from './file_attachment_list.jsx';
import PostStore from 'stores/post_store.jsx';
import ChannelStore from 'stores/channel_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx';
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
@@ -82,7 +84,7 @@ export default class RhsComment extends React.Component {
}
const isOwner = this.props.currentUser.id === post.user_id;
const isAdmin = Utils.isAdmin(this.props.currentUser.roles);
var isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
var dropdownContents = [];

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

@@ -4,6 +4,7 @@
import ChannelStore from 'stores/channel_store.jsx';
import UserProfile from './user_profile.jsx';
import UserStore from 'stores/user_store.jsx';
import TeamStore from 'stores/user_store.jsx';
import * as TextFormatting from 'utils/text_formatting.jsx';
import * as Utils from 'utils/utils.jsx';
import FileAttachmentList from './file_attachment_list.jsx';
@@ -39,7 +40,7 @@ export default class RhsRootPost extends React.Component {
const post = this.props.post;
const user = this.props.user;
var isOwner = this.props.currentUser.id === post.user_id;
var isAdmin = Utils.isAdmin(this.props.currentUser.roles);
var isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
var timestamp = UserStore.getProfile(post.user_id).update_at;
var channel = ChannelStore.get(post.channel_id);

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

@@ -7,6 +7,7 @@ import UserSettingsModal from './user_settings/user_settings_modal.jsx';
import AboutBuildModal from './about_build_modal.jsx';
import UserStore from 'stores/user_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import PreferenceStore from 'stores/preference_store.jsx';
import * as GlobalActions from 'action_creators/global_actions.jsx';
@@ -77,8 +78,8 @@ export default class SidebarRightMenu extends React.Component {
var isSystemAdmin = false;
if (currentUser != null) {
isAdmin = Utils.isAdmin(currentUser.roles);
isSystemAdmin = Utils.isSystemAdmin(currentUser.roles);
isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
isSystemAdmin = UserStore.isSystemAdminForCurrentUser();
inviteLink = (
<li>

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

@@ -39,9 +39,11 @@ export default class TeamMembersDropdown extends React.Component {
this.handleDemote(this.props.user, '');
} else {
Client.updateRoles(
this.props.teamMember.team_id,
this.props.user.id,
'',
() => {
AsyncClient.getTeamMembers(TeamStore.getCurrentId());
AsyncClient.getProfiles();
},
(err) => {
@@ -53,6 +55,7 @@ export default class TeamMembersDropdown extends React.Component {
handleMakeActive() {
Client.updateActive(this.props.user.id, true,
() => {
AsyncClient.getTeamMembers(TeamStore.getCurrentId());
AsyncClient.getProfiles();
AsyncClient.getChannelExtraInfo(ChannelStore.getCurrentId());
},
@@ -64,6 +67,7 @@ export default class TeamMembersDropdown extends React.Component {
handleMakeNotActive() {
Client.updateActive(this.props.user.id, false,
() => {
AsyncClient.getTeamMembers(TeamStore.getCurrentId());
AsyncClient.getProfiles();
AsyncClient.getChannelExtraInfo(ChannelStore.getCurrentId());
},
@@ -78,9 +82,11 @@ export default class TeamMembersDropdown extends React.Component {
this.handleDemote(this.props.user, 'admin');
} else {
Client.updateRoles(
this.props.teamMember.team_id,
this.props.user.id,
'admin',
() => {
AsyncClient.getTeamMembers(TeamStore.getCurrentId());
AsyncClient.getProfiles();
},
(err) => {
@@ -109,9 +115,13 @@ export default class TeamMembersDropdown extends React.Component {
}
handleDemoteSubmit() {
Client.updateRoles(
this.props.teamMember.team_id,
this.props.user.id,
this.state.newRole,
() => {
AsyncClient.getTeamMembers(TeamStore.getCurrentId());
AsyncClient.getProfiles();
const teamUrl = TeamStore.getCurrentTeamUrl();
if (teamUrl) {
browserHistory.push(teamUrl);
@@ -143,30 +153,26 @@ export default class TeamMembersDropdown extends React.Component {
/>
);
if (user.roles.length > 0) {
if (Utils.isSystemAdmin(user.roles)) {
currentRoles = (
<FormattedMessage
id='team_members_dropdown.systemAdmin'
defaultMessage='System Admin'
/>
);
} else if (Utils.isAdmin(user.roles)) {
currentRoles = (
<FormattedMessage
id='team_members_dropdown.teamAdmin'
defaultMessage='Team Admin'
/>
);
} else {
currentRoles = user.roles.charAt(0).toUpperCase() + user.roles.slice(1);
}
if (teamMember.roles.length > 0 && Utils.isAdmin(teamMember.roles)) {
currentRoles = (
<FormattedMessage
id='team_members_dropdown.teamAdmin'
defaultMessage='Team Admin'
/>
);
}
if (user.roles.length > 0 && Utils.isSystemAdmin(user.roles)) {
currentRoles = (
<FormattedMessage
id='team_members_dropdown.systemAdmin'
defaultMessage='System Admin'
/>
);
}
let showMakeMember = teamMember.roles === 'admin' || user.roles === 'system_admin';
//let showMakeAdmin = teamMember.roles === '' && user.roles !== 'system_admin';
let showMakeAdmin = false;
let showMakeAdmin = teamMember.roles === '' && user.roles !== 'system_admin';
let showMakeActive = false;
let showMakeNotActive = user.roles !== 'system_admin';
@@ -221,38 +227,38 @@ export default class TeamMembersDropdown extends React.Component {
let makeActive = null;
if (showMakeActive) {
makeActive = (
<li role='presentation'>
<a
role='menuitem'
href='#'
onClick={this.handleMakeActive}
>
<FormattedMessage
id='team_members_dropdown.makeActive'
defaultMessage='Make Active'
/>
</a>
</li>
);
// makeActive = (
// <li role='presentation'>
// <a
// role='menuitem'
// href='#'
// onClick={this.handleMakeActive}
// >
// <FormattedMessage
// id='team_members_dropdown.makeActive'
// defaultMessage='Make Active'
// />
// </a>
// </li>
// );
}
let makeNotActive = null;
if (showMakeNotActive) {
makeNotActive = (
<li role='presentation'>
<a
role='menuitem'
href='#'
onClick={this.handleMakeNotActive}
>
<FormattedMessage
id='team_members_dropdown.makeInactive'
defaultMessage='Make Inactive'
/>
</a>
</li>
);
// makeNotActive = (
// <li role='presentation'>
// <a
// role='menuitem'
// href='#'
// onClick={this.handleMakeNotActive}
// >
// <FormattedMessage
// id='team_members_dropdown.makeInactive'
// defaultMessage='Make Inactive'
// />
// </a>
// </li>
// );
}
const me = UserStore.getCurrentUser();
let makeDemoteModal = null;