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:
parent
2de4f6d6d7
commit
4a5c6b5c57
|
@ -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())
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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 }} <label for="id_group">
|
||||
<b>WG Acronym:</b></label>{{ idform.group }} <label
|
||||
for="id_status"><b>Status:</b></label>
|
||||
{{ idform.status }}</td>
|
||||
<td>{{ form.search_job_owner }} <label for="id_search_group_acronym">
|
||||
<b>WG Acronym:</b></label>{{ form.search_group_acronym }} <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 }} <label for=
|
||||
"id_rfc_number"><b>RFC Number:</b></label> {{ idform.rfc_number }}
|
||||
<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 }} <label for=
|
||||
"id_search_rfcnumber"><b>RFC Number:</b></label> {{ form.search_rfcnumber }}
|
||||
<label for="id_search_area_acronym"><b>Area:</b></label>
|
||||
{{ form.search_area_acronym }}</td>
|
||||
</tr>
|
||||
|
||||
<TR BGCOLOR="silver">
|
||||
|
|
Loading…
Reference in a new issue