-# -*- coding: utf-8 -*-
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
from collections import defaultdict
from datetime import datetime, date, timedelta
import logging
from django.contrib import auth
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required, permission_required
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.db.models import Count, Q
from django.db import transaction
from django import http
form = forms.DocumentCreateForm(request.POST, request.FILES)
if form.is_valid():
- if request.user.is_authenticated():
+ if request.user.is_authenticated:
creator = request.user
else:
creator = None
if form.is_valid():
from slugify import slugify
- if request.user.is_authenticated():
+ if request.user.is_authenticated:
creator = request.user
else:
creator = None
doc = book.wldocument(parse_dublincore=False)
html = doc.as_html(options={'gallery': "'%s'" % book.gallery_url()})
- html = html.get_bytes() if html is not None else ''
+ html = html.get_bytes().decode('utf-8') if html is not None else ''
# response = http.HttpResponse(html, content_type='text/html')
# return response
# book_themes = {}
if request.method == "POST":
form = forms.ChunkAddForm(request.POST, instance=doc)
if form.is_valid():
- if request.user.is_authenticated():
+ if request.user.is_authenticated:
creator = request.user
else:
creator = None
@login_required
@require_POST
def chunk_mass_edit(request):
- ids = map(int, filter(lambda i: i.strip()!='', request.POST.get('ids').split(',')))
- chunks = map(lambda i: Chunk.objects.get(id=i), ids)
+ ids = [int(i) for i in request.POST.get('ids').split(',') if i.strip()]
+ chunks = list(Chunk.objects.filter(id__in=ids))
stage = request.POST.get('stage')
if stage:
def active_users_list(request):
- since = date(date.today().year, 1, 1)
+ year = int(request.GET.get('y', date.today().year))
by_user = defaultdict(lambda: 0)
by_email = defaultdict(lambda: 0)
names_by_email = defaultdict(set)
for change_model in (Chunk.change_model, Image.change_model):
for c in change_model.objects.filter(
- created_at__gte=since).order_by(
+ created_at__year=year).order_by(
'author', 'author_email', 'author_name').values(
'author', 'author_name', 'author_email').annotate(
c=Count('author'), ce=Count('author_email')).distinct():
by_user[c['author']] += c['c']
else:
by_email[c['author_email']] += c['ce']
- if c['author_name'].strip():
+ if (c['author_name'] or '').strip():
names_by_email[c['author_email']].add(c['author_name'])
for user in User.objects.filter(pk__in=by_user):
by_email[user.email] += by_user[user.pk]
active_users.sort(key=lambda x: -x[2])
return render(request, 'catalogue/active_users_list.html', {
'users': active_users,
- 'since': since,
+ 'year': year,
})