forms.py
4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# -*- coding: utf-8 -*-
import unicodedata
from django import forms
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from haystack.forms import SearchForm
from accounts.models import User
from super_archives.models import Message, MailingList
class ColabSearchForm(SearchForm):
q = forms.CharField(label=_('Search'), required=False)
order = forms.CharField(widget=forms.HiddenInput(), required=False)
type = forms.CharField(required=False, label=_(u'Type'))
author = forms.CharField(required=False, label=_(u'Author'))
# ticket status
tag = forms.CharField(required=False, label=_(u'Status'))
# mailinglist tag
list = forms.MultipleChoiceField(
required=False,
label=_(u'Mailinglist'),
choices=[(v, v) for v in MailingList.objects.values('name')
for (v, v) in v.items()]
)
milestone = forms.CharField(required=False, label=_(u'Milestone'))
priority = forms.CharField(required=False, label=_(u'Priority'))
component = forms.CharField(required=False, label=_(u'Component'))
severity = forms.CharField(required=False, label=_(u'Severity'))
reporter = forms.CharField(required=False, label=_(u'Reporter'))
keywords = forms.CharField(required=False, label=_(u'Keywords'))
collaborators = forms.CharField(required=False, label=_(u'Collaborators'))
repository_name = forms.CharField(required=False, label=_(u'Repository'))
username = forms.CharField(required=False, label=_(u'Username'))
name = forms.CharField(required=False, label=_(u'Name'))
institution = forms.CharField(required=False, label=_(u'Institution'))
role = forms.CharField(required=False, label=_(u'Role'))
def search(self):
if not self.is_valid():
return self.no_query_found()
if self.cleaned_data.get('q'):
q = unicodedata.normalize(
'NFKD', unicode(self.cleaned_data.get('q'))
).encode('ascii', 'ignore')
sqs = self.searchqueryset.auto_query(q)
else:
sqs = self.searchqueryset.all()
if self.cleaned_data['type']:
"It will consider other types with a whitespace"
types = self.cleaned_data['type']
sqs = sqs.filter(type__in=types.split())
if self.cleaned_data['order']:
for option, dict_order in settings.ORDERING_DATA.items():
if self.cleaned_data['order'] == option:
if dict_order['fields']:
sqs = sqs.order_by(*dict_order['fields'])
if self.cleaned_data['author']:
sqs = sqs.filter(
author_and_username__contains=self.cleaned_data['author']
)
if self.cleaned_data['milestone']:
sqs = sqs.filter(milestone=self.cleaned_data['milestone'])
if self.cleaned_data['priority']:
sqs = sqs.filter(priority=self.cleaned_data['priority'])
if self.cleaned_data['severity']:
sqs = sqs.filter(severity=self.cleaned_data['severity'])
if self.cleaned_data['reporter']:
sqs = sqs.filter(reporter=self.cleaned_data['reporter'])
if self.cleaned_data['keywords']:
sqs = sqs.filter(keywords=self.cleaned_data['keywords'])
if self.cleaned_data['collaborators']:
sqs = sqs.filter(collaborators=self.cleaned_data['collaborators'])
if self.cleaned_data['repository_name']:
sqs = sqs.filter(
repository_name=self.cleaned_data['repository_name']
)
if self.cleaned_data['username']:
sqs = sqs.filter(username=self.cleaned_data['username'])
if self.cleaned_data['name']:
sqs = sqs.filter(name=self.cleaned_data['name'])
if self.cleaned_data['institution']:
sqs = sqs.filter(institution=self.cleaned_data['institution'])
if self.cleaned_data['role']:
sqs = sqs.filter(role=self.cleaned_data['role'])
if self.cleaned_data['tag']:
sqs = sqs.filter(tag=self.cleaned_data['tag'])
if self.cleaned_data['list']:
sqs = sqs.filter(tag__in=self.cleaned_data['list'])
if self.load_all:
sqs = sqs.load_all()
return sqs