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']) ; |