Commit 46065ab9 authored by Michal Čihař's avatar Michal Čihař

Per user activity charts

parent d8e4972e
......@@ -30,6 +30,12 @@
{% include 'user-activity.html' %}
{% endwith %}
<h3>{% trans "Activity in last 30 days" %}</h3>
<img src="{% url 'monthly_user_activity' user=page_user.username %}">
<h3>{% trans "Activity in last year" %}</h3>
<img src="{% url 'yearly_user_activity' user=page_user.username %}">
<h3>{% trans "Recent contributions" %}</h3>
{% include "last-changes.html" %}
......
......@@ -26,6 +26,7 @@ from weblate.lang.models import Language
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.http import HttpResponse
from django.contrib.auth.models import User
from cStringIO import StringIO
from django.core.urlresolvers import reverse
import cairo
......@@ -239,6 +240,41 @@ def yearly_language_activity(request, lang):
return render_activity(activity)
def monthly_user_activity(request, user):
'''
Show monthly activity chart.
'''
# Process parameters
user = get_object_or_404(User, username=user)
# Get actual stats
activity = Change.objects.month_stats(
user=user
)
# Render chart
return render_activity(activity)
def yearly_user_activity(request, user):
'''
Show yearly activity chart.
'''
# Process parameters
user = get_object_or_404(User, username=user)
# Get actual stats
activity = Change.objects.year_stats(
user=user
)
# Render chart
return render_activity(activity)
def view_activity(request, project=None, subproject=None, lang=None):
'''
Show html with activity charts.
......
......@@ -539,7 +539,7 @@ class ChangeManager(models.Manager):
def base_stats(self, days, step,
project=None, subproject=None, translation=None,
language=None):
language=None, user=None):
'''
Core of daily/weekly/monthly stats calculation.
'''
......@@ -563,6 +563,10 @@ class ChangeManager(models.Manager):
if language is not None:
base = base.filter(translation__language=language)
# Filter by language
if user is not None:
base = base.filter(user=user)
# Count number of changes
result = []
for day in xrange(0, days, step):
......@@ -584,7 +588,7 @@ class ChangeManager(models.Manager):
def month_stats(self,
project=None, subproject=None, translation=None,
language=None):
language=None, user=None):
'''
Reports daily stats for changes.
'''
......@@ -594,12 +598,13 @@ class ChangeManager(models.Manager):
project,
subproject,
translation,
language
language,
user
)
def year_stats(self,
project=None, subproject=None, translation=None,
language=None):
language=None, user=None):
'''
Reports monthly stats for changes.
'''
......@@ -609,5 +614,6 @@ class ChangeManager(models.Manager):
project,
subproject,
translation,
language
language,
user
)
......@@ -166,6 +166,13 @@ urlpatterns = patterns('',
url(r'^activity/language/month/(?P<lang>[^/]*)/$', 'weblate.trans.charts.monthly_language_activity', name='monthly_language_activity'),
url(r'^activity/language/year/(?P<lang>[^/]*)/$', 'weblate.trans.charts.yearly_language_activity', name='yearly_language_activity'),
url(r'^activity/language/html/(?P<lang>[^/]*)/$', 'weblate.trans.charts.view_language_activity', name='view_language_activity'),
url(r'^activity/language/month/(?P<lang>[^/]*)/$', 'weblate.trans.charts.monthly_language_activity', name='monthly_language_activity'),
url(r'^activity/language/year/(?P<lang>[^/]*)/$', 'weblate.trans.charts.yearly_language_activity', name='yearly_language_activity'),
url(r'^activity/user/month/(?P<user>[^/]+)/$', 'weblate.trans.charts.monthly_user_activity', name='monthly_user_activity'),
url(r'^activity/user/year/(?P<user>[^/]+)/$', 'weblate.trans.charts.yearly_user_activity', name='yearly_user_activity'),
url(r'^commit/(?P<project>[^/]*)/$', 'weblate.trans.views.commit_project'),
url(r'^commit/(?P<project>[^/]*)/(?P<subproject>[^/]*)/$', 'weblate.trans.views.commit_subproject'),
url(r'^commit/(?P<project>[^/]*)/(?P<subproject>[^/]*)/(?P<lang>[^/]*)/$', 'weblate.trans.views.commit_translation'),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment