--- /dev/null
+from django.shortcuts import render_to_response, get_object_or_404
+from django.http import Http404
+from django.contrib.auth.decorators import login_required
+from django.db import connection
+
+from models import CommitFest
+
+@login_required
+def authorstats(request, cfid):
+ cf = get_object_or_404(CommitFest, pk=cfid)
+ if not request.user.is_staff:
+ raise Http404("Only CF Managers can do that.")
+
+ cursor = connection.cursor()
+ cursor.execute("""WITH patches(id,name) AS (
+ SELECT p.id, name
+ FROM commitfest_patch p
+ INNER JOIN commitfest_patchoncommitfest poc ON poc.patch_id=p.id AND poc.commitfest_id=%(cid)s
+),
+authors(userid, authorpatches) AS (
+ SELECT pa.user_id, array_agg(array_to_json(ARRAY[p.id::text, p.name]))
+ FROM commitfest_patch_authors pa
+ INNER JOIN patches p ON p.id=pa.patch_id
+ GROUP BY pa.user_id
+),
+reviewers(userid, reviewerpatches) AS (
+ SELECT pr.user_id, array_agg(array_to_json(ARRAY[p.id::text, p.name]))
+ FROM commitfest_patch_reviewers pr
+ INNER JOIN patches p ON p.id=pr.patch_id
+ GROUP BY pr.user_id
+)
+SELECT first_name || ' ' || last_name || ' (' || username ||')', authorpatches, reviewerpatches
+FROM (authors FULL OUTER JOIN reviewers ON authors.userid=reviewers.userid)
+INNER JOIN auth_user u ON u.id=COALESCE(authors.userid, reviewers.userid)
+ORDER BY last_name, first_name
+""", {
+ 'cid': cf.id,
+})
+
+ return render_to_response('report_authors.html', {
+ 'cf': cf,
+ 'report': cursor.fetchall(),
+ 'title': 'Author stats',
+ 'breadcrumbs': [{'title': cf.title, 'href': '/%s/' % cf.pk},],
+ })
--- /dev/null
+{%extends "base.html"%}
+{%load commitfest %}
+{%block contents%}
+
+<table class="table table-striped table-bordered table-hover table-condensed">
+ <thead>
+ <tr>
+ <th>User</th>
+ <th>Author of</th>
+ <th>Reviewer of</th>
+ </tr>
+ </thead>
+ <tbody>
+ {%for user, authorlist, reviewlist in report %}
+ <tr>
+ <td>{{user}}</td>
+ <td>
+ <ul>
+ {%for a in authorlist%}
+ <li><a href="../../{{a.0}}/">{{a.1}}</a></li>
+ {%endfor%}
+ </ul>
+ </td>
+ <td>
+ <ul>
+ {%for r in reviewlist%}
+ <li><a href="../../{{r.0}}/">{{r.1}}</a></li>
+ {%endfor%}
+ </ul>
+ </td>
+ </tr>
+ {%endfor%}
+ </tbody>
+</table>
+
+{%endblock%}
+
url(r'^(\d+)/(\d+)/(comment|review)/', 'pgcommitfest.commitfest.views.comment'),
url(r'^(\d+)/send_email/$', 'pgcommitfest.commitfest.views.send_email'),
url(r'^(\d+)/\d+/send_email/$', 'pgcommitfest.commitfest.views.send_email'),
+ url(r'^(\d+)/reports/authorstats/$', 'pgcommitfest.commitfest.reports.authorstats'),
url(r'^search/$', 'pgcommitfest.commitfest.views.global_search'),
url(r'^ajax/(\w+)/$', 'pgcommitfest.commitfest.ajax.main'),