# Desk
url(r'^desk/$', SeminarsView.as_view(), name="teleforma-desk"),
url(r'^desk/courses/(?P<pk>.*)/$', CourseView.as_view(), name="teleforma-course-detail"),
- url(r'^desk/seminars/(?P<pk>.*)/$', SeminarView.as_view(), name="teleforma-seminar-detail"),
+ url(r'^desk/seminars/(?P<pk>.*)/detail/$', SeminarView.as_view(), name="teleforma-seminar-detail"),
url(r'^desk/medias/(?P<pk>.*)/detail/$', MediaView.as_view(), name="teleforma-media-detail"),
url(r'^desk/medias/(?P<pk>.*)/download/$', media.download, name="teleforma-media-download"),
# Evaluations
url(r'^forms/', include('forms_builder.forms.urls')),
+ url(r'^desk/seminars/(?P<pk>.*)/form/$', EvaluationView.as_view(), name="teleforma-seminar-form"),
# Postman
url(r'^messages/', include('postman.urls')),
import urllib
import urllib2
import json
+import os
+import StringIO
from jsonrpc import jsonrpc_method
from django import template
from django.http import HttpResponse, HttpResponseRedirect
from django.http import Http404
-from django.shortcuts import render_to_response, redirect, get_object_or_404
+from django.shortcuts import render_to_response, redirect, get_object_or_404, render
from django.views.generic import *
from django.views.generic.base import *
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.views.generic.edit import FormView
from django.core.urlresolvers import reverse, reverse_lazy
+from django.template.loader import get_template
+from django.template.context import Context
+from django.utils.html import escape
+
from jsonrpc.proxy import ServiceProxy
from teleforma.models import *
from telemeta.views import *
import jqchat.models
from xlwt import Workbook
+from xhtml2pdf import pisa
try:
from telecaster.models import *
context['seminar_progress'] = seminar_progress(self.request.user, seminar)
context['total_progress'] = total_progress(self.request.user)
context['validated'] = seminar_validated(self.request.user, seminar)
+ context['evaluation'] = seminar.form
return context
return super(SeminarsView, self).dispatch(*args, **kwargs)
-
-
-class AjaxableResponseMixin(object):
- """
- Mixin to add AJAX support to a form.
- Must be used with an object-based FormView (e.g. CreateView)
- """
- def render_to_json_response(self, context, **response_kwargs):
- data = json.dumps(context)
- response_kwargs['content_type'] = 'application/json'
- return HttpResponse(data, **response_kwargs)
-
- def form_invalid(self, form):
- if self.request.is_ajax():
- return self.render_to_json_response(form.errors, status=400)
- else:
- return super(AjaxableResponseMixin, self).form_invalid(form)
-
- def form_valid(self, form):
- if self.request.is_ajax():
- data = {
- 'pk': form.instance.pk,
- }
- return self.render_to_json_response(data)
- else:
- return super(AjaxableResponseMixin, self).form_valid(form)
-
-
class AnswerView(FormView):
model = Answer
context['all_seminars'] = get_seminars(self.request.user)
return context
+
+class AjaxableResponseMixin(object):
+ """
+ Mixin to add AJAX support to a form.
+ Must be used with an object-based FormView (e.g. CreateView)
+ """
+ def render_to_json_response(self, context, **response_kwargs):
+ data = json.dumps(context)
+ response_kwargs['content_type'] = 'application/json'
+ return HttpResponse(data, **response_kwargs)
+
+ def form_invalid(self, form):
+ if self.request.is_ajax():
+ return self.render_to_json_response(form.errors, status=400)
+ else:
+ return super(AjaxableResponseMixin, self).form_invalid(form)
+
+ def form_valid(self, form):
+ if self.request.is_ajax():
+ data = {
+ 'pk': form.instance.pk,
+ }
+ return self.render_to_json_response(data)
+ else:
+ return super(AjaxableResponseMixin, self).form_valid(form)
+
+
+
+class EvaluationView(DetailView):
+
+ model = Seminar
+ template_name='teleforma/evaluation_form.html'
+
+ def get_context_data(self, **kwargs):
+ context = super(EvaluationView, self).get_context_data(**kwargs)
+ context['all_seminars'] = get_seminars(self.request.user)
+ context['total_progress'] = total_progress(self.request.user)
+ context['form'] = self.get_object().form
+ context['seminar_progress'] = seminar_progress(self.request.user, self.get_object())
+ return context
+
+
+def fetch_resources(uri, rel):
+ """
+ Callback to allow xhtml2pdf/reportlab to retrieve Images,Stylesheets, etc.
+ `uri` is the href attribute from the html link element.
+ `rel` gives a relative path, but it's not used here.
+
+ """
+ if uri.startswith(settings.MEDIA_URL):
+ path = os.path.join(settings.MEDIA_ROOT,
+ uri.replace(settings.MEDIA_URL, ""))
+ elif uri.startswith(settings.STATIC_URL):
+ path = os.path.join(settings.STATIC_ROOT,
+ uri.replace(settings.STATIC_URL, ""))
+ else:
+ path = os.path.join(settings.STATIC_ROOT,
+ uri.replace(settings.STATIC_URL, ""))
+
+ if not os.path.isfile(path):
+ path = os.path.join(settings.MEDIA_ROOT,
+ uri.replace(settings.MEDIA_URL, ""))
+
+ if not os.path.isfile(path):
+ raise UnsupportedMediaPathException(
+ 'media urls must start with %s or %s' % (
+ settings.MEDIA_ROOT, settings.STATIC_ROOT))
+
+ return path
+
+
+def render_to_pdf(template_src, context_dict):
+ """Function to render html template into a pdf file"""
+ template = get_template(template_src)
+ context = Context(context_dict)
+ html = template.render(context)
+ result = StringIO.StringIO()
+
+ pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")),
+ dest=result,
+ encoding='UTF-8',
+ link_callback=fetch_resources)
+ if not pdf.err:
+ response = HttpResponse(result.getvalue(),
+ mimetype='application/pdf')
+
+ return response
+
+ return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
+
+
+def download_pdf(request):
+ """Build briefing packages format and export as HTML and PDF."""
+ response = HttpResponse(content_type='application/pdf')
+ return generate_pdf('app/test.html', file_object=response)
\ No newline at end of file