3 # Copyright (C) 2012 FinalsClub Foundation
5 from django.contrib.sites.models import Site
6 from django.http import HttpResponse
7 from django.views.generic import DetailView
8 from django.views.generic import FormView
9 from django.views.generic import View
10 from django.views.generic import TemplateView
11 from django.views.generic.detail import SingleObjectMixin
12 from django.shortcuts import get_object_or_404
14 from karmaworld.apps.notes.models import Note
15 from karmaworld.apps.notes.forms import NoteForm
18 class NoteDetailView(DetailView):
19 """ Class-based view for the note html page """
21 context_object_name = u"note" # name passed to template
23 def get_context_data(self, **kwargs):
24 """ add the hostname to the PDF embed for PDF.js
25 from the Sites admin database record """
27 'hostname': Site.objects.get_current()
29 return super(NoteDetailView, self).get_context_data(**kwargs)
32 class NoteSaveView(FormView, SingleObjectMixin):
33 """ Save a Note and then view the page,
34 behaves the same as NoteDetailView, except for saving the
39 template_name = 'notes/note_detail.html'
41 def get_context_data(self, **kwargs):
43 'object': self.get_object(),
45 print "get context for NoteSaveView"
46 return super(NoteSaveView, self).get_context_data(**context)
48 def get_success_url(self):
49 """ On form submission success, redirect to what url """
50 #TODO: redirect to note slug if possible (auto-slugify)
51 return u'/{school_slug}/{course_slug}?url=/{school_slug}/{course_slug}/{pk}&name={name}&thankyou'.format(
52 school_slug=self.object.course.school.slug,
53 course_slug=self.object.course.slug,
58 def form_valid(self, form):
59 """ Actions to take if the submitted form is valid
60 namely, saving the new data to the existing note object
62 self.object = self.get_object()
63 if len(form.cleaned_data['name'].strip()) > 0:
64 self.object.name = form.cleaned_data['name']
65 self.object.year = form.cleaned_data['year']
66 # use *arg expansion to pass tags a list of tags
67 self.object.tags.add(*form.cleaned_data['tags'])
69 return super(NoteSaveView, self).form_valid(form)
71 def form_invalid(self, form):
72 """ Do stuff when the form is invalid !!! TODO """
73 # TODO: implement def form_invalid for returning a form with input and error
74 print "running form_invalid"
80 """ Notes superclass that wraps http methods """
82 def get(self, request, *args, **kwargs):
83 view = NoteDetailView.as_view()
84 return view(request, *args, **kwargs)
86 def post(self, request, *args, **kwargs):
87 view = NoteSaveView.as_view()
88 return view(request, *args, **kwargs)
91 class RawNoteDetailView(DetailView):
92 """ Class-based view for the raw note html for iframes """
93 template_name = u'notes/note_raw.html'
94 context_object_name = u"note"
97 class PDFView(TemplateView):
98 """ A testing view to render a PDF """
99 template_name = u'partial/pdfembed.html'