From f99da307c9c0b438b381f649ec2bb0f290308514 Mon Sep 17 00:00:00 2001
From: janmax <mail-github@jmx.io>
Date: Tue, 2 May 2017 12:35:20 +0200
Subject: [PATCH] Fixes html encoding of submissions and csv export

---
 convert.py                             | 4 ++--
 core/models.py                         | 2 +-
 core/templates/core/feedback_form.html | 2 +-
 core/views/export_csv.py               | 4 +++-
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/convert.py b/convert.py
index 5a1e4d16..94eb5ed5 100755
--- a/convert.py
+++ b/convert.py
@@ -82,7 +82,7 @@ def sheet_iter_data(sheet):
     """ yields all rows that are not of empty type as one string """
     for row in (sheet.row(i) for i in range(sheet.nrows)):
         if any(map(lambda c: c.ctype, row)):
-            yield row[0].value + row[1].value
+            yield ''.join(c.value for c in row)
 
 # nice!
 name2mat = dict(sheet_iter_meta(meta))
@@ -108,7 +108,7 @@ if args.NUMBER_OF_TASKS:
 if args.usernames:
     with open(args.usernames) as data:
         mat_to_email = json.JSONDecoder().decode(data.read())
-    usernames = {user.name : mat_to_email[name2mat[user.name]].split('@')[0] for (user, *_) in root}
+    usernames = {user.name : mat_to_email[name2mat[user.name]].split('@')[0] if name2mat[user.name] in mat_to_email else ''.join(filter(str.isupper, user.name)) + name2mat[user.name] for (user, *_) in root}
 
 else: # legacy support / fallback
     usernames = {user.name : ''.join(filter(str.isupper, user.name)) + name2mat[user.name] for (user, *_) in root}
diff --git a/core/models.py b/core/models.py
index f8f18d90..37e8380b 100644
--- a/core/models.py
+++ b/core/models.py
@@ -149,7 +149,7 @@ class Submission(models.Model):
         # we do not want this tutor to correct the same submission twice
         if type_slug:
             ready = ready.filter(type__slug=type_slug)
-        ready = ready.exclude(feedback_list__of_tutor=tutor)
+        ready = ready.exclude(feedback__of_tutor=tutor)
         if not ready:
             return False
 
diff --git a/core/templates/core/feedback_form.html b/core/templates/core/feedback_form.html
index 615cffd9..4aa8e4a9 100644
--- a/core/templates/core/feedback_form.html
+++ b/core/templates/core/feedback_form.html
@@ -155,7 +155,7 @@
 
   // we need this one for the student readonly
   var editor_student = ace.edit("student_text");
-  editor_student.setValue(`{{feedback.of_submission.text}}`, -1);
+  editor_student.setValue(`{{feedback.of_submission.text|safe}}`, -1);
   editor_student.getSession().setMode("ace/mode/c_cpp");
   editor_student.setOptions({
     readOnly: true,
diff --git a/core/views/export_csv.py b/core/views/export_csv.py
index b322258e..147e85b0 100644
--- a/core/views/export_csv.py
+++ b/core/views/export_csv.py
@@ -17,7 +17,9 @@ def export_csv(request):
 
     for student in Student.objects.all():
         submissions = Submission.objects.filter(student=student)
-        score_list  = [s.final_feedback.score if s.final_feedback else 0 for s in submissions.order_by('type__name')]
+        score_list  = [s.feedback.score if hasattr(s, 'feedback') else 0 for s in submissions.order_by('type__name')]
+        if not score_list:
+            score_list = [0] * SubmissionType.objects.count()
         writer.writerow([
             student.matrikel_no,
             student.name,
-- 
GitLab