0f9e37e2e4f9b1c2193ee56c4fca659ada49db10
[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.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
11
12 from karmaworld.apps.notes.models import Note
13 from karmaworld.apps.notes.forms import NoteForm
14
15
16 class NoteDetailView(DetailView):
17     """ Class-based view for the note html page """
18     model = Note
19     context_object_name = u"note" # name passed to template
20
21
22 class NoteSaveView(FormView, SingleObjectMixin):
23     """ Save a Note and then view the page, 
24         behaves the same as NoteDetailView, except for saving the
25         NoteForm ModelForm
26     """
27     # TODO: implement def form_invalid for returning a form with input and error
28     form_class = NoteForm
29     model = Note
30     template_name = 'notes/note_detail.html'
31
32     def get_context_data(self, **kwargs):
33         context = {
34             'object': self.get_object(),
35         }
36         print "get context for NoteSaveView"
37         return super(NoteSaveView, self).get_context_data(**context)
38
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,
45                 pk=self.object.pk,
46                 name=self.object.name
47             )
48
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
52         """
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'])
58         self.object.save()
59         return super(NoteSaveView, self).form_valid(form)
60
61     def form_invalid(self, form):
62         """ Do stuff when the form is invalid !!! TODO """
63         print "running form_invalid"
64         print self.form
65         print self.form.errors
66
67
68 class NoteView(View):
69     """ Notes superclass that wraps http methods """
70
71     def get(self, request, *args, **kwargs):
72         view = NoteDetailView.as_view()
73         return view(request, *args, **kwargs)
74
75     def post(self, request, *args, **kwargs):
76         view = NoteSaveView.as_view()
77         return view(request, *args, **kwargs)
78
79
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"
84     model = Note
85
86
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)