Skip to content

Commit 4a5c6b5

Browse files
committed
Create I-D Search form, with field names matching the old search
form, to allow bookmarked searches to continue to work. - Legacy-Id: 200
1 parent 2de4f6d commit 4a5c6b5

4 files changed

Lines changed: 72 additions & 36 deletions

File tree

ietf/idtracker/forms.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
11
from django import newforms as forms
2+
from models import IESGLogin, IDStatus, Area, IDState, IDSubState
3+
4+
class IDSearch(forms.Form):
5+
search_job_owner = forms.ChoiceField(choices=())
6+
search_group_acronym = forms.CharField(widget=forms.TextInput(attrs={'size': 6, 'maxlength': 10}))
7+
search_status_id = forms.ModelChoiceField(IDStatus.objects.all(), empty_label="--All")
8+
search_area_acronym = forms.ModelChoiceField(Area.objects.filter(status=Area.ACTIVE), empty_label="--All/Any")
9+
search_cur_state = forms.ModelChoiceField(IDState.objects.all(), empty_label="--All/Any")
10+
sub_state_id = forms.ModelChoiceField(IDSubState.objects.all(), empty_label="--All Substates")
11+
search_filename = forms.CharField(widget=forms.TextInput(attrs={'size': 15, 'maxlength': 60}))
12+
search_rfcnumber = forms.CharField(widget=forms.TextInput(attrs={'size': 5, 'maxlength': 60}))
13+
def __init__(self, *args, **kwargs):
14+
super(IDSearch, self).__init__(*args, **kwargs)
15+
self.fields['search_job_owner'].choices = [('', '--All/Any')] + [(ad.id, str(ad)) for ad in IESGLogin.objects.filter(user_level=1).order_by('last_name')] + [('-99', '----------')] + [(ad.id, str(ad)) for ad in IESGLogin.objects.filter(user_level=2).order_by('last_name')]
216

317
class EmailFeedback(forms.Form):
418
category = forms.CharField(widget=forms.HiddenInput())

ietf/idtracker/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class Admin:
6666
pass
6767

6868
class Area(models.Model):
69+
ACTIVE=1
6970
area_acronym = models.ForeignKey(Acronym, primary_key=True, unique=True)
7071
start_date = models.DateField(auto_now_add=True)
7172
concluded_date = models.DateField(null=True, blank=True)

ietf/idtracker/views.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from django.db.models import Q
77
from django.views.generic.list_detail import object_detail, object_list
88
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, Rfc
9-
from ietf.idtracker.forms import EmailFeedback
9+
from ietf.idtracker.forms import IDSearch, EmailFeedback
1010
from ietf.utils.mail import send_mail_text
1111

1212
# Override default form field mappings
@@ -22,51 +22,51 @@ def myfields(f):
2222
return f.formfield()
2323

2424
def search(request):
25-
# todo: check if these field names work for backwards
26-
# compatability
27-
InternetDraftForm = forms.models.form_for_model(InternetDraft, formfield_callback=myfields)
28-
idform = InternetDraftForm(request.REQUEST)
29-
InternalForm = forms.models.form_for_model(IDInternal, formfield_callback=myfields)
30-
form = InternalForm(request.REQUEST)
25+
# for compatability with old tracker form, which has
26+
# "all substates" = 6.
27+
args = request.REQUEST
28+
if args.get('sub_state_id', '') == '6':
29+
args['sub_state_id'] = '0'
30+
form = IDSearch(args)
3131
# if there's a post, do the search and supply results to the template
3232
searching = False
3333
# filename, rfc_number, group searches are seperate because
3434
# they can't be represented as simple searches in the data model.
3535
qdict = {
36-
'job_owner': 'job_owner',
37-
'cur_state': 'cur_state',
38-
'cur_sub_state': 'cur_sub_state',
39-
'area_acronym': 'area_acronym',
40-
'note': 'note__icontains',
36+
'search_job_owner': 'job_owner',
37+
'search_cur_state': 'cur_state',
38+
'sub_state_id': 'cur_sub_state',
39+
'search_area_acronym': 'area_acronym',
4140
}
4241
q_objs = []
43-
for k in qdict.keys() + ['group', 'rfc_number', 'filename']:
44-
if request.REQUEST.has_key(k):
42+
for k in qdict.keys() + ['search_group_acronym', 'search_rfcnumber', 'search_filename', 'search_status_id']:
43+
if args.has_key(k):
4544
searching = True
46-
if request.REQUEST[k] != '' and qdict.has_key(k):
47-
q_objs.append(Q(**{qdict[k]: request.REQUEST[k]}))
45+
if args[k] != '' and qdict.has_key(k):
46+
q_objs.append(Q(**{qdict[k]: args[k]}))
4847
if searching:
49-
group = request.REQUEST.get('group', '')
48+
group = args.get('search_group_acronym', '')
5049
if group != '':
5150
rfclist = [rfc.rfc_number for rfc in Rfc.objects.all().filter(group_acronym=group)]
5251
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(group__acronym=group)]
5352
q_objs.append(Q(draft__in=draftlist)&Q(rfc_flag=0)|Q(draft__in=rfclist)&Q(rfc_flag=1))
54-
rfc_number = request.REQUEST.get('rfc_number', '')
53+
rfc_number = args.get('search_rfcnumber', '')
5554
if rfc_number != '':
5655
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(rfc_number=rfc_number)]
5756
q_objs.append(Q(draft__in=draftlist)&Q(rfc_flag=0)|Q(draft=rfc_number)&Q(rfc_flag=1))
58-
filename = request.REQUEST.get('filename', '')
57+
filename = args.get('search_filename', '')
5958
if filename != '':
60-
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(filename__icontains=filename)]
61-
q_objs.append(Q(draft__in=draftlist,rfc_flag=0))
59+
q_objs.append(Q(draft__filename__icontains=filename,rfc_flag=0))
60+
status = args.get('search_status_id', '')
61+
if status != '':
62+
q_objs.append(Q(draft__status=status,rfc_flag=0))
6263
matches = IDInternal.objects.all().filter(*q_objs).filter(primary_flag=1)
6364
matches = matches.order_by('cur_state', 'cur_sub_state_id')
6465
else:
6566
matches = None
6667

