diff --git a/client/coral-admin/src/containers/Configure/StreamSettings.js b/client/coral-admin/src/containers/Configure/StreamSettings.js index 4725221ce..ab0ef6af6 100644 --- a/client/coral-admin/src/containers/Configure/StreamSettings.js +++ b/client/coral-admin/src/containers/Configure/StreamSettings.js @@ -37,6 +37,10 @@ const updateInfoBoxContent = (updateSettings) => (event) => { updateSettings({infoBoxContent}); }; +const updateAutoClose = (updateSettings, autoCloseStream) => () => { + updateSettings({autoCloseStream}); +}; + const updateClosedMessage = (updateSettings) => (event) => { const closedMessage = event.target.value; updateSettings({closedMessage}); @@ -131,6 +135,11 @@ const StreamSettings = ({updateSettings, settingsError, settings, errors}) => { +
+ +
{lang.t('configure.close-after')}
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js b/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js index e428f6a52..0606fdb81 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js @@ -1,15 +1,15 @@ -import React, { PropTypes } from 'react'; +import React, {PropTypes} from 'react'; import CommentCount from './CommentCount'; import styles from './styles.css'; -import { SelectField, Option } from 'react-mdl-selectfield'; +import {SelectField, Option} from 'react-mdl-selectfield'; import I18n from 'coral-framework/modules/i18n/i18n'; import translations from 'coral-admin/src/translations.json'; -import { Link } from 'react-router'; +import {Link} from 'react-router'; const lang = new I18n(translations); const ModerationMenu = ( - { asset, premodCount, rejectedCount, flaggedCount, selectSort, sort } + {asset, premodCount, rejectedCount, flaggedCount, selectSort, sort} ) => { const premodPath = asset ? `/admin/moderate/premod/${asset.id}` diff --git a/client/coral-plugin-history/Comment.js b/client/coral-plugin-history/Comment.js index 707939536..617d0a04f 100644 --- a/client/coral-plugin-history/Comment.js +++ b/client/coral-plugin-history/Comment.js @@ -1,5 +1,5 @@ -import React, { PropTypes } from 'react'; -import { Icon } from '../coral-ui'; +import React, {PropTypes} from 'react'; +import {Icon} from '../coral-ui'; import styles from './Comment.css'; import PubDate from '../coral-plugin-pubdate/PubDate'; import Content from '../coral-plugin-commentcontent/CommentContent'; diff --git a/models/setting.js b/models/setting.js index ac54584a4..e63fa8f3e 100644 --- a/models/setting.js +++ b/models/setting.js @@ -47,6 +47,10 @@ const SettingSchema = new Schema({ organizationName: { type: String }, + autoCloseStream: { + type: Boolean, + default: false + }, closedTimeout: { type: Number, diff --git a/services/assets.js b/services/assets.js index f8f795263..0aa4219da 100644 --- a/services/assets.js +++ b/services/assets.js @@ -57,11 +57,21 @@ module.exports = class AssetsService { static findOrCreateByUrl(url) { // Check the URL to confirm that is in the domain whitelist - return domainlist.urlCheck(url).then((whitelisted) => { + return Promise.all([ + domainlist.urlCheck(url), + SettingsService.retrieve() + ]).then(([whitelisted, settings]) => { + + const update = {$setOnInsert: {url}}; + + if (settings.autoCloseStream) { + update.$setOnInsert.closedAt = new Date(Date.now() + settings.closedTimeout * 1000); + } + if (!whitelisted) { return Promise.reject(errors.ErrInvalidAssetURL); } else { - return AssetModel.findOneAndUpdate({url}, {url}, { + return AssetModel.findOneAndUpdate({url}, update, { // Ensure that if it's new, we return the new object created. new: true,