Create I-D Search form, with field names matching the old search

form, to allow bookmarked searches to continue to work.
 - Legacy-Id: 200
This commit is contained in:
Bill Fenner 2007-06-01 02:05:00 +00:00
parent 2de4f6d6d7
commit 4a5c6b5c57
4 changed files with 72 additions and 36 deletions

View file

@ -1,4 +1,18 @@
from django import newforms as forms
from models import IESGLogin, IDStatus, Area, IDState, IDSubState
class IDSearch(forms.Form):
search_job_owner = forms.ChoiceField(choices=())
search_group_acronym = forms.CharField(widget=forms.TextInput(attrs={'size': 6, 'maxlength': 10}))
search_status_id = forms.ModelChoiceField(IDStatus.objects.all(), empty_label="--All")
search_area_acronym = forms.ModelChoiceField(Area.objects.filter(status=Area.ACTIVE), empty_label="--All/Any")
search_cur_state = forms.ModelChoiceField(IDState.objects.all(), empty_label="--All/Any")
sub_state_id = forms.ModelChoiceField(IDSubState.objects.all(), empty_label="--All Substates")
search_filename = forms.CharField(widget=forms.TextInput(attrs={'size': 15, 'maxlength': 60}))
search_rfcnumber = forms.CharField(widget=forms.TextInput(attrs={'size': 5, 'maxlength': 60}))
def __init__(self, *args, **kwargs):
super(IDSearch, self).__init__(*args, **kwargs)
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')]
class EmailFeedback(forms.Form):
category = forms.CharField(widget=forms.HiddenInput())

View file

@ -66,6 +66,7 @@ class IDSubState(models.Model):
pass
class Area(models.Model):
ACTIVE=1
area_acronym = models.ForeignKey(Acronym, primary_key=True, unique=True)
start_date = models.DateField(auto_now_add=True)
concluded_date = models.DateField(null=True, blank=True)

View file

@ -6,7 +6,7 @@ from django.shortcuts import get_object_or_404, render_to_response
from django.db.models import Q
from django.views.generic.list_detail import object_detail, object_list
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, Rfc
from ietf.idtracker.forms import EmailFeedback
from ietf.idtracker.forms import IDSearch, EmailFeedback
from ietf.utils.mail import send_mail_text
# Override default form field mappings
@ -22,43 +22,44 @@ def myfields(f):
return f.formfield()
def search(request):
# todo: check if these field names work for backwards
# compatability
InternetDraftForm = forms.models.form_for_model(InternetDraft, formfield_callback=myfields)
idform = InternetDraftForm(request.REQUEST)
InternalForm = forms.models.form_for_model(IDInternal, formfield_callback=myfields)
form = InternalForm(request.REQUEST)
# for compatability with old tracker form, which has
# "all substates" = 6.
args = request.REQUEST
if args.get('sub_state_id', '') == '6':
args['sub_state_id'] = '0'
form = IDSearch(args)
# if there's a post, do the search and supply results to the template
searching = False
# filename, rfc_number, group searches are seperate because
# they can't be represented as simple searches in the data model.
qdict = {
'job_owner': 'job_owner',
'cur_state': 'cur_state',
'cur_sub_state': 'cur_sub_state',
'area_acronym': 'area_acronym',
'note': 'note__icontains',
'search_job_owner': 'job_owner',
'search_cur_state': 'cur_state',
'sub_state_id': 'cur_sub_state',
'search_area_acronym': 'area_acronym',
}
q_objs = []
for k in qdict.keys() + ['group', 'rfc_number', 'filename']:
if request.REQUEST.has_key(k):
for k in qdict.keys() + ['search_group_acronym', 'search_rfcnumber', 'search_filename', 'search_status_id']:
if args.has_key(k):
searching = True
if request.REQUEST[k] != '' and qdict.has_key(k):
q_objs.append(Q(**{qdict[k]: request.REQUEST[k]}))
if args[k] != '' and qdict.has_key(k):
q_objs.append(Q(**{qdict[k]: args[k]}))
if searching:
group = request.REQUEST.get('group', '')
group = args.get('search_group_acronym', '')
if group != '':
rfclist = [rfc.rfc_number for rfc in Rfc.objects.all().filter(group_acronym=group)]
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(group__acronym=group)]
q_objs.append(Q(draft__in=draftlist)&Q(rfc_flag=0)|Q(draft__in=rfclist)&Q(rfc_flag=1))
rfc_number = request.REQUEST.get('rfc_number', '')
rfc_number = args.get('search_rfcnumber', '')
if rfc_number != '':
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(rfc_number=rfc_number)]
q_objs.append(Q(draft__in=draftlist)&Q(rfc_flag=0)|Q(draft=rfc_number)&Q(rfc_flag=1))
filename = request.REQUEST.get('filename', '')
filename = args.get('search_filename', '')
if filename != '':
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(filename__icontains=filename)]
q_objs.append(Q(draft__in=draftlist,rfc_flag=0))
q_objs.append(Q(draft__filename__icontains=filename,rfc_flag=0))
status = args.get('search_status_id', '')
if status != '':
q_objs.append(Q(draft__status=status,rfc_flag=0))
matches = IDInternal.objects.all().filter(*q_objs).filter(primary_flag=1)
matches = matches.order_by('cur_state', 'cur_sub_state_id')
else:
@ -66,7 +67,6 @@ def search(request):
return render_to_response('idtracker/idtracker_search.html', {
'form': form,
'idform': idform,
'matches': matches,
'searching': searching,
}, context_instance=RequestContext(request))

