diff --git a/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js b/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js
index 8eb893a1f..5a81c6453 100644
--- a/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js
+++ b/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js
@@ -8,6 +8,7 @@ import { CheckboxField } from '../Fields';
import SubmitButton from '../SubmitButton';
import Button from '../../widgets/FlatButton';
import { RefreshIcon } from '../../icons';
+import { STANDALONE_ENVIRONMENTS } from '../../../helpers/exercise/environments';
class EditEnvironmentSimpleForm extends Component {
render() {
@@ -97,24 +98,32 @@ EditEnvironmentSimpleForm.propTypes = {
intl: intlShape.isRequired,
};
-const validate = formData => {
+const validate = (formData, { runtimeEnvironments }) => {
const errors = {};
const allowedEnvrionmentsCount = Object.values(formData).filter(value => value === true || value === 'true').length;
if (allowedEnvrionmentsCount === 0) {
- errors['_error'] = (
+ errors._error = (
);
- } else if (formData['data-linux'] && allowedEnvrionmentsCount > 1) {
- errors['_error'] = (
-
- );
+ } else if (allowedEnvrionmentsCount > 1) {
+ const standaloneEnvs = STANDALONE_ENVIRONMENTS.filter(envId => formData[envId]).map(envId => {
+ const env = runtimeEnvironments.find(({ id }) => id === envId);
+ return env && env.name;
+ });
+
+ if (standaloneEnvs.length > 0) {
+ errors._error = (
+
+ );
+ }
}
return errors;
};
diff --git a/src/helpers/exercise/environments.js b/src/helpers/exercise/environments.js
index 8e8734043..3b0189163 100644
--- a/src/helpers/exercise/environments.js
+++ b/src/helpers/exercise/environments.js
@@ -15,8 +15,15 @@ const SIMPLE_FORM_ENVIRONMENTS = [
'node-linux',
'php-linux',
'python3',
+ 'prolog',
];
+/**
+ * List of environments that must stand alone
+ * (exercise must be configured solely for this environment).
+ */
+export const STANDALONE_ENVIRONMENTS = ['data-linux', 'prolog'];
+
const SIMPLE_FORM_ENVIRONMENTS_INDEX = createIndex(SIMPLE_FORM_ENVIRONMENTS);
export const onlySimpleEnvironments = defaultMemoize(environments =>
diff --git a/src/locales/cs.json b/src/locales/cs.json
index a4a3d69c7..f047f1c44 100644
--- a/src/locales/cs.json
+++ b/src/locales/cs.json
@@ -223,8 +223,8 @@
"app.editEnvironmentSimpleForm.submit": "Uložit prostředí",
"app.editEnvironmentSimpleForm.submitting": "Ukládám...",
"app.editEnvironmentSimpleForm.success": "Konfigurace byla změněna.",
- "app.editEnvironmentSimpleForm.validation.dataOnlyCollision": "Běhové prostředí data-only (pouze data) není možné kombinovat s libovolným jiným běhovým prostředím.",
"app.editEnvironmentSimpleForm.validation.environments": "Přidejte prosím alespoň jedno běhové prostředí.",
+ "app.editEnvironmentSimpleForm.validation.standaloneEnvironmentsCollisions": "Některá vybraná běhová prostředí ({envs}) nemohou být kombinovaná s jinými. Odeberte tato běhová prostředí, nebo zajistěte, že bude vybrané právě jedno z nich.",
"app.editExercise.deleteExercise": "Smazat úlohu",
"app.editExercise.deleteExerciseWarning": "Smazání úlohy odstraní všechna studentská řešení a všechna zadání této úlohy.",
"app.editExercise.description": "Změna nastavení úlohy",
diff --git a/src/locales/en.json b/src/locales/en.json
index fb49976b1..ea4b41694 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -223,8 +223,8 @@
"app.editEnvironmentSimpleForm.submit": "Save Environments",
"app.editEnvironmentSimpleForm.submitting": "Saving Environments...",
"app.editEnvironmentSimpleForm.success": "Environments Saved.",
- "app.editEnvironmentSimpleForm.validation.dataOnlyCollision": "Data-Only environment cannot be combined with any other environment.",
"app.editEnvironmentSimpleForm.validation.environments": "Please add at least one runtime environment.",
+ "app.editEnvironmentSimpleForm.validation.standaloneEnvironmentsCollisions": "Some of the selected environments ({envs}) cannot be combined with any other environment. You need to deselect these environment(s) or make sure only one environment is selected.",
"app.editExercise.deleteExercise": "Delete the exercise",
"app.editExercise.deleteExerciseWarning": "Deleting an exercise will remove all the students submissions and all assignments.",
"app.editExercise.description": "Change exercise settings",
diff --git a/src/locales/whitelist_en.json b/src/locales/whitelist_en.json
index 31cffae49..9f3ff5e5e 100644
--- a/src/locales/whitelist_en.json
+++ b/src/locales/whitelist_en.json
@@ -223,8 +223,8 @@
"app.editEnvironmentSimpleForm.submit",
"app.editEnvironmentSimpleForm.submitting",
"app.editEnvironmentSimpleForm.success",
- "app.editEnvironmentSimpleForm.validation.dataOnlyCollision",
"app.editEnvironmentSimpleForm.validation.environments",
+ "app.editEnvironmentSimpleForm.validation.standaloneEnvironmentsCollisions",
"app.editExercise.deleteExercise",
"app.editExercise.deleteExerciseWarning",
"app.editExercise.description",