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 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):
|
class EmailFeedback(forms.Form):
|
||||||
category = forms.CharField(widget=forms.HiddenInput())
|
category = forms.CharField(widget=forms.HiddenInput())
|
||||||
|
|
|
@ -66,6 +66,7 @@ class IDSubState(models.Model):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Area(models.Model):
|
class Area(models.Model):
|
||||||
|
ACTIVE=1
|
||||||
area_acronym = models.ForeignKey(Acronym, primary_key=True, unique=True)
|
area_acronym = models.ForeignKey(Acronym, primary_key=True, unique=True)
|
||||||
start_date = models.DateField(auto_now_add=True)
|
start_date = models.DateField(auto_now_add=True)
|
||||||
concluded_date = models.DateField(null=True, blank=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.db.models import Q
|
||||||
from django.views.generic.list_detail import object_detail, object_list
|
from django.views.generic.list_detail import object_detail, object_list
|
||||||
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, Rfc
|
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
|
from ietf.utils.mail import send_mail_text
|
||||||
|
|
||||||
# Override default form field mappings
|
# Override default form field mappings
|
||||||
|
@ -22,43 +22,44 @@ def myfields(f):
|
||||||
return f.formfield()
|
return f.formfield()
|
||||||
|
|
||||||
def search(request):
|
def search(request):
|
||||||
# todo: check if these field names work for backwards
|
# for compatability with old tracker form, which has
|
||||||
# compatability
|
# "all substates" = 6.
|
||||||
InternetDraftForm = forms.models.form_for_model(InternetDraft, formfield_callback=myfields)
|
args = request.REQUEST
|
||||||
idform = InternetDraftForm(request.REQUEST)
|
if args.get('sub_state_id', '') == '6':
|
||||||
InternalForm = forms.models.form_for_model(IDInternal, formfield_callback=myfields)
|
args['sub_state_id'] = '0'
|
||||||
form = InternalForm(request.REQUEST)
|
form = IDSearch(args)
|
||||||
# if there's a post, do the search and supply results to the template
|
# if there's a post, do the search and supply results to the template
|
||||||
searching = False
|
searching = False
|
||||||
# filename, rfc_number, group searches are seperate because
|
# filename, rfc_number, group searches are seperate because
|
||||||
# they can't be represented as simple searches in the data model.
|
# they can't be represented as simple searches in the data model.
|
||||||
qdict = {
|
qdict = {
|
||||||
'job_owner': 'job_owner',
|
'search_job_owner': 'job_owner',
|
||||||
'cur_state': 'cur_state',
|
'search_cur_state': 'cur_state',
|
||||||
'cur_sub_state': 'cur_sub_state',
|
'sub_state_id': 'cur_sub_state',
|
||||||
'area_acronym': 'area_acronym',
|
'search_area_acronym': 'area_acronym',
|
||||||
'note': 'note__icontains',
|
|
||||||
}
|
}
|
||||||
q_objs = []
|
q_objs = []
|
||||||
for k in qdict.keys() + ['group', 'rfc_number', 'filename']:
|
for k in qdict.keys() + ['search_group_acronym', 'search_rfcnumber', 'search_filename', 'search_status_id']:
|
||||||
if request.REQUEST.has_key(k):
|
if args.has_key(k):
|
||||||
searching = True
|
searching = True
|
||||||
if request.REQUEST[k] != '' and qdict.has_key(k):
|
if args[k] != '' and qdict.has_key(k):
|
||||||
q_objs.append(Q(**{qdict[k]: request.REQUEST[k]}))
|
q_objs.append(Q(**{qdict[k]: args[k]}))
|
||||||
if searching:
|
if searching:
|
||||||
group = request.REQUEST.get('group', '')
|
group = args.get('search_group_acronym', '')
|
||||||
if group != '':
|
if group != '':
|
||||||
rfclist = [rfc.rfc_number for rfc in Rfc.objects.all().filter(group_acronym=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)]
|
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))
|
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 != '':
|
if rfc_number != '':
|
||||||
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(rfc_number=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))
|
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 != '':
|
if filename != '':
|
||||||
draftlist = [draft.id_document_tag for draft in InternetDraft.objects.all().filter(filename__icontains=filename)]
|
q_objs.append(Q(draft__filename__icontains=filename,rfc_flag=0))
|
||||||
q_objs.append(Q(draft__in=draftlist,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 = IDInternal.objects.all().filter(*q_objs).filter(primary_flag=1)
|
||||||
matches = matches.order_by('cur_state', 'cur_sub_state_id')
|
matches = matches.order_by('cur_state', 'cur_sub_state_id')
|
||||||
else:
|
else:
|
||||||
|
@ -66,7 +67,6 @@ def search(request):
|
||||||
|
|
||||||
return render_to_response('idtracker/idtracker_search.html', {
|
return render_to_response('idtracker/idtracker_search.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
'idform': idform,
|
|
||||||
'matches': matches,
|
'matches': matches,
|
||||||
'searching': searching,
|
'searching': searching,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
|
@ -4,37 +4,58 @@
|
||||||
|
|
||||||
{% block idcontent %}
|
{% 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>
|
<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">
|
<table cellpadding="1" cellspacing="0" border="0">
|
||||||
<tr bgcolor="silver">
|
<tr bgcolor="silver">
|
||||||
<th colspan="2">I-D - Search Criteria</th>
|
<th colspan="2">I-D - Search Criteria</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<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>
|
AD:</b></label></td>
|
||||||
<td>{{ form.job_owner }} <label for="id_group">
|
<td>{{ form.search_job_owner }} <label for="id_search_group_acronym">
|
||||||
<b>WG Acronym:</b></label>{{ idform.group }} <label
|
<b>WG Acronym:</b></label>{{ form.search_group_acronym }} <label
|
||||||
for="id_status"><b>Status:</b></label>
|
for="id_search_status_id"><b>Status:</b></label>
|
||||||
{{ idform.status }}</td>
|
{{ form.search_status_id }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<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>
|
State:</b></label></td>
|
||||||
<td>{{ form.cur_state }} <label for="id_cur_sub_state"><b>sub
|
<td>{{ form.search_cur_state }} <label for="id_sub_state_id"><b>sub
|
||||||
state</b>: {{ form.cur_sub_state }}</label> </td>
|
state</b>: {{ form.sub_state_id }}</label> </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td align="right"><label for=
|
<td align="right"><label for=
|
||||||
"id_filename"><b>Filename:</b></label></td>
|
"id_search_filename"><b>Filename:</b></label></td>
|
||||||
<td>{{ idform.filename }} <label for=
|
<td>{{ form.search_filename }} <label for=
|
||||||
"id_rfc_number"><b>RFC Number:</b></label> {{ idform.rfc_number }}
|
"id_search_rfcnumber"><b>RFC Number:</b></label> {{ form.search_rfcnumber }}
|
||||||
<label for="id_area_acronym"><b>Area:</b></label>
|
<label for="id_search_area_acronym"><b>Area:</b></label>
|
||||||
{{ form.area_acronym }}</td>
|
{{ form.search_area_acronym }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<TR BGCOLOR="silver">
|
<TR BGCOLOR="silver">
|
||||||
|
|
Loading…
Reference in a new issue