Commit ee6a0605e6b96540872619e5dd636b2e642f366c
Exists in
master
and in
39 other branches
Merge branch 'master' of github.com:TracyWebTech/colab
Showing
3 changed files
with
43 additions
and
15 deletions
Show diff stats
src/accounts/views.py
... | ... | @@ -23,6 +23,7 @@ from haystack.query import SearchQuerySet |
23 | 23 | from super_archives.models import EmailAddress, Message |
24 | 24 | from super_archives.utils.email import send_email_lists |
25 | 25 | from search.utils import trans |
26 | +from proxy.models import WikiCollabCount, TicketCollabCount | |
26 | 27 | from .forms import (UserCreationForm, ListsForm, UserUpdateForm, |
27 | 28 | ChangeXMPPPasswordForm) |
28 | 29 | from .errors import XMPPChangePwdException |
... | ... | @@ -65,11 +66,25 @@ class UserProfileDetailView(UserProfileBaseMixin, DetailView): |
65 | 66 | {'fullname_and_username__contains': user.username}, |
66 | 67 | ) |
67 | 68 | |
69 | + counter_class = { | |
70 | + 'wiki': WikiCollabCount, | |
71 | + 'ticket': TicketCollabCount, | |
72 | + } | |
73 | + | |
68 | 74 | for type in ['thread', 'ticket', 'wiki', 'changeset', 'attachment']: |
69 | - sqs = SearchQuerySet() | |
70 | - for filter_or in fields_or_lookup: | |
71 | - sqs = sqs.filter_or(type=type, **filter_or) | |
72 | - count_types[trans(type)] = sqs.count() | |
75 | + CounterClass = counter_class.get(type) | |
76 | + if CounterClass: | |
77 | + try: | |
78 | + counter = CounterClass.objects.get(username=user.username) | |
79 | + except CounterClass.DoesNotExist: | |
80 | + count_types[trans(type)] = 0 | |
81 | + else: | |
82 | + count_types[trans(type)] = counter.count | |
83 | + else: | |
84 | + sqs = SearchQuerySet() | |
85 | + for filter_or in fields_or_lookup: | |
86 | + sqs = sqs.filter_or(type=type, **filter_or) | |
87 | + count_types[trans(type)] = sqs.count() | |
73 | 88 | |
74 | 89 | context['type_count'] = count_types |
75 | 90 | ... | ... |
src/badger/utils.py
... | ... | @@ -2,16 +2,14 @@ |
2 | 2 | |
3 | 3 | from django.db.models import Count |
4 | 4 | |
5 | -from proxy.models import Revision, Ticket, Wiki | |
5 | +from proxy.models import (Revision, Ticket, Wiki, | |
6 | + WikiCollabCount, TicketCollabCount) | |
6 | 7 | from accounts.models import User |
7 | 8 | |
8 | 9 | |
9 | 10 | def get_wiki_counters(): |
10 | - return { | |
11 | - author: count for author, count in Wiki.objects.values_list( | |
12 | - 'author' | |
13 | - ).annotate(count=Count('author')) | |
14 | - } | |
11 | + return {author: count for author, count in | |
12 | + WikiCollabCount.objects.values_list()} | |
15 | 13 | |
16 | 14 | |
17 | 15 | def get_revision_counters(): |
... | ... | @@ -23,11 +21,8 @@ def get_revision_counters(): |
23 | 21 | |
24 | 22 | |
25 | 23 | def get_ticket_counters(): |
26 | - return { | |
27 | - author: count for author, count in Ticket.objects.values_list( | |
28 | - 'author' | |
29 | - ).annotate(count=Count('author')) | |
30 | - } | |
24 | + return {author: count for author, count in | |
25 | + TicketCollabCount.objects.values_list()} | |
31 | 26 | |
32 | 27 | |
33 | 28 | def get_users_counters(): | ... | ... |
src/proxy/models.py
... | ... | @@ -130,3 +130,21 @@ class Wiki(models.Model, HitCounterModelMixin): |
130 | 130 | return User.objects.get(username=self.modified_by) |
131 | 131 | except User.DoesNotExist: |
132 | 132 | return None |
133 | + | |
134 | + | |
135 | +class WikiCollabCount(models.Model): | |
136 | + author = models.TextField(primary_key=True) | |
137 | + count = models.IntegerField() | |
138 | + | |
139 | + class Meta: | |
140 | + managed = False | |
141 | + db_table = 'wiki_collab_count_view' | |
142 | + | |
143 | + | |
144 | +class TicketCollabCount(models.Model): | |
145 | + author = models.TextField(primary_key=True) | |
146 | + count = models.IntegerField() | |
147 | + | |
148 | + class Meta: | |
149 | + managed = False | |
150 | + db_table = 'ticket_collab_count_view' | ... | ... |