View file

@ -4,37 +4,58 @@
{% block idcontent %}
<form method="post">
{# does this belong here or is it better in the head? #}
<script language="javascript">
function clear_fields() {
document.search_form.search_job_owner.selectedIndex=0;
document.search_form.search_status_id.selectedIndex=0;
document.search_form.search_area_acronym.selectedIndex=0;
document.search_form.search_cur_state.selectedIndex=0;
document.search_form.sub_state_id.selectedIndex=0;
document.search_form.search_group_acronym.value = "";
document.search_form.search_filename.value = "";
document.search_form.search_rfcnumber.value = "";
return true;
}
</script>
<form action="." method="GET" name="search_form">
<center>
{% if searching %}
{% else %}
<img src="https://www.ietf.org/images/ietflogo2e.gif" border=0><br>
<h1>IETF I-D TRACKER</h1>
{% endif %}
<table cellpadding="1" cellspacing="0" border="0">
<tr bgcolor="silver">
<th colspan="2">I-D - Search Criteria</th>
</tr>
<tr>
<td align="right"><label for="id_job_owner"><b>Responsible
<td align="right"><label for="id_search_job_owner"><b>Responsible
AD:</b></label></td>
<td>{{ form.job_owner }}&nbsp;&nbsp;&nbsp;<label for="id_group">
<b>WG Acronym:</b></label>{{ idform.group }}&nbsp;&nbsp;&nbsp;<label
for="id_status"><b>Status:</b></label>
{{ idform.status }}</td>
<td>{{ form.search_job_owner }}&nbsp;&nbsp;&nbsp;<label for="id_search_group_acronym">
<b>WG Acronym:</b></label>{{ form.search_group_acronym }}&nbsp;&nbsp;&nbsp;<label
for="id_search_status_id"><b>Status:</b></label>
{{ form.search_status_id }}</td>
</tr>
<tr>
<td align="right"><label for="id_cur_state"><b>Document
<td align="right"><label for="id_search_cur_state"><b>Document
State:</b></label></td>
<td>{{ form.cur_state }} <label for="id_cur_sub_state"><b>sub
state</b>: {{ form.cur_sub_state }}</label> </td>
<td>{{ form.search_cur_state }} <label for="id_sub_state_id"><b>sub
state</b>: {{ form.sub_state_id }}</label> </td>
</tr>
<tr>
<td align="right"><label for=
"id_filename"><b>Filename:</b></label></td>
<td>{{ idform.filename }} &nbsp;&nbsp;&nbsp; <label for=
"id_rfc_number"><b>RFC Number:</b></label> {{ idform.rfc_number }}
&nbsp;&nbsp;&nbsp; <label for="id_area_acronym"><b>Area:</b></label>
{{ form.area_acronym }}</td>
"id_search_filename"><b>Filename:</b></label></td>
<td>{{ form.search_filename }} &nbsp;&nbsp;&nbsp; <label for=
"id_search_rfcnumber"><b>RFC Number:</b></label> {{ form.search_rfcnumber }}
&nbsp;&nbsp;&nbsp; <label for="id_search_area_acronym"><b>Area:</b></label>
{{ form.search_area_acronym }}</td>
</tr>
<TR BGCOLOR="silver">