3 # Copyright (C) 2012 FinalsClub Foundation
5 from django.http import HttpResponse
6 from django.views.generic import DetailView
7 from django.views.generic import FormView
8 from django.views.generic import View
9 from django.views.generic.detail import SingleObjectMixin
10 from django.shortcuts import get_object_or_404
12 from karmaworld.apps.notes.models import Note
13 from karmaworld.apps.notes.forms import NoteForm
16 class NoteDetailView(DetailView):
17 """ Class-based view for the note html page """
19 context_object_name = u"note" # name passed to template
22 class NoteSaveView(FormView, SingleObjectMixin):
23 """ Save a Note and then view the page,
24 behaves the same as NoteDetailView, except for saving the
27 # TODO: implement def form_invalid for returning a form with input and error
30 template_name = 'notes/note_detail.html'
32 def get_context_data(self, **kwargs):
34 'object': self.get_object(),
36 print "get context for NoteSaveView"
37 return super(NoteSaveView, self).get_context_data(**context)
39 def get_success_url(self):
40 """ On form submission success, redirect to what url """
41 #TODO: redirect to note slug if possible (auto-slugify)
42 return u'/{school_slug}/{course_slug}?url=/{school_slug}/{course_slug}/{pk}&name={name}&thankyou'.format(
43 school_slug=self.object.course.school.slug,
44 course_slug=self.object.course.slug,
49 def form_valid(self, form):
50 """ Actions to take if the submitted form is valid
51 namely, saving the new data to the existing note object
53 self.object = self.get_object()
54 self.object.name = form.cleaned_data['name']
55 self.object.year = form.cleaned_data['year']
56 # use *arg expansion to pass tags a list of tags
57 self.object.tags.add(*form.cleaned_data['tags'])
59 return super(NoteSaveView, self).form_valid(form)
61 def form_invalid(self, form):
62 """ Do stuff when the form is invalid !!! TODO """
63 print "running form_invalid"
65 print self.form.errors
69 """ Notes superclass that wraps http methods """
71 def get(self, request, *args, **kwargs):
72 view = NoteDetailView.as_view()
73 return view(request, *args, **kwargs)
75 def post(self, request, *args, **kwargs):
76 view = NoteSaveView.as_view()
77 return view(request, *args, **kwargs)
80 class RawNoteDetailView(DetailView):
81 """ Class-based view for the raw note html for iframes """
82 template_name = u'notes/note_raw.html'
83 context_object_name = u"note"
87 def raw_file(request, pk):
88 """ Display the raw html from a Note object for embedding in an iframe """
89 note = get_object_or_404(Note, pk=pk)
90 return HttpResponse(note.html)