Ustawianie galerii inline.
[redakcja.git] / apps / explorer / views.py
1 # -*- coding: utf-8 -*-
2 import urllib2
3
4 import logging
5 log = logging.getLogger('platforma.explorer.views')
6
7 from django.conf import settings
8 from django.contrib.auth.decorators import login_required, permission_required
9
10 from django.core.urlresolvers import reverse
11 from django.http import HttpResponse
12 from django.utils import simplejson as json
13 from django.views.generic.simple import direct_to_template
14 from django.contrib.auth.decorators import login_required
15
16 from explorer import forms
17 from api.models import PullRequest
18
19
20 def ajax_login_required(view):
21     """Similar ro @login_required, but instead of redirect, 
22     just return some JSON stuff with error."""
23     def view_with_auth(request, *args, **kwargs):
24         if request.user.is_authenticated():
25             return view(request, *args, **kwargs)
26         # not authenticated
27         return HttpResponse( json.dumps({'result': 'access_denied', 'errors': ['Brak dostÄ™pu.']}) );
28     return view_with_auth
29
30 @login_required
31 def display_editor(request, path):
32     user = request.GET.get('user', request.user.username)
33     gallery_form = forms.GalleryChoiceForm()
34     
35     return direct_to_template(request, 'explorer/editor.html', extra_context={
36             'fileid': path,
37             'euser': user,
38             'gallery_form': gallery_form,
39     })
40     
41 #
42 # View all files
43 #
44 def file_list(request):   
45     import api.forms
46     from api.resources import library_resource
47
48     bookform = api.forms.DocumentUploadForm()
49
50     # short-circut the api document list
51     doctree = library_resource.handler.read(request)
52     # print "DOCTREE:", doctree['documents']
53         
54     return direct_to_template(request, 'explorer/file_list.html', extra_context={
55         'filetree': doctree['documents'], 'bookform': bookform,
56     })
57
58 @permission_required('api.document.can_add')
59 def file_upload(request):
60     from api.resources import library_resource
61     from api.forms import DocumentUploadForm
62     from django.http import HttpRequest, HttpResponseRedirect
63
64     response = library_resource.handler.create(request)
65
66     if isinstance(response, HttpResponse):
67         data = json.loads(response.content)
68         
69         if response.status_code == 201:
70             return HttpResponseRedirect( \
71                 reverse("editor_view", args=[ data['name'] ]) )
72         else:
73             bookform = DocumentUploadForm(request.POST, request.FILES)
74             bookform.is_valid()
75             
76             return direct_to_template(request, 'explorer/file_upload.html',
77                 extra_context={'bookform': bookform } )
78           
79
80 @login_required
81 def print_html(request, **kwargs):
82     from api.resources import document_html_resource
83
84     kwargs['stylesheet'] = 'legacy'
85     
86     output = document_html_resource.handler.read(request, **kwargs)
87
88     if isinstance(output, HttpResponse):
89         # errors = json.loads(output.content)
90         output.mimetype = "text/plain"
91         return output
92     
93     return direct_to_template(request, 'html4print.html',
94         extra_context={'output': output, 'docid': kwargs['docid']},
95         mimetype="text/html" )
96
97
98 def _add_references(message, issues):
99     return message + " - " + ", ".join(map(lambda issue: "Refs #%d" % issue['id'], issues))
100
101 def _get_issues_for_file(fileid):
102     uf = None
103     try:
104         uf = urllib2.urlopen(settings.REDMINE_URL + 'publications/issues/%s.json' % fileid)
105         return json.loads(uf.read())
106     except urllib2.HTTPError:
107         return []
108     finally:
109         if uf: uf.close()
110
111 # =================
112 # = Pull requests =
113 # =================
114 def pull_requests(request):    
115     objects = PullRequest.objects.order_by('-status', 'timestamp')
116
117     if not request.user.has_perm('explorer.book.can_share'):
118         objects = objects.filter(comitter=request.user)
119
120     return direct_to_template(request, 'manager/pull_request.html', 
121         extra_context = {'objects': objects} )