diff --git a/src/components/Exercises/ReferenceSolutionsList/ReferenceSolutionsList.js b/src/components/Exercises/ReferenceSolutionsList/ReferenceSolutionsList.js
index 9d6788593..7494313da 100644
--- a/src/components/Exercises/ReferenceSolutionsList/ReferenceSolutionsList.js
+++ b/src/components/Exercises/ReferenceSolutionsList/ReferenceSolutionsList.js
@@ -36,10 +36,9 @@ const ReferenceSolutionsList = ({
.map(
({
id,
- uploadedAt,
description,
permissionHints,
- solution: { userId }
+ solution: { userId, createdAt }
}) =>
@@ -49,8 +48,8 @@ const ReferenceSolutionsList = ({
{description}
|
- {' '}
-
+ {' '}
+
|
diff --git a/src/components/Groups/ResultsTable/ResultsTableRow.js b/src/components/Groups/ResultsTable/ResultsTableRow.js
index 22f8387cc..d0be83bee 100644
--- a/src/components/Groups/ResultsTable/ResultsTableRow.js
+++ b/src/components/Groups/ResultsTable/ResultsTableRow.js
@@ -14,7 +14,10 @@ const ResultsTableRow = ({ userId, assignmentsIds, submissions }) => {
.filter(s => s !== null)
.filter(s => s.exerciseAssignmentId === assignmentId)[0];
const points =
- submission !== null
+ submission &&
+ submission !== null &&
+ submission.lastSubmission.evaluation &&
+ submission.lastSubmission.evaluation.points
? submission.lastSubmission.evaluation.points
: '-';
const bonusPoints =
diff --git a/src/components/forms/EditGroupForm/EditGroupForm.js b/src/components/forms/EditGroupForm/EditGroupForm.js
index 867d9f50a..938287880 100644
--- a/src/components/forms/EditGroupForm/EditGroupForm.js
+++ b/src/components/forms/EditGroupForm/EditGroupForm.js
@@ -227,15 +227,6 @@ const validate = ({ localizedTexts = [], threshold }) => {
/>
);
}
-
- if (!localizedTexts[i].description) {
- localeErrors['description'] = (
-
- );
- }
}
localizedTextsErrors[i] = localeErrors;
diff --git a/src/containers/SidebarContainer/SidebarContainer.js b/src/containers/SidebarContainer/SidebarContainer.js
index b537d72eb..72528347b 100644
--- a/src/containers/SidebarContainer/SidebarContainer.js
+++ b/src/containers/SidebarContainer/SidebarContainer.js
@@ -8,8 +8,8 @@ import {
} from '../../redux/selectors/groups';
import {
notificationsSelector,
- isSuperAdmin,
- isSupervisor
+ isSupervisor,
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
const mapStateToProps = state => {
@@ -17,7 +17,7 @@ const mapStateToProps = state => {
return {
instances: memberOfInstances(userId)(state),
studentOf: studentOfSelector(userId)(state),
- isAdmin: isSuperAdmin(userId)(state),
+ isAdmin: isLoggedAsSuperAdmin(state),
isSupervisor: isSupervisor(userId)(state),
supervisorOf: supervisorOfSelector(userId)(state),
notifications: notificationsSelector(state)
diff --git a/src/pages/Assignment/Assignment.js b/src/pages/Assignment/Assignment.js
index d25c00f06..6ba0ea88c 100644
--- a/src/pages/Assignment/Assignment.js
+++ b/src/pages/Assignment/Assignment.js
@@ -27,9 +27,9 @@ import { canSubmitSolution } from '../../redux/selectors/canSubmit';
import { isSubmitting } from '../../redux/selectors/submission';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';
import {
- isSuperAdmin,
isStudentOf,
- isSupervisorOf
+ isSupervisorOf,
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
import { runtimeEnvironmentSelector } from '../../redux/selectors/runtimeEnvironments';
@@ -356,7 +356,7 @@ export default withLinks(
),
userId,
loggedInUserId,
- isSuperAdmin: isSuperAdmin(loggedInUserId)(state),
+ isSuperAdmin: isLoggedAsSuperAdmin(state),
isStudentOf: groupId => isStudentOf(loggedInUserId, groupId)(state),
isSupervisorOf: groupId =>
isSupervisorOf(loggedInUserId, groupId)(state),
diff --git a/src/pages/Dashboard/Dashboard.js b/src/pages/Dashboard/Dashboard.js
index 167113ca7..984cf3c05 100644
--- a/src/pages/Dashboard/Dashboard.js
+++ b/src/pages/Dashboard/Dashboard.js
@@ -30,7 +30,7 @@ import {
supervisorOfGroupsIdsSelector,
isStudent,
isSupervisor,
- isSuperAdmin
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';
@@ -73,7 +73,7 @@ class Dashboard extends Component {
const state = getState();
const user = getJsData(getUser(userId)(state));
const groups = user.groups.studentOf.concat(user.groups.supervisorOf);
- const isAdmin = isSuperAdmin(userId)(state);
+ const isAdmin = isLoggedAsSuperAdmin(state);
return dispatch(fetchGroupsIfNeeded(...groups)).then(groups =>
Promise.all(
@@ -103,11 +103,11 @@ class Dashboard extends Component {
supervisor,
supervisorOf,
supervisorOfGroupsIds,
+ superadmin,
groupAssignments,
groupStatistics,
usersStatistics,
allGroups,
- isAdmin,
links: { GROUP_URI_FACTORY },
intl: { locale }
} = this.props;
@@ -265,8 +265,10 @@ class Dashboard extends Component {
}
}
- {(supervisor || isAdmin) &&
-
+ {(supervisor || superadmin) &&
+
{(...groups) =>
}
}
@@ -343,7 +345,6 @@ Dashboard.propTypes = {
groupStatistics: PropTypes.func.isRequired,
usersStatistics: PropTypes.func.isRequired,
allGroups: PropTypes.array,
- isAdmin: PropTypes.bool,
links: PropTypes.object,
intl: PropTypes.shape({ locale: PropTypes.string.isRequired }).isRequired
};
@@ -356,7 +357,7 @@ export default withLinks(
userId,
student: isStudent(userId)(state),
supervisor: isSupervisor(userId)(state),
- superadmin: isSuperAdmin(userId)(state),
+ superadmin: isLoggedAsSuperAdmin(state),
user: getUser(userId)(state),
studentOfGroupsIds: studentOfGroupsIdsSelector(userId)(state).toArray(),
studentOf: studentOfSelector(userId)(state).toArray(),
@@ -368,8 +369,7 @@ export default withLinks(
groupStatistics: groupId => createGroupsStatsSelector(groupId)(state),
usersStatistics: statistics =>
statistics.find(stat => stat.userId === userId) || {},
- allGroups: groupsSelector(state).toArray(),
- isAdmin: isSuperAdmin(userId)(state)
+ allGroups: groupsSelector(state).toArray()
};
},
(dispatch, { params }) => ({
diff --git a/src/pages/EditExerciseConfig/EditExerciseConfig.js b/src/pages/EditExerciseConfig/EditExerciseConfig.js
index d4ab3d3de..373e8b19a 100644
--- a/src/pages/EditExerciseConfig/EditExerciseConfig.js
+++ b/src/pages/EditExerciseConfig/EditExerciseConfig.js
@@ -11,7 +11,7 @@ import Box from '../../components/widgets/Box';
import ResourceRenderer from '../../components/helpers/ResourceRenderer';
import { LocalizedExerciseName } from '../../components/helpers/LocalizedNames';
-// import EditExerciseConfigForm from '../../components/forms/EditExerciseConfigForm/EditExerciseConfigForm';
+import EditExerciseConfigForm from '../../components/forms/EditExerciseConfigForm/EditExerciseConfigForm';
import EditEnvironmentConfigForm from '../../components/forms/EditEnvironmentConfigForm';
import EditScoreConfigForm from '../../components/forms/EditScoreConfigForm';
import EditSimpleLimitsBox from '../../components/Exercises/EditSimpleLimitsBox';
@@ -51,6 +51,7 @@ import { simpleLimitsSelector } from '../../redux/selectors/simpleLimits';
import withLinks from '../../hoc/withLinks';
import { getLocalizedName } from '../../helpers/getLocalizedData';
+import { isLoggedAsSuperAdmin } from '../../redux/selectors/users';
class EditExerciseConfig extends Component {
componentWillMount = () => this.props.loadAsync();
@@ -87,19 +88,20 @@ class EditExerciseConfig extends Component {
params: { exerciseId },
exercise,
editEnvironmentConfigs,
- // setConfig,
+ setConfig,
runtimeEnvironments,
environmentFormValues,
exerciseConfig,
exerciseEnvironmentConfig,
exerciseScoreConfig,
editEnvironmentSimpleLimits,
- // pipelines,
+ pipelines,
limits,
setHorizontally,
setVertically,
setAll,
editScoreConfig,
+ superadmin,
intl: { locale }
} = this.props;
@@ -200,13 +202,14 @@ class EditExerciseConfig extends Component {
>
{(config, ...runtimeEnvironments) =>
- {/* */}
+ {superadmin &&
+ }
- simpleLimitsSelector(exerciseId, runtimeEnvironmentId)(state)
+ simpleLimitsSelector(exerciseId, runtimeEnvironmentId)(state),
+ superadmin: isLoggedAsSuperAdmin(state)
};
},
(dispatch, { params: { exerciseId } }) => ({
diff --git a/src/pages/Exercises/Exercises.js b/src/pages/Exercises/Exercises.js
index b2ff3c38e..7f53e45fd 100644
--- a/src/pages/Exercises/Exercises.js
+++ b/src/pages/Exercises/Exercises.js
@@ -13,7 +13,10 @@ import PageContent from '../../components/layout/PageContent';
import Box from '../../components/widgets/Box';
import { AddIcon, EditIcon } from '../../components/icons';
import { fetchManyStatus } from '../../redux/selectors/exercises';
-import { canEditExercise, isSuperAdmin } from '../../redux/selectors/users';
+import {
+ canEditExercise,
+ isLoggedAsSuperAdmin
+} from '../../redux/selectors/users';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';
import {
fetchExercises,
@@ -201,7 +204,7 @@ export default withLinks(
const userId = loggedInUserIdSelector(state);
return {
fetchStatus: fetchManyStatus(state),
- isSuperAdmin: isSuperAdmin(userId)(state),
+ isSuperAdmin: isLoggedAsSuperAdmin(state),
isAuthorOfExercise: exerciseId =>
canEditExercise(userId, exerciseId)(state)
};
diff --git a/src/pages/Group/Group.js b/src/pages/Group/Group.js
index 94f671b29..cb4baece4 100644
--- a/src/pages/Group/Group.js
+++ b/src/pages/Group/Group.js
@@ -45,7 +45,7 @@ import {
isStudentOf,
isSupervisorOf,
isAdminOf,
- isSuperAdmin
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
import {
@@ -331,7 +331,7 @@ const mapStateToProps = (state, { params: { groupId } }) => {
isStudent: isStudentOf(userId, groupId)(state),
isSupervisor: isSupervisorOf(userId, groupId)(state),
isAdmin: isAdminOf(userId, groupId)(state),
- isSuperAdmin: isSuperAdmin(userId)(state)
+ isSuperAdmin: isLoggedAsSuperAdmin(state)
};
};
diff --git a/src/pages/Instance/Instance.js b/src/pages/Instance/Instance.js
index d1a888f02..f38a7e492 100644
--- a/src/pages/Instance/Instance.js
+++ b/src/pages/Instance/Instance.js
@@ -24,7 +24,7 @@ import { createGroup } from '../../redux/modules/groups';
import { fetchInstancePublicGroups } from '../../redux/modules/publicGroups';
import { publicGroupsSelectors } from '../../redux/selectors/publicGroups';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';
-import { isSuperAdmin } from '../../redux/selectors/users';
+import { isLoggedAsSuperAdmin } from '../../redux/selectors/users';
import withLinks from '../../hoc/withLinks';
@@ -152,7 +152,7 @@ export default withLinks(
instance: instanceSelector(state, instanceId),
groups: publicGroupsSelectors(state),
isAdmin: isAdminOfInstance(userId, instanceId)(state),
- isSuperAdmin: isSuperAdmin(userId)(state),
+ isSuperAdmin: isLoggedAsSuperAdmin(state),
formValues: getFormValues('editGroup')(state)
};
},
diff --git a/src/pages/Submission/Submission.js b/src/pages/Submission/Submission.js
index f2b325d47..b647febf2 100644
--- a/src/pages/Submission/Submission.js
+++ b/src/pages/Submission/Submission.js
@@ -23,7 +23,7 @@ import { getAssignment } from '../../redux/selectors/assignments';
import {
isSupervisorOf,
isAdminOf,
- isSuperAdmin
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';
import {
@@ -166,7 +166,7 @@ export default connect(
isSupervisorOrMore: groupId =>
isSupervisorOf(loggedInUserIdSelector(state), groupId)(state) ||
isAdminOf(loggedInUserIdSelector(state), groupId)(state) ||
- isSuperAdmin(loggedInUserIdSelector(state))(state),
+ isLoggedAsSuperAdmin(state),
evaluations: evaluationsForSubmissionSelector(submissionId)(state),
fetchStatus: fetchManyStatus(submissionId)(state)
}),
diff --git a/src/pages/User/User.js b/src/pages/User/User.js
index a691a169d..5c62d5e7b 100644
--- a/src/pages/User/User.js
+++ b/src/pages/User/User.js
@@ -25,7 +25,7 @@ import {
getUser,
studentOfGroupsIdsSelector,
isStudent,
- isSuperAdmin
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
import { getProfile } from '../../redux/selectors/publicProfiles';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';
@@ -275,7 +275,7 @@ export default withLinks(
connect(
(state, { params: { userId } }) => {
const loggedInUserId = loggedInUserIdSelector(state);
- const isSuperadmin = isSuperAdmin(loggedInUserId)(state);
+ const isSuperadmin = isLoggedAsSuperAdmin(state);
const studentOfArray = studentOfSelector2(userId)(state)
.toList()
diff --git a/src/pages/Users/Users.js b/src/pages/Users/Users.js
index f3b12d029..17eb8fe49 100644
--- a/src/pages/Users/Users.js
+++ b/src/pages/Users/Users.js
@@ -15,11 +15,10 @@ import Box from '../../components/widgets/Box';
import UsersList from '../../components/Users/UsersList';
import SearchContainer from '../../containers/SearchContainer';
import {
- isSuperAdmin,
fetchManyStatus,
- loggedInUserSelector
+ loggedInUserSelector,
+ isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
-import { loggedInUserIdSelector } from '../../redux/selectors/auth';
import { fetchAllUsers } from '../../redux/modules/users';
import { takeOver } from '../../redux/modules/auth';
import { searchPeople } from '../../redux/modules/search';
@@ -172,7 +171,7 @@ export default withLinks(
connect(
state => {
return {
- isSuperAdmin: isSuperAdmin(loggedInUserIdSelector(state))(state),
+ isSuperAdmin: isLoggedAsSuperAdmin(state),
fetchStatus: fetchManyStatus(state),
user: loggedInUserSelector(state)
};
diff --git a/src/redux/selectors/users.js b/src/redux/selectors/users.js
index df2f50f2d..5ebfe323b 100644
--- a/src/redux/selectors/users.js
+++ b/src/redux/selectors/users.js
@@ -59,9 +59,6 @@ export const isStudent = userId =>
export const isSupervisor = userId =>
createSelector(getRole(userId), role => role === 'supervisor');
-export const isSuperAdmin = userId =>
- createSelector(getRole(userId), role => role === 'superadmin');
-
export const getUserSettings = userId =>
createSelector(
getUser(userId),
@@ -73,6 +70,11 @@ export const loggedInUserSelector = createSelector(
(users, id) => users.get(id)
);
+export const isLoggedAsSuperAdmin = createSelector(
+ [usersSelector, loggedInUserIdSelector],
+ (users, id) => users.get(id).getIn(['data', 'role']) === 'superadmin'
+);
+
export const memberOfInstancesIdsSelector = userId =>
createSelector(
getUser(userId),
@@ -116,7 +118,7 @@ export const isSupervisorOf = (userId, groupId) =>
export const isAdminOf = (userId, groupId) =>
createSelector(
- [groupSelector(groupId), isSuperAdmin(userId)],
+ [groupSelector(groupId), isLoggedAsSuperAdmin],
(group, isSuperAdmin) =>
isSuperAdmin === true ||
(group &&
@@ -142,7 +144,7 @@ export const usersGroupsIds = userId =>
export const canEditExercise = (userId, exerciseId) =>
createSelector(
- [exerciseSelector(exerciseId), isSuperAdmin(userId)],
+ [exerciseSelector(exerciseId), isLoggedAsSuperAdmin],
(exercise, isSuperAdmin) =>
isSuperAdmin ||
(exercise &&
@@ -152,7 +154,7 @@ export const canEditExercise = (userId, exerciseId) =>
export const canEditPipeline = (userId, pipelineId) =>
createSelector(
- [pipelineSelector(pipelineId), isSuperAdmin(userId)],
+ [pipelineSelector(pipelineId), isLoggedAsSuperAdmin],
(pipeline, isSuperAdmin) =>
isSuperAdmin ||
(pipeline &&
|