from datetime import datetime, date, timedelta
import logging
import os
-from urllib.parse import unquote, urlsplit, urlunsplit
+from urllib.parse import quote_plus, unquote, urlsplit, urlunsplit
from django.conf import settings
from django.contrib import auth
from django.http.response import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.utils.encoding import iri_to_uri
-from django.utils.http import urlquote_plus
-from django.utils.translation import ugettext_lazy as _
+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
@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')
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)
book.slug + '.pdf', 'application/pdf')
+@login_required
@never_cache
def book_epub(request, slug):
book = get_object_or_404(Book, slug=slug)
return response
+@login_required
@never_cache
def book_mobi(request, slug):
book = get_object_or_404(Book, slug=slug)
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)
if referer:
parts = urlsplit(referer)
parts = ['', ''] + list(parts[2:])
- go_next = urlquote_plus(urlunsplit(parts))
+ go_next = quote_plus(urlunsplit(parts))
else:
go_next = ''
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)
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)