3 # Copyright (C) 2014 FinalsClub Foundation
4 from itertools import chain
5 from django.core.exceptions import ObjectDoesNotExist
6 from django.core.urlresolvers import reverse
7 from django.forms.formsets import formset_factory
8 from django.http import HttpResponseRedirect
10 from django.views.generic import DetailView, FormView
11 from django.views.generic.detail import SingleObjectMixin
12 from django.views.generic.edit import FormMixin, ProcessFormView
13 from karmaworld.apps.notes.models import Note
14 from karmaworld.apps.quizzes.forms import KeywordForm
15 from karmaworld.apps.quizzes.models import Quiz, ALL_QUESTION_CLASSES, Keyword
18 class QuizView(DetailView):
19 queryset = Quiz.objects.all()
21 context_object_name = 'quiz' # name passed to template
22 template_name = 'quizzes/quiz.html'
24 def get_context_data(self, **kwargs):
26 for cls in ALL_QUESTION_CLASSES:
28 [(cls.__name__, o) for o in cls.objects.filter(quiz=self.object)]
31 result_list = sorted(chain.from_iterable(all_questions),
32 key=lambda o: o[1].timestamp,
35 kwargs['questions'] = result_list
37 return super(QuizView, self).get_context_data(**kwargs)
40 class KeywordEditView(FormView):
41 template_name = 'quizzes/keyword_edit.html'
42 form_class = formset_factory(KeywordForm)
44 def get(self, requests, *args, **kwargs):
46 return super(KeywordEditView, self).get(requests, *args, **kwargs)
48 def post(self, requests, *args, **kwargs):
50 return super(KeywordEditView, self).post(requests, *args, **kwargs)
52 def lookup_note(self):
53 self.note = Note.objects.get(slug=self.kwargs['slug'])
55 def get_success_url(self):
56 return reverse('keyword_edit', args=(self.note.course.school.slug, self.note.course.slug, self.note.slug))
58 def get_initial(self):
59 existing_keywords = self.note.keyword_set.order_by('id')
60 initial_data = [{'keyword': keyword.word, 'definition': keyword.definition, 'id': keyword.pk}
61 for keyword in existing_keywords]
64 def get_context_data(self, **kwargs):
65 kwargs['note'] = self.note
66 kwargs['prototype_form'] = KeywordForm
67 return super(KeywordEditView, self).get_context_data(**kwargs)
69 def form_valid(self, formset):
71 word = form['keyword'].data
72 definition = form['definition'].data
77 keyword_object = Keyword.objects.get(id=id)
78 except (ValueError, ObjectDoesNotExist):
79 keyword_object = Keyword()
81 keyword_object.note = self.note
82 keyword_object.word = word
83 keyword_object.definition = definition
86 return super(KeywordEditView, self).form_valid(formset)