src/cm/views/export.py
changeset 453 1d314f629611
parent 443 cacd524f5279
child 454 b7a092a52eae
equal deleted inserted replaced
452:8f1d6a6cd7f6 453:1d314f629611
     1 from django import forms
     1 from django import forms
     2 from django.core.urlresolvers import reverse
     2 from django.core.urlresolvers import reverse
     3 from django.http import HttpResponse, HttpResponseRedirect, Http404
     3 from django.http import HttpResponse, HttpResponseRedirect, Http404
     4 from django.shortcuts import render_to_response
     4 from django.shortcuts import render_to_response
       
     5 from django.template.loader import render_to_string
     5 from django.template import RequestContext
     6 from django.template import RequestContext
     6 from django.utils.translation import ugettext as _, ugettext_lazy
     7 from django.utils.translation import ugettext as _, ugettext_lazy
       
     8 from django.contrib.auth.models import User
     7 from cm.converters.pandoc_converters import pandoc_convert, do_tidy
     9 from cm.converters.pandoc_converters import pandoc_convert, do_tidy
     8 from cm.models import Text, TextVersion, Attachment, Comment
    10 from cm.models import Text, TextVersion, Attachment, Comment
       
    11 from cm.security import get_viewable_comments
     9 import mimetypes
    12 import mimetypes
    10 import simplejson
    13 import simplejson
    11 from cm.cm_settings import USE_ABI
    14 from cm.cm_settings import USE_ABI
    12 EXPORT2_INFOS = {
    15 EXPORT2_INFOS = {
    13 # key -> { mimetype, extension}
    16 # key -> { mimetype, extension}
    18 'doc' :  {'mimetype': 'application/msword', 'extension':'doc'},
    21 'doc' :  {'mimetype': 'application/msword', 'extension':'doc'},
    19 'docx' :  {'mimetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'extension':'docx'},
    22 'docx' :  {'mimetype': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'extension':'docx'},
    20 'latex' :{'mimetype': 'text/x-tex', 'extension':'tex'},
    23 'latex' :{'mimetype': 'text/x-tex', 'extension':'tex'},
    21 'html' :{'mimetype': 'text/html', 'extension':'html'},
    24 'html' :{'mimetype': 'text/html', 'extension':'html'},
    22 'epub' :{'mimetype': 'application/epub+zip', 'extension':'epub'},
    25 'epub' :{'mimetype': 'application/epub+zip', 'extension':'epub'},
    23 # raw export
    26 'raw' : {'mimetype': 'text/plain', 'extension':'txt'},
    24 'raw' : {'mimetype': 'text/plain', 'extension':'txt'}
    27 'xml' : {'mimetype': 'text/xml', 'extension':'xml'},
    25 }
    28 }
    26 def content_export2(request, content, title, content_format, format, use_pandoc, download_response):
    29 def content_export2(request, content, title, content_format, format, use_pandoc, download_response):
    27     # TODO : formats must be imported from converters
    30     # TODO : formats must be imported from converters
    28 #    import pdb;pdb.set_trace()
    31 #    import pdb;pdb.set_trace()
    29     if format == 'raw' :
    32     if format == 'raw' :
   227     
   230     
   228     return content_export(request, text_version.content, text_version.title, text_version.format, format)
   231     return content_export(request, text_version.content, text_version.title, text_version.format, format)
   229 
   232 
   230 def text_feed(request, key):
   233 def text_feed(request, key):
   231     return ""
   234     return ""
       
   235 
       
   236 def xml_export(request, text_version, whichcomments):
       
   237   # Text version infos
       
   238   template_dict = { 'title': text_version.title, 'date': text_version.modified, 'format': text_version.format, 'content': text_version.get_content(), 'tags': text_version.tags, }
       
   239   
       
   240   # Comments
       
   241   comments = [] # whichcomments=="none"
       
   242   if whichcomments == "filtered" or whichcomments == "all":
       
   243     _comments = text_version.comment_set.all()
       
   244     if whichcomments == "filtered" :
       
   245       filteredIds = []
       
   246       if request.method == 'POST' :
       
   247         ll = request.POST.get('filteredIds',[]).split(",")
       
   248         filteredIds = [ int(l) for l in ll if l]
       
   249       _comments = text_version.comment_set.filter(id__in=filteredIds)
       
   250     comments = get_viewable_comments(request, _comments, text_version, order_by=('start_wrapper','start_offset','end_wrapper','end_offset'))
       
   251     # Add user name/email if missing comment name/email
       
   252     for comment in comments:
       
   253       users = User.objects.filter(id=comment.user_id)
       
   254       if not(comment.name):
       
   255         comment.name = users[0].username
       
   256       if not(comment.email):
       
   257         comment.email = users[0].email
       
   258       
       
   259     template_dict['comments'] = comments
       
   260 
       
   261   # Author
       
   262   users = User.objects.filter(id=text_version.user_id)
       
   263   if text_version.name:
       
   264     template_dict['name'] = text_version.name
       
   265   else:
       
   266     template_dict['name'] = users[0].username
       
   267   if text_version.email:
       
   268     template_dict['email'] = text_version.email
       
   269   else:
       
   270     template_dict['email'] = users[0].email
       
   271 
       
   272   # Renders template
       
   273   export_content = render_to_string('site/export.xml', template_dict, context_instance=RequestContext(request))
       
   274 
       
   275   # Returns HTTP response
       
   276   export_infos = EXPORT2_INFOS['xml']
       
   277   return _response_download(export_content, text_version.title, export_infos['mimetype'], export_infos['extension']) ;