6768
return render_to_response('idtracker/idtracker_search.html', {
6869
'form': form,
69-
'idform': idform,
7070
'matches': matches,
7171
'searching': searching,
7272
}, context_instance=RequestContext(request))

ietf/templates/idtracker/idtracker_search.html

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,58 @@
44

55
{% block idcontent %}
66

7-
<form method="post">
7+
{# does this belong here or is it better in the head? #}
8+
<script language="javascript">
9+
function clear_fields() {
10+
document.search_form.search_job_owner.selectedIndex=0;
11+
document.search_form.search_status_id.selectedIndex=0;
12+
document.search_form.search_area_acronym.selectedIndex=0;
13+
document.search_form.search_cur_state.selectedIndex=0;
14+
document.search_form.sub_state_id.selectedIndex=0;
15+
document.search_form.search_group_acronym.value = "";
16+
document.search_form.search_filename.value = "";
17+
document.search_form.search_rfcnumber.value = "";
18+
return true;
19+
}
20+
</script>
21+
22+
<form action="." method="GET" name="search_form">
823

924
<center>
25+
{% if searching %}
26+
{% else %}
27+
<img src="https://www.ietf.org/images/ietflogo2e.gif" border=0><br>
28+
<h1>IETF I-D TRACKER</h1>
29+
{% endif %}
30+
1031
<table cellpadding="1" cellspacing="0" border="0">
1132
<tr bgcolor="silver">
1233
<th colspan="2">I-D - Search Criteria</th>
1334
</tr>
1435

1536
<tr>
16-
<td align="right"><label for="id_job_owner"><b>Responsible
37+
<td align="right"><label for="id_search_job_owner"><b>Responsible
1738
AD:</b></label></td>
18-
<td>{{ form.job_owner }}&nbsp;&nbsp;&nbsp;<label for="id_group">
19-
<b>WG Acronym:</b></label>{{ idform.group }}&nbsp;&nbsp;&nbsp;<label
20-
for="id_status"><b>Status:</b></label>
21-
{{ idform.status }}</td>
39+
<td>{{ form.search_job_owner }}&nbsp;&nbsp;&nbsp;<label for="id_search_group_acronym">
40+
<b>WG Acronym:</b></label>{{ form.search_group_acronym }}&nbsp;&nbsp;&nbsp;<label
41+
for="id_search_status_id"><b>Status:</b></label>
42+
{{ form.search_status_id }}</td>
2243
</tr>
2344

2445
<tr>
25-
<td align="right"><label for="id_cur_state"><b>Document
46+
<td align="right"><label for="id_search_cur_state"><b>Document
2647
State:</b></label></td>
27-
<td>{{ form.cur_state }} <label for="id_cur_sub_state"><b>sub
28-
state</b>: {{ form.cur_sub_state }}</label> </td>
48+
<td>{{ form.search_cur_state }} <label for="id_sub_state_id"><b>sub
49+
state</b>: {{ form.sub_state_id }}</label> </td>
2950
</tr>
3051

3152
<tr>
3253
<td align="right"><label for=
33-
"id_filename"><b>Filename:</b></label></td>
34-
<td>{{ idform.filename }} &nbsp;&nbsp;&nbsp; <label for=
35-
"id_rfc_number"><b>RFC Number:</b></label> {{ idform.rfc_number }}
36-
&nbsp;&nbsp;&nbsp; <label for="id_area_acronym"><b>Area:</b></label>
37-
{{ form.area_acronym }}</td>
54+
"id_search_filename"><b>Filename:</b></label></td>
55+
<td>{{ form.search_filename }} &nbsp;&nbsp;&nbsp; <label for=
56+
"id_search_rfcnumber"><b>RFC Number:</b></label> {{ form.search_rfcnumber }}
57+
&nbsp;&nbsp;&nbsp; <label for="id_search_area_acronym"><b>Area:</b></label>
58+
{{ form.search_area_acronym }}</td>
3859
</tr>
3960

4061
<TR BGCOLOR="silver">

0 commit comments

Comments
 (0)