Make the student submissions changeable by any teacher

Resolves MS-520
This commit is contained in:
Ramon Wenger 2022-06-29 16:40:10 +02:00
parent a25736ab45
commit 0eba96fd5e
3 changed files with 7 additions and 10 deletions

View File

@ -52,6 +52,7 @@ class StudentSubmission(TimeStampedModel):
class SubmissionFeedback(TimeStampedModel): class SubmissionFeedback(TimeStampedModel):
text = models.TextField(blank=True) text = models.TextField(blank=True)
# teacher who created the feedback
teacher = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='feedbacks') teacher = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='feedbacks')
student_submission = models.OneToOneField(StudentSubmission, on_delete=models.CASCADE, primary_key=True, student_submission = models.OneToOneField(StudentSubmission, on_delete=models.CASCADE, primary_key=True,
related_name='submission_feedback') related_name='submission_feedback')

View File

@ -58,18 +58,19 @@ class UpdateSubmissionFeedback(relay.ClientIDMutation):
user = info.context.user user = info.context.user
student_submission_id = from_global_id(submission_feedback_data['student_submission'])[1] student_submission_id = from_global_id(submission_feedback_data['student_submission'])[1]
if not user.has_perm('users.can_manage_school_class_content'): if not user.is_teacher():
raise PermissionDenied('Missing permissions') raise PermissionDenied('Missing permissions')
# todo: replace with middleware # todo: replace with middleware
if user.read_only: if user.read_only:
raise PermissionError('No valid license') raise PermissionError('No valid license')
(submission_feedback, created) = SubmissionFeedback.objects.get_or_create(teacher=user, (submission_feedback, created) = SubmissionFeedback.objects.get_or_create(student_submission_id=student_submission_id)
student_submission_id=student_submission_id)
final = submission_feedback_data.get('final') if 'final' in submission_feedback_data else submission_feedback.final final = submission_feedback_data.get('final') if 'final' in submission_feedback_data else submission_feedback.final
submission_feedback.teacher = user
submission_feedback.final = final submission_feedback.final = final
submission_feedback.text = submission_feedback_data.get('text') submission_feedback.text = submission_feedback_data.get('text')
submission_feedback.save() submission_feedback.save()

View File

@ -23,21 +23,16 @@ class StudentSubmissionNode(DjangoObjectType):
interfaces = (relay.Node,) interfaces = (relay.Node,)
def resolve_submission_feedback(self, info, **kwargs): def resolve_submission_feedback(self, info, **kwargs):
user = info.context.user user = info.context.user
if not hasattr(self, 'submission_feedback'): if not hasattr(self, 'submission_feedback'):
return None return None
# teacher path # teacher path
if user.has_perm('users.can_manage_school_class_content'): if user.is_teacher():
if self.submission_feedback.teacher == user: return self.submission_feedback
return self.submission_feedback
else:
raise PermissionDenied('Missing permissions')
# student path # student path
if self.submission_feedback.final: if self.submission_feedback.final:
return self.submission_feedback return self.submission_feedback