refactor note views for Note object to handle get and post http methods to save note...
[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 class NoteDetailView(DetailView):
16     """ Class-based view for the note html page """
17     # name passed to template
18     context_object_name = u"note"
19     model = Note
20
21
22 class NoteSaveView(FormView, SingleObjectMixin):
23     template_name = 'notes/note_detail.html'
24     form_class = NoteForm
25     model = Note
26
27     def get_context_data(self, **kwargs):
28         context = {
29             'object': self.get_object(),
30         }
31         return super(NoteSaveView, self).get_context_data(**context)
32
33     def get_success_url(self):
34         return u'/{school_slug}/{course_slug}/{pk}'.format(
35                 school_slug=self.object.course.school.slug,
36                 course_slug=self.object.course.slug,
37                 pk=self.object.pk
38             )
39
40     def form_valid(self, form):
41         self.object = self.get_object()
42         self.object.name = form.cleaned_data['name']
43         self.object.desc = form.cleaned_data['desc']
44         # use *arg expansion to pass tags a list of tags
45         self.object.tags.add(*form.cleaned_data['tags'])
46         self.object.save()
47         return super(NoteSaveView, self).form_valid(form)
48
49
50 class NoteView(View):
51     """ Notes superclass that wraps http methods """
52
53     def get(self, request, *args, **kwargs):
54         view = NoteDetailView.as_view()
55         return view(request, *args, **kwargs)
56
57     def post(self, request, *args, **kwargs):
58         view = NoteSaveView.as_view()
59         return view(request, *args, **kwargs)
60
61
62
63 class RawNoteDetailView(DetailView):
64     """ Class-based view for the raw note html for iframes """
65     template_name = u'notes/note_raw.html'
66     context_object_name = u"note"
67     model = Note
68
69 def raw_file(request, pk):
70     """ Display the raw html from a Note object for embedding in an iframe """
71     note = get_object_or_404(Note, pk=pk)
72     return HttpResponse(note.html)