X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/6612e6c0026cee6bbeb7845a5c5749420b409b3b..f4cb3b0ea0d7be31ee483dbb0e4486ea85437fad:/wtem/admin.py diff --git a/wtem/admin.py b/wtem/admin.py index 15430cc..78ca9b9 100644 --- a/wtem/admin.py +++ b/wtem/admin.py @@ -10,6 +10,8 @@ from django.core.urlresolvers import reverse from django.conf.urls import url, patterns from django.shortcuts import render from django.contrib.auth.models import User +from django.http import HttpResponse +from django.template.loader import render_to_string from .models import Submission, Assignment, Attachment, exercises from .middleware import get_current_request @@ -30,18 +32,29 @@ class AttachmentWidget(forms.Widget): a_tag = '%s' % (value, value) else: a_tag = 'brak' - return mark_safe(('' + a_tag) % (name, value)) + return mark_safe(('' % (name, value)) + a_tag) + +class TextareaWithLinks(forms.Textarea): + def render(self, name, value, *args, **kwargs): + t, links = value + self.links = links + output = super(TextareaWithLinks, self).render(name, t, *args, **kwargs) + moreoutput = "
" + for k, n, v in links: + moreoutput += u"
%s: %s" % (k, AttachmentWidget().render(n, v)) + output += mark_safe(moreoutput + "
") + return output class SubmissionFormBase(forms.ModelForm): class Meta: model = Submission - exclude = ('answers', 'marks', 'contact') + readonly_fields + exclude = ('answers', 'marks', 'contact', 'end_time') + readonly_fields def get_open_answer(answers, exercise): def get_option(options, id): for option in options: - if option['id'] == int(id): + if str(option['id']) == id: return option exercise_id = str(exercise['id']) @@ -57,9 +70,10 @@ def get_open_answer(answers, exercise): if exercise['type'] == 'edumed_wybor': ok = set(map(str, exercise['answer'])) == set(map(str,answer['closed_part'])) toret = u'Czesc testowa [%s]:\n' % ('poprawna' if ok else 'niepoprawna') - for selected in answer['closed_part']: - option = get_option(exercise['options'], selected) - toret += '%s: %s\n' % (selected, option['text']) + if len(answer['closed_part']): + for selected in answer['closed_part']: + option = get_option(exercise['options'], selected) + toret += '%s: %s\n' % (selected, option['text']) else: toret += u'\n' toret += u'\nCzesc otwarta (%s):\n\n' % ' '.join(exercise['open_part']) @@ -88,17 +102,38 @@ def get_form(request, submission): widget = AttachmentWidget initial = attachment.file.url if attachment else None else: - widget = forms.Textarea(attrs={'readonly':True}) - initial = get_open_answer(answers, exercise) + #widget = forms.Textarea(attrs={'readonly':True}) + widget = TextareaWithLinks(attrs={'readonly':True}) + links = [] + qfiles = [] + for qfield in exercise.get('fields', []): + if qfield.get('type') == 'file': + qfiles.append((qfield['id'], qfield['caption'])) + if qfiles: + eid = int(exercise['id']) + by_tag = {} + for att in Attachment.objects.filter(submission=submission, exercise_id=eid).order_by('tag'): + by_tag[att.tag] = att.file.url + for tag, caption in qfiles: + v = by_tag.get(tag) + if v: + links.append((caption, "file_%s__%s" % (eid, tag), v)) + initial = get_open_answer(answers, exercise), links fields[answer_field_name] = forms.CharField( widget = widget, initial = initial, - label = 'Rozwiązanie zadania %s' % exercise['id'] + label = u'Rozwiązanie zadania %s' % exercise['id'], + required = False ) + choices = [(None, '-')] # + [(i,i) for i in range(exercise['max_points']+1)], + i = 0 + while i <= exercise['max_points']: + choices.append((i, i)) + i += .5 fields[mark_field_name] = forms.ChoiceField( - choices = [(None, '-')] + [(i,i) for i in range(exercise['max_points']+1)], + choices = choices, initial = submission.get_mark(user_id = request.user.id, exercise_id = exercise['id']), label = u'Twoja ocena zadania %s' % exercise['id'] ) @@ -189,12 +224,15 @@ class SubmissionsSet: examiners.append(user) def report_view(request): - submissions = Submission.objects.all() - submissions = sorted(submissions, key = lambda s: -s.final_result) - return render(request, 'wtem/admin_report.csv', dict( + submissions = sorted(Submission.objects.all(), key = lambda s: -s.final_result) + toret = render_to_string('wtem/admin_report.csv', dict( submissionsSet = SubmissionsSet(submissions), - exercise_ids = map(str, range(1,len(exercises)+1)) + #exercise_ids = map(str, range(1,len(exercises)+1)) + exercise_ids = [str(e['id']) for e in exercises] )) + response = HttpResponse(toret, content_type = 'text/csv') + response['Content-Disposition'] = 'attachment; filename="wyniki.csv"' + return response admin.site.register(Submission, SubmissionAdmin) -admin.site.register(Assignment) \ No newline at end of file +admin.site.register(Assignment)