# HG changeset patch # User neko259 # Date 2016-06-01 09:24:55 # Node ID 5e3e9d010c7f8fbc62fefd0e3c8221c5068539aa # Parent bbd92ab2f21bb894534c889aa818486282416e74 Messages statistics for day/week/month diff --git a/boards/locale/ru/LC_MESSAGES/django.mo b/boards/locale/ru/LC_MESSAGES/django.mo index ace7a4d7a7ee0d4358ede4f1337f33ea69ac1c15..3e2810a7292e37580f8fd16420e29973d4521cad GIT binary patch literal 10268 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 JS?0^-zW|xt8yElp diff --git a/boards/locale/ru/LC_MESSAGES/django.po b/boards/locale/ru/LC_MESSAGES/django.po --- a/boards/locale/ru/LC_MESSAGES/django.po +++ b/boards/locale/ru/LC_MESSAGES/django.po @@ -548,3 +548,6 @@ msgstr "Удалить пост" msgid "Delete thread" msgstr "Удалить тему" + +msgid "Messages per day/week/month:" +msgstr "Сообщений за день/неделю/месяц:" diff --git a/boards/models/post/manager.py b/boards/models/post/manager.py --- a/boards/models/post/manager.py +++ b/boards/models/post/manager.py @@ -122,6 +122,20 @@ class PostManager(models.Manager): return ppd + def get_post_per_days(self, days) -> int: + day_end = date.today() + timedelta(1) + day_start = day_end - timedelta(days) + + day_time_start = timezone.make_aware(datetime.combine( + day_start, dtime()), timezone.get_current_timezone()) + day_time_end = timezone.make_aware(datetime.combine( + day_end, dtime()), timezone.get_current_timezone()) + + return self.filter( + pub_time__lte=day_time_end, + pub_time__gte=day_time_start).count() + + @transaction.atomic def import_post(self, title: str, text: str, pub_time: str, global_id, opening_post=None, tags=list(), files=list(), diff --git a/boards/templates/boards/authors.html b/boards/templates/boards/authors.html --- a/boards/templates/boards/authors.html +++ b/boards/templates/boards/authors.html @@ -12,6 +12,7 @@

{% trans 'Statistics' %}

{% trans 'Size of media:' %} {{ media_size|filesizeformat }}.

{% blocktrans count count=post_count %}{{ count }} message{% plural %}messages{% endblocktrans %}.

+

{% trans 'Messages per day/week/month:' %} {{ post_per_day }}/{{ post_per_week }}/{{ post_per_month }}

{% trans 'Authors' %}

{% for nick, values in authors.items %}

diff --git a/boards/views/authors.py b/boards/views/authors.py --- a/boards/views/authors.py +++ b/boards/views/authors.py @@ -12,6 +12,9 @@ from boards.models import Post PARAM_AUTHORS = 'authors' PARAM_MEDIA_SIZE = 'media_size' PARAM_POST_COUNT = 'post_count' +PARAM_POST_PER_DAY = 'post_per_day' +PARAM_POST_PER_WEEK = 'post_per_week' +PARAM_POST_PER_MONTH = 'post_per_month' class AuthorsView(BaseBoardView): @@ -22,6 +25,10 @@ class AuthorsView(BaseBoardView): params[PARAM_MEDIA_SIZE] = self._get_directory_size(neboard.settings.MEDIA_ROOT) params[PARAM_POST_COUNT] = Post.objects.count() + params[PARAM_POST_PER_DAY] = Post.objects.get_post_per_days(1) + params[PARAM_POST_PER_WEEK] = Post.objects.get_post_per_days(7) + params[PARAM_POST_PER_MONTH] = Post.objects.get_post_per_days(30) + return render(request, 'boards/authors.html', params) @cached_result()