Re-disable the HTML sanitize for now
[oweals/karmaworld.git] / karmaworld / apps / notes / views.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2012  FinalsClub Foundation
4
5 import os
6
7 from django.conf import settings
8 from django.contrib.sites.models import Site
9 from django.http import HttpResponse
10 from django.views.generic import DetailView
11 from django.views.generic import FormView
12 from django.views.generic import View
13 from django.views.generic import TemplateView
14 from django.views.generic.detail import SingleObjectMixin
15 from django.shortcuts import get_object_or_404
16
17 from karmaworld.apps.notes.models import Note
18 from karmaworld.apps.notes.forms import NoteForm
19
20
21
22 def is_pdf(self):
23     if self.object.file_type == 'pdf':
24         return True
25     return False
26
27 def is_ppt(self):
28     if self.object.file_type == 'ppt':
29         return True
30     return False
31
32
33 class NoteDetailView(DetailView):
34     """ Class-based view for the note html page """
35     model = Note
36     context_object_name = u"note" # name passed to template
37
38     def get_context_data(self, **kwargs):
39         """ Generate custom context for the page rendering a Note
40             + if pdf, set the `pdf` flag
41         """
42         # not current using these
43         #kwargs['hostname'] = Site.objects.get_current()
44
45         kwargs['pdf'] = is_pdf(self)
46         kwargs['ppt'] = is_ppt(self)
47
48         return super(NoteDetailView, self).get_context_data(**kwargs)
49
50
51 class NoteSaveView(FormView, SingleObjectMixin):
52     """ Save a Note and then view the page, 
53         behaves the same as NoteDetailView, except for saving the
54         NoteForm ModelForm
55     """
56     form_class = NoteForm
57     model = Note
58     template_name = 'notes/note_detail.html'
59
60     def get_context_data(self, **kwargs):
61         context = {
62             'object': self.get_object(),
63         }
64         print "get context for NoteSaveView"
65         return super(NoteSaveView, self).get_context_data(**context)
66
67     def get_success_url(self):
68         """ On form submission success, redirect to what url """
69         #TODO: redirect to note slug if possible (auto-slugify)
70         return u'/{school_slug}/{course_slug}?url=/{school_slug}/{course_slug}/{pk}&name={name}&thankyou'.format(
71                 school_slug=self.object.course.school.slug,
72                 course_slug=self.object.course.slug,
73                 pk=self.object.pk,
74                 name=self.object.name
75             )
76
77     def form_valid(self, form):
78         """ Actions to take if the submitted form is valid
79             namely, saving the new data to the existing note object
80         """
81         self.object = self.get_object()
82         if len(form.cleaned_data['name'].strip()) > 0:
83             self.object.name = form.cleaned_data['name']
84         self.object.year = form.cleaned_data['year']
85         # use *arg expansion to pass tags a list of tags
86         self.object.tags.add(*form.cleaned_data['tags'])
87         # User has submitted this form, so set the SHOW flag
88         self.object.is_hidden = False
89         self.object.save()
90         return super(NoteSaveView, self).form_valid(form)
91
92     def form_invalid(self, form):
93         """ Do stuff when the form is invalid !!! TODO """
94         # TODO: implement def form_invalid for returning a form with input and error
95         print "running form_invalid"
96         print form
97         print form.errors
98
99
100 class NoteView(View):
101     """ Notes superclass that wraps http methods """
102
103     def get(self, request, *args, **kwargs):
104         view = NoteDetailView.as_view()
105         return view(request, *args, **kwargs)
106
107     def post(self, request, *args, **kwargs):
108         view = NoteSaveView.as_view()
109         return view(request, *args, **kwargs)
110
111
112 class RawNoteDetailView(DetailView):
113     """ Class-based view for the raw note html for iframes """
114     template_name = u'notes/note_raw.html'
115     context_object_name = u"note"
116     model = Note
117
118
119 class PDFView(DetailView):
120     """ Render PDF files in an iframe based on ID"""
121     template_name = u'partial/pdfembed.html'
122     model = Note
123
124     def get_context_data(self, **kwargs):
125         """ Generate a path to the pdf file associated with this note
126             by generating a path to the MEDIA_URL by hand """
127
128         if is_ppt(self):
129             kwargs['pdf_path'] = "{0}{1}".format(settings.MEDIA_URL,
130                 os.path.basename(self.object.pdf_file.name))
131         elif is_pdf(self):
132             kwargs['pdf_path'] = self.object.fp_file
133             #kwargs['pdf_path'] = "{0}{1}".format(settings.MEDIA_URL,
134             #    os.path.basename(self.object.note_file.name))
135
136         return super(PDFView, self).get_context_data(**kwargs)