Fix errors in caret placement on box open and in annotation browser.
[redakcja.git] / src / documents / views.py
index 6c9f29e..a930b8d 100644 (file)
@@ -23,7 +23,7 @@ from django.utils.translation import gettext_lazy as _
 from django.views.decorators.http import require_POST
 from django_cas_ng.decorators import user_passes_test
 
 from django.views.decorators.http import require_POST
 from django_cas_ng.decorators import user_passes_test
 
-from apiclient import NotAuthorizedError
+from apiclient import api_call, NotAuthorizedError
 from . import forms
 from . import helpers
 from .helpers import active_tab
 from . import forms
 from . import helpers
 from .helpers import active_tab
@@ -65,9 +65,17 @@ def my(request):
         key=lambda x: x[1]['time'], reverse=True)
     for k, v in last_books:
         v['time'] = datetime.fromtimestamp(v['time'])
         key=lambda x: x[1]['time'], reverse=True)
     for k, v in last_books:
         v['time'] = datetime.fromtimestamp(v['time'])
+    try:
+        resp = api_call(request.user, 'username/')
+    except NotAuthorizedError:
+        wllogin = None
+    else:
+        wllogin = resp['username']
+
     return render(request, 'documents/my_page.html', {
         'last_books': last_books,
         "logout_to": '/',
     return render(request, 'documents/my_page.html', {
         'last_books': last_books,
         "logout_to": '/',
+        "wllogin": wllogin,
         })
 
 
         })
 
 
@@ -99,7 +107,7 @@ def activity(request, isodate=None):
 @never_cache
 def logout_then_redirect(request):
     auth.logout(request)
 @never_cache
 def logout_then_redirect(request):
     auth.logout(request)
-    return http.HttpResponseRedirect(urlquote_plus(request.GET.get('next', '/'), safe='/?='))
+    return http.HttpResponseRedirect(quote_plus(request.GET.get('next', '/'), safe='/?='))
 
 
 @permission_required('documents.add_book')
 
 
 @permission_required('documents.add_book')
@@ -262,6 +270,7 @@ def book_html(request, slug):
     return render(request, 'documents/book_text.html', locals())
 
 
     return render(request, 'documents/book_text.html', locals())
 
 
+@login_required
 @never_cache
 def book_pdf(request, slug, mobile=False):
     book = get_object_or_404(Book, slug=slug)
 @never_cache
 def book_pdf(request, slug, mobile=False):
     book = get_object_or_404(Book, slug=slug)
@@ -278,6 +287,7 @@ def book_pdf(request, slug, mobile=False):
                 book.slug + '.pdf', 'application/pdf')
 
 
                 book.slug + '.pdf', 'application/pdf')
 
 
+@login_required
 @never_cache
 def book_epub(request, slug):
     book = get_object_or_404(Book, slug=slug)
 @never_cache
 def book_epub(request, slug):
     book = get_object_or_404(Book, slug=slug)
@@ -296,6 +306,7 @@ def book_epub(request, slug):
     return response
 
 
     return response
 
 
+@login_required
 @never_cache
 def book_mobi(request, slug):
     book = get_object_or_404(Book, slug=slug)
 @never_cache
 def book_mobi(request, slug):
     book = get_object_or_404(Book, slug=slug)
@@ -444,7 +455,7 @@ def chunk_edit(request, slug, chunk):
             form.save()
             go_next = request.GET.get('next', None)
             if go_next:
             form.save()
             go_next = request.GET.get('next', None)
             if go_next:
-                go_next = urlquote_plus(unquote(iri_to_uri(go_next)), safe='/?=&')
+                go_next = quote_plus(unquote(iri_to_uri(go_next)), safe='/?=&')
             else:
                 go_next = doc.book.get_absolute_url()
             return http.HttpResponseRedirect(go_next)
             else:
                 go_next = doc.book.get_absolute_url()
             return http.HttpResponseRedirect(go_next)
@@ -455,7 +466,7 @@ def chunk_edit(request, slug, chunk):
     if referer:
         parts = urlsplit(referer)
         parts = ['', ''] + list(parts[2:])
     if referer:
         parts = urlsplit(referer)
         parts = ['', ''] + list(parts[2:])
-        go_next = urlquote_plus(urlunsplit(parts))
+        go_next = quote_plus(urlunsplit(parts))
     else:
         go_next = ''
 
     else:
         go_next = ''
 
@@ -634,7 +645,7 @@ class GalleryView(UploadView):
         return "%s%s/" % (settings.IMAGE_DIR, self.object.gallery)
 
 
         return "%s%s/" % (settings.IMAGE_DIR, self.object.gallery)
 
 
-def active_users_list(request):
+def active_users_list(request, csv=False):
     year = int(request.GET.get('y', date.today().year))
     by_user = defaultdict(lambda: 0)
     by_email = defaultdict(lambda: 0)
     year = int(request.GET.get('y', date.today().year))
     by_user = defaultdict(lambda: 0)
     by_email = defaultdict(lambda: 0)
@@ -659,10 +670,24 @@ def active_users_list(request):
     for email, count in by_email.items():
         active_users.append((email, names_by_email[email], count))
     active_users.sort(key=lambda x: -x[2])
     for email, count in by_email.items():
         active_users.append((email, names_by_email[email], count))
     active_users.sort(key=lambda x: -x[2])
-    return render(request, 'documents/active_users_list.html', {
-        'users': active_users,
-        'year': year,
-    })
+    if csv:
+        return http.HttpResponse(
+            '\n'.join((
+                ','.join(
+                    (str(x[2]), x[0], ','.join(x[1]))
+                )
+                for x in active_users
+            )),
+            content_type='text/csv',
+            headers={
+                'Content-Disposition': f'attachment; filename=redakcja-{year}.csv',
+            }
+        )
+    else:
+        return render(request, 'documents/active_users_list.html', {
+            'users': active_users,
+            'year': year,
+        })
 
 
 @user_passes_test(lambda u: u.is_superuser)
 
 
 @user_passes_test(lambda u: u.is_superuser)