Skip to content

Commit

Permalink
Merge branch 'master' into translations
Browse files Browse the repository at this point in the history
  • Loading branch information
gabelula authored Mar 24, 2017
2 parents 849be3d + 596b7f5 commit c51a4ff
Show file tree
Hide file tree
Showing 64 changed files with 495 additions and 1,743 deletions.
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ dump.rdb
*.cfg
.idea/
coverage/
.tags
.tags1
translations.txt

# remove plugin folders
plugins
Expand Down
15 changes: 0 additions & 15 deletions client/coral-admin/src/AppRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@ import Stories from 'containers/Stories/Stories';
import Configure from 'containers/Configure/Configure';
import LayoutContainer from 'containers/LayoutContainer';
import InstallContainer from 'containers/Install/InstallContainer';

import CommunityLayout from 'containers/Community/CommunityLayout';
import CommunityContainer from 'containers/Community/CommunityContainer';

import ModerationLayout from 'containers/ModerationQueue/ModerationLayout';
import ModerationContainer from 'containers/ModerationQueue/ModerationContainer';

import Dashboard from 'containers/Dashboard/Dashboard';

const routes = (
Expand All @@ -24,18 +21,6 @@ const routes = (
<Route path='stories' component={Stories} />
<Route path='dashboard' component={Dashboard} />

{/* Community Routes */}

<Route path='community' component={CommunityLayout}>
<Route path='flagged' components={CommunityContainer}>
<Route path=':id' components={CommunityContainer} />
</Route>
<Route path='people' components={CommunityContainer}>
<Route path=':id' components={CommunityContainer} />
</Route>
<IndexRedirect to='flagged' />
</Route>

{/* Moderation Routes */}

<Route path='moderate' component={ModerationLayout}>
Expand Down
29 changes: 8 additions & 21 deletions client/coral-admin/src/actions/community.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,28 @@ import {
SORT_UPDATE,
COMMENTERS_NEW_PAGE,
SET_ROLE,
SET_COMMENTER_STATUS,
SHOW_BANUSER_DIALOG,
HIDE_BANUSER_DIALOG,
SHOW_SUSPENDUSER_DIALOG,
HIDE_SUSPENDUSER_DIALOG
SET_COMMENTER_STATUS
} from '../constants/community';

import coralApi from '../../../coral-framework/helpers/response';

export const fetchAccounts = (query = {}) => dispatch => {

dispatch(requestFetchAccounts());
export const fetchCommenters = (query = {}) => dispatch => {
dispatch(requestFetchCommenters());
coralApi(`/users?${qs.stringify(query)}`)
.then(({result, page, count, limit, totalPages}) =>{
.then(({result, page, count, limit, totalPages}) =>
dispatch({
type: FETCH_COMMENTERS_SUCCESS,
accounts: result,
commenters: result,
page,
count,
limit,
totalPages
});
})
})
)
.catch(error => dispatch({type: FETCH_COMMENTERS_FAILURE, error}));
};

const requestFetchAccounts = () => ({
const requestFetchCommenters = () => ({
type: FETCH_COMMENTERS_REQUEST
});

Expand All @@ -60,11 +55,3 @@ export const setCommenterStatus = (id, status) => (dispatch) => {
return dispatch({type: SET_COMMENTER_STATUS, id, status});
});
};

// Ban User Dialog
export const showBanUserDialog = (user) => ({type: SHOW_BANUSER_DIALOG, user});
export const hideBanUserDialog = () => ({type: HIDE_BANUSER_DIALOG});

// Suspend User Dialog
export const showSuspendUserDialog = (user) => ({type: SHOW_SUSPENDUSER_DIALOG, user});
export const hideSuspendUserDialog = () => ({type: HIDE_SUSPENDUSER_DIALOG});
1 change: 1 addition & 0 deletions client/coral-admin/src/components/Modal.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

import React from 'react';
import {Button, Icon} from 'react-mdl';
import styles from './Modal.css';
Expand Down
106 changes: 106 additions & 0 deletions client/coral-admin/src/components/SuspendUserModal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import I18n from 'coral-framework/modules/i18n/i18n';
import translations from '../translations.json';
import React, {Component, PropTypes} from 'react';
import Modal from 'components/Modal';
import styles from './SuspendUserModal.css';
import {Button} from 'coral-ui';

const stages = [
{
title: 'suspenduser.title_0',
description: 'suspenduser.description_0',
options: {
'j': 'suspenduser.no_cancel',
'k': 'suspenduser.yes_suspend'
}
},
{
title: 'suspenduser.title_1',
description: 'suspenduser.description_1',
options: {
'j': 'bandialog.cancel',
'k': 'suspenduser.send'
}
}
];

class SuspendUserModal extends Component {

state = {email: '', stage: 0}

static propTypes = {
stage: PropTypes.number,
actionType: PropTypes.string,
onClose: PropTypes.func.isRequired,
suspendUser: PropTypes.func.isRequired
}

componentDidMount() {
const about = lang.t('suspenduser.username');
this.setState({email: lang.t('suspenduser.email', about)});
}

/*
* When an admin clicks to suspend a user a dialog is shown, this function
* handles the possible actions for that dialog.
*/
onActionClick = (stage, menuOption) => () => {
const {suspendUser, action} = this.props;
const {stage, email} = this.state;
const cancel = this.props.onClose;
const next = () => this.setState({stage: stage + 1});
const suspend = () => suspendUser(action.item_id, lang.t('suspenduser.email_subject'), email)
.then(this.props.onClose);
const suspendModalActions = [
[ cancel, next ],
[ cancel, suspend ]
];
return suspendModalActions[stage][menuOption]();
}

onEmailChange = (e) => this.setState({email: e.target.value})

render () {
const {action, onClose} = this.props;

if (!action) {
return null;
}

const {stage} = this.state;
const actionType = action.actionType;
const about = actionType === 'flag_bio' ? lang.t('suspenduser.bio') : lang.t('suspenduser.username');
return <Modal open={true} onClose={onClose}>
<div className={styles.title}>{lang.t(stages[stage].title, about)}</div>
<div className={styles.container}>
<div className={styles.description}>
{lang.t(stages[stage].description, about)}
</div>
{
stage === 1 &&
<div className={styles.writeContainer}>
<div className={styles.emailMessage}>{lang.t('suspenduser.write_message')}</div>
<div className={styles.emailContainer}>
<textarea
rows={5}
className={styles.emailInput}
value={this.state.email}
onChange={this.onEmailChange}/>
</div>
</div>
}
<div className={styles.modalButtons}>
{Object.keys(stages[stage].options).map((key, i) => (
<Button key={i} onClick={this.onActionClick(stage, i)}>
{lang.t(stages[stage].options[key], about)}
</Button>
))}
</div>
</div>
</Modal>;
}
}

export default SuspendUserModal;

const lang = new I18n(translations);
50 changes: 50 additions & 0 deletions client/coral-admin/src/components/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import React from 'react';
import styles from './ModerationList.css';

import I18n from 'coral-framework/modules/i18n/i18n';
import translations from '../translations.json';

import {Icon} from 'react-mdl';
import ActionButton from './ActionButton';

// Render a single comment for the list
const User = props => {
const {action, user} = props;
let userStatus = user.status;

// Do not display unless the user status is 'pending' or 'banned'.
// This means that they have already been reviewed and approved.
return (userStatus === 'PENDING' || userStatus === 'BANNED') &&
<li tabIndex={props.index} className={`mdl-card mdl-shadow--2dp ${styles.listItem} ${props.isActive && !props.hideActive ? styles.activeItem : ''}`}>
<div className={styles.itemHeader}>
<div className={styles.author}>
<span>{user.username}</span>
</div>
<div className={styles.sideActions}>
<div className={`actions ${styles.actions}`}>
{props.modActions.map(
(action, i) =>
<ActionButton
type={action.toUpperCase()}
key={i}
user={user}
menuOptionsMap={props.menuOptionsMap}
onClickAction={props.onClickAction}
onClickShowBanDialog={props.onClickShowBanDialog}/>
)}
</div>
</div>
<div>
{userStatus === 'banned' ?
<span className={styles.banned}><Icon name='error_outline'/> {lang.t('comment.banned_user')}</span> : null}
</div>
</div>
<div className={styles.flagCount}>
{`${action.count} ${action.action_type === 'flag_bio' ? lang.t('user.bio_flags') : lang.t('user.username_flags')}`}
</div>
</li>;
};

export default User;

const lang = new I18n(translations);
6 changes: 5 additions & 1 deletion client/coral-admin/src/components/ui/Header.css
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,12 @@
background-color: transparent;
transition: background-color 200ms;

&:hover {
background-color: #232323;
}

&.active {
background-color: #232323;
background-color: #232323;
}
}

