79b45d5dd4be367921d46bd93d12283123bf2be1
[oweals/karmaworld.git] / karmaworld / apps / notes / views.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2012  FinalsClub Foundation
4
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
13
14 from karmaworld.apps.notes.models import Note
15 from karmaworld.apps.notes.forms import NoteForm
16
17
18 class NoteDetailView(DetailView):
19     """ Class-based view for the note html page """
20     model = Note
21     context_object_name = u"note" # name passed to template
22
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 """
26         kwargs = {
27             'hostname': Site.objects.get_current()
28         }
29         return super(NoteDetailView, self).get_context_data(**kwargs)
30
31
32 class NoteSaveView(FormView, SingleObjectMixin):
33     """ Save a Note and then view the page, 
34         behaves the same as NoteDetailView, except for saving the
35         NoteForm ModelForm
36     """
37     form_class = NoteForm
38     model = Note
39     template_name = 'notes/note_detail.html'
40
41     def get_context_data(self, **kwargs):
42         context = {
43             'object': self.get_object(),
44         }
45         print "get context for NoteSaveView"
46         return super(NoteSaveView, self).get_context_data(**context)
47
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,
54                 pk=self.object.pk,
55                 name=self.object.name
56             )
57
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
61         """
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'])
68         self.object.save()
69         return super(NoteSaveView, self).form_valid(form)
70
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"
75         print form
76         print form.errors
77
78
79 class NoteView(View):
80     """ Notes superclass that wraps http methods """
81
82     def get(self, request, *args, **kwargs):
83         view = NoteDetailView.as_view()
84         return view(request, *args, **kwargs)
85
86     def post(self, request, *args, **kwargs):
87         view = NoteSaveView.as_view()
88         return view(request, *args, **kwargs)
89
90
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"
95     model = Note
96
97 class PDFView(TemplateView):
98     """ A testing view to render a PDF """
99     template_name = u'partial/pdfembed.html'
100