3 # Copyright (C) 2012 FinalsClub Foundation
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
17 from karmaworld.apps.notes.models import Note
18 from karmaworld.apps.notes.forms import NoteForm
23 _path = self.object.note_file.name
24 _, _extension = os.path.splitext(_path)
25 if _extension.lower() == '.pdf':
30 if self.object.pdf_file:
36 class NoteDetailView(DetailView):
37 """ Class-based view for the note html page """
39 context_object_name = u"note" # name passed to template
41 def get_context_data(self, **kwargs):
42 """ Generate custom context for the page rendering a Note
43 + if pdf, set the `pdf` flag
45 #kwargs['file_url'] = os.path.basename(_path)
46 #kwargs['hostname'] = Site.objects.get_current()
48 kwargs['pdf'] = is_pdf(self)
49 kwargs['ppt'] = is_ppt(self)
51 return super(NoteDetailView, self).get_context_data(**kwargs)
54 class NoteSaveView(FormView, SingleObjectMixin):
55 """ Save a Note and then view the page,
56 behaves the same as NoteDetailView, except for saving the
61 template_name = 'notes/note_detail.html'
63 def get_context_data(self, **kwargs):
65 'object': self.get_object(),
67 print "get context for NoteSaveView"
68 return super(NoteSaveView, self).get_context_data(**context)
70 def get_success_url(self):
71 """ On form submission success, redirect to what url """
72 #TODO: redirect to note slug if possible (auto-slugify)
73 return u'/{school_slug}/{course_slug}?url=/{school_slug}/{course_slug}/{pk}&name={name}&thankyou'.format(
74 school_slug=self.object.course.school.slug,
75 course_slug=self.object.course.slug,
80 def form_valid(self, form):
81 """ Actions to take if the submitted form is valid
82 namely, saving the new data to the existing note object
84 self.object = self.get_object()
85 if len(form.cleaned_data['name'].strip()) > 0:
86 self.object.name = form.cleaned_data['name']
87 self.object.year = form.cleaned_data['year']
88 # use *arg expansion to pass tags a list of tags
89 self.object.tags.add(*form.cleaned_data['tags'])
91 return super(NoteSaveView, self).form_valid(form)
93 def form_invalid(self, form):
94 """ Do stuff when the form is invalid !!! TODO """
95 # TODO: implement def form_invalid for returning a form with input and error
96 print "running form_invalid"
101 class NoteView(View):
102 """ Notes superclass that wraps http methods """
104 def get(self, request, *args, **kwargs):
105 view = NoteDetailView.as_view()
106 return view(request, *args, **kwargs)
108 def post(self, request, *args, **kwargs):
109 view = NoteSaveView.as_view()
110 return view(request, *args, **kwargs)
113 class RawNoteDetailView(DetailView):
114 """ Class-based view for the raw note html for iframes """
115 template_name = u'notes/note_raw.html'
116 context_object_name = u"note"
120 class PDFView(DetailView):
121 """ Render PDF files in an iframe based on ID"""
122 template_name = u'partial/pdfembed.html'
125 def get_context_data(self, **kwargs):
126 """ Generate a path to the pdf file associated with this note
127 by generating a path to the MEDIA_URL by hand """
128 # FIXME: There may be an undocumented,
129 # but better way of handling media files in django
132 kwargs['pdf_path'] = "{0}{1}".format(settings.MEDIA_URL,
133 os.path.basename(self.object.pdf_file.name))
135 kwargs['pdf_path'] = "{0}{1}".format(settings.MEDIA_URL,
136 os.path.basename(self.object.note_file.name))
138 return super(PDFView, self).get_context_data(**kwargs)