Expand Down
1 change: 1 addition & 0 deletions client/coral-admin/src/constants/comments.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export const SHOW_BANUSER_DIALOG = 'SHOW_BANUSER_DIALOG';
export const HIDE_BANUSER_DIALOG = 'HIDE_BANUSER_DIALOG';
export const USERS_MODERATION_QUEUE_FETCH_SUCCESS = 'USERS_MODERATION_QUEUE_FETCH_SUCCESS';
export const COMMENTS_MODERATION_QUEUE_FETCH_REQUEST = 'COMMENTS_MODERATION_QUEUE_FETCH_REQUEST';
export const COMMENTS_MODERATION_QUEUE_FETCH_SUCCESS = 'COMMENTS_MODERATION_QUEUE_FETCH_SUCCESS';
export const COMMENT_CREATE_SUCCESS = 'COMMENT_CREATE_SUCCESS';
Expand Down
10 changes: 0 additions & 10 deletions client/coral-admin/src/constants/community.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,3 @@ export const SORT_UPDATE = 'SORT_UPDATE';
export const COMMENTERS_NEW_PAGE = 'COMMENTERS_NEW_PAGE';
export const SET_ROLE = 'SET_ROLE';
export const SET_COMMENTER_STATUS = 'SET_COMMENTER_STATUS';

