Skip to content

Commit

Permalink
Admin of a group can edit assignments
Browse files Browse the repository at this point in the history
  • Loading branch information
SemaiCZE committed Feb 9, 2018
1 parent fd305c6 commit 66eb71d
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 37 deletions.
40 changes: 22 additions & 18 deletions src/pages/Assignment/Assignment.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import { loggedInUserIdSelector } from '../../redux/selectors/auth';
import {
isStudentOf,
isSupervisorOf,
isLoggedAsSuperAdmin
isAdminOf
} from '../../redux/selectors/users';

import Page from '../../components/layout/Page';
Expand Down Expand Up @@ -91,9 +91,9 @@ class Assignment extends Component {
userId,
loggedInUserId,
init,
isSuperAdmin,
isStudentOf,
isSupervisorOf,
isAdminOf,
canSubmit,
runtimeEnvironments,
exerciseSync,
Expand Down Expand Up @@ -129,17 +129,19 @@ class Assignment extends Component {
{
resource: assignment,
iconName: 'puzzle-piece',
breadcrumb: assignment => (
{
text: (
<FormattedMessage
id="app.exercise.title"
defaultMessage="Exercise"
/>
),
link: ({ EXERCISE_URI_FACTORY }) =>
(isSuperAdmin || isSupervisorOf(assignment.groupId)) ? EXERCISE_URI_FACTORY(assignment.exerciseId) : '#'
})
breadcrumb: assignment => ({
text: (
<FormattedMessage
id="app.exercise.title"
defaultMessage="Exercise"
/>
),
link: ({ EXERCISE_URI_FACTORY }) =>
isAdminOf(assignment.groupId) ||
isSupervisorOf(assignment.groupId)
? EXERCISE_URI_FACTORY(assignment.exerciseId)
: '#'
})
},
{
text: (
Expand All @@ -161,7 +163,8 @@ class Assignment extends Component {
<p>
<UsersNameContainer userId={userId} />
</p>}
{(isSuperAdmin || isSupervisorOf(assignment.groupId)) &&
{(isSupervisorOf(assignment.groupId) ||
isAdminOf(assignment.groupId)) && // includes superadmin
<p>
<LinkContainer
to={ASSIGNMENT_EDIT_URI_FACTORY(assignment.id)}
Expand Down Expand Up @@ -191,7 +194,8 @@ class Assignment extends Component {
</p>}
</Col>
</Row>
{(isSuperAdmin || isSupervisorOf(assignment.groupId)) &&
{(isSupervisorOf(assignment.groupId) ||
isAdminOf(assignment.groupId)) && // includes superadmin
<AssignmentSync
syncInfo={assignment.exerciseSynchronizationInfo}
exerciseSync={exerciseSync}
Expand Down Expand Up @@ -246,7 +250,7 @@ class Assignment extends Component {

{(isStudentOf(assignment.groupId) ||
isSupervisorOf(assignment.groupId) ||
isSuperAdmin) &&
isAdminOf(assignment.groupId)) && // includes superadmin
<SubmissionsTable
title={
<FormattedMessage
Expand Down Expand Up @@ -275,9 +279,9 @@ Assignment.propTypes = {
params: PropTypes.shape({
assignmentId: PropTypes.string.isRequired
}),
isSuperAdmin: PropTypes.bool,
isStudentOf: PropTypes.func.isRequired,
isSupervisorOf: PropTypes.func.isRequired,
isAdminOf: PropTypes.func.isRequired,
assignment: PropTypes.object,
canSubmit: ImmutablePropTypes.map,
submitting: PropTypes.bool.isRequired,
Expand All @@ -302,10 +306,10 @@ export default withLinks(
),
userId,
loggedInUserId,
isSuperAdmin: isLoggedAsSuperAdmin(state),
isStudentOf: groupId => isStudentOf(loggedInUserId, groupId)(state),
isSupervisorOf: groupId =>
isSupervisorOf(loggedInUserId, groupId)(state),
isAdminOf: groupId => isAdminOf(loggedInUserId, groupId)(state),
canSubmit: canSubmitSolution(assignmentId)(state),
submissions: getUserSubmissions(userId, assignmentId)(state)
};
Expand Down
43 changes: 24 additions & 19 deletions src/pages/EditAssignment/EditAssignment.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,14 @@ import { getAssignment } from '../../redux/selectors/assignments';
import { canSubmitSolution } from '../../redux/selectors/canSubmit';
import { runtimeEnvironmentsSelector } from '../../redux/selectors/runtimeEnvironments';
import { isSubmitting } from '../../redux/selectors/submission';
import {
isSupervisorOf,
isLoggedAsSuperAdmin
} from '../../redux/selectors/users';
import { isSupervisorOf, isAdminOf } from '../../redux/selectors/users';
import { fetchRuntimeEnvironments } from '../../redux/modules/runtimeEnvironments';
import { isReady, getJsData } from '../../redux/helpers/resourceManager';
import { ResubmitAllSolutionsContainer } from '../../containers/ResubmitSolutionContainer';
import AssignmentSync from '../../components/Assignments/Assignment/AssignmentSync';

import withLinks from '../../hoc/withLinks';
import { loggedInUserIdSelector } from '../../redux/selectors/auth';

class EditAssignment extends Component {
componentWillMount = () => this.props.loadAsync();
Expand All @@ -62,25 +60,26 @@ class EditAssignment extends Component {
pointsPercentualThreshold,
...rest
}) => ({
firstDeadline: moment.unix(firstDeadline),
secondDeadline: moment.unix(secondDeadline),
pointsPercentualThreshold: pointsPercentualThreshold * 100,
...rest
});
firstDeadline: moment.unix(firstDeadline),
secondDeadline: moment.unix(secondDeadline),
pointsPercentualThreshold: pointsPercentualThreshold * 100,
...rest
});

render() {
const {
links: {
ASSIGNMENT_DETAIL_URI_FACTORY,
GROUP_URI_FACTORY,
SUPERVISOR_STATS_URI_FACTORY,
EXERCISE_URI_FACTORY
GROUP_URI_FACTORY,
SUPERVISOR_STATS_URI_FACTORY,
EXERCISE_URI_FACTORY
},
params: { assignmentId },
push,
assignment,
editAssignment,
isSuperAdmin,
isSupervisorOf,
isAdminOf,
formValues,
exerciseSync
} = this.props;
Expand Down Expand Up @@ -130,7 +129,8 @@ class EditAssignment extends Component {
<Row>
<Col xs={12}>
<HierarchyLineContainer groupId={assignment.groupId} />
{(isSuperAdmin || isSupervisorOf(assignment.groupId)) &&
{(isAdminOf(assignment.groupId) ||
isSupervisorOf(assignment.groupId)) &&
<p>
<LinkContainer
to={SUPERVISOR_STATS_URI_FACTORY(assignment.id)}
Expand All @@ -149,7 +149,8 @@ class EditAssignment extends Component {
</p>}
</Col>
</Row>
{(isSuperAdmin || isSupervisorOf(assignment.groupId)) &&
{(isAdminOf(assignment.groupId) ||
isSupervisorOf(assignment.groupId)) &&
<AssignmentSync
syncInfo={assignment.exerciseSynchronizationInfo}
exerciseSync={exerciseSync}
Expand Down Expand Up @@ -203,25 +204,29 @@ EditAssignment.propTypes = {
params: PropTypes.shape({
assignmentId: PropTypes.string.isRequired
}).isRequired,
isSuperAdmin: PropTypes.bool,
assignment: ImmutablePropTypes.map,
runtimeEnvironments: ImmutablePropTypes.map,
editAssignment: PropTypes.func.isRequired,
formValues: PropTypes.object,
exerciseSync: PropTypes.func.isRequired,
links: PropTypes.object
links: PropTypes.object,
isSupervisorOf: PropTypes.func.isRequired,
isAdminOf: PropTypes.func.isRequired
};

export default withLinks(
connect(
(state, { params: { assignmentId } }) => {
const loggedInUserId = loggedInUserIdSelector(state);
return {
assignment: getAssignment(state)(assignmentId),
runtimeEnvironments: runtimeEnvironmentsSelector(state),
submitting: isSubmitting(state),
isSuperAdmin: isLoggedAsSuperAdmin(state),
canSubmit: canSubmitSolution(assignmentId)(state),
formValues: getFormValues('editAssignment')(state)
formValues: getFormValues('editAssignment')(state),
isSupervisorOf: groupId =>
isSupervisorOf(loggedInUserId, groupId)(state),
isAdminOf: groupId => isAdminOf(loggedInUserId, groupId)(state)
};
},
(dispatch, { params: { assignmentId } }) => ({
Expand Down

0 comments on commit 66eb71d

Please sign in to comment.