export const FETCH_FLAGGED_COMMENTERS_REQUEST = 'FETCH_FLAGGED_COMMENTERS_REQUEST';
export const FETCH_FLAGGED_COMMENTERS_SUCCESS = 'FETCH_FLAGGED_COMMENTERS_SUCCESS';
export const FETCH_FLAGGED_COMMENTERS_FAILURE = 'FETCH_FLAGGED_COMMENTERS_FAILURE';

export const SHOW_BANUSER_DIALOG = 'SHOW_BANUSER_DIALOG';
export const HIDE_BANUSER_DIALOG = 'HIDE_BANUSER_DIALOG';

export const SHOW_SUSPENDUSER_DIALOG = 'SHOW_SUSPENDUSER_DIALOG';
export const HIDE_SUSPENDUSER_DIALOG = 'HIDE_SUSPENDUSER_DIALOG';
1 change: 1 addition & 0 deletions client/coral-admin/src/constants/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ export const UPDATE_STATUS_SUCCESS = 'UPDATE_STATUS_SUCCESS';
export const UPDATE_STATUS_FAILURE = 'UPDATE_STATUS_FAILURE';
export const USER_EMAIL_FAILURE = 'USER_EMAIL_FAILURE';
export const USERNAME_ENABLE_FAILURE = 'USERNAME_ENABLE_FAILURE';
export const USERS_MODERATION_QUEUE_FETCH_SUCCESS = 'USERS_MODERATION_QUEUE_FETCH_SUCCESS';
Loading

0 comments on commit c51a4ff

Please sign in to comment.