Replaced most of /idtracker/ (search, document page, ballot page, comment page) with directs to /doc/
- Legacy-Id: 2168
This commit is contained in:
parent
8e4846b8bb
commit
814e31710e
|
@ -1,21 +0,0 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django import forms
|
||||
from models import IESGLogin, IDStatus, Area, IDState, IDSubState
|
||||
|
||||
class IDSearch(forms.Form):
|
||||
search_job_owner = forms.ChoiceField(choices=(), required=False)
|
||||
search_group_acronym = forms.CharField(widget=forms.TextInput(attrs={'size': 7, 'maxlength': 10}), required=False)
|
||||
search_status_id = forms.ModelChoiceField(IDStatus.objects.all(), empty_label="--All", required=False)
|
||||
search_area_acronym = forms.ModelChoiceField(Area.active_areas(), empty_label="--All/Any", required=False)
|
||||
search_cur_state = forms.ModelChoiceField(IDState.objects.all(), empty_label="--All/Any", required=False)
|
||||
sub_state_id = forms.ChoiceField(choices=(), required=False)
|
||||
search_filename = forms.CharField(widget=forms.TextInput(attrs={'size': 15, 'maxlength': 60}), required=False)
|
||||
search_rfcnumber = forms.IntegerField(widget=forms.TextInput(attrs={'size': 5, 'maxlength': 60}), required=False)
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(IDSearch, self).__init__(*args, **kwargs)
|
||||
self.fields['search_job_owner'].choices = [('', '--All/Any')] + [(ad.id, "%s, %s" % (ad.last_name, ad.first_name)) for ad in IESGLogin.objects.filter(user_level=1).order_by('last_name')] + [('-99', '------------------')] + [(ad.id, "%s, %s" % (ad.last_name, ad.first_name)) for ad in IESGLogin.objects.filter(user_level=2).order_by('last_name')]
|
||||
self.fields['sub_state_id'].choices = [('', '--All Substates'), ('0', 'None')] + [(state.sub_state_id, state.sub_state) for state in IDSubState.objects.all()]
|
||||
|
||||
|
||||
# changes done by convert-096.py:changed newforms to forms
|
|
@ -6,31 +6,22 @@
|
|||
200 /idtracker/status/
|
||||
200 /idtracker/status/last-call/
|
||||
|
||||
200 /idtracker/rfc3847/
|
||||
301 /idtracker/rfc3847/
|
||||
301 /idtracker/12689/
|
||||
200 /idtracker/draft-ietf-isis-link-attr/
|
||||
200 /idtracker/draft-ietf-isis-link-attr/comment/65232/
|
||||
301 /idtracker/draft-ietf-isis-link-attr/
|
||||
301 /idtracker/draft-ietf-isis-link-attr/comment/65232/
|
||||
301 /idtracker/draft-eronen-tls-psk/ # no IESG information
|
||||
200 /idtracker/comment/65232/
|
||||
200 /idtracker/ballot/1760/
|
||||
200 /idtracker/
|
||||
301 /idtracker/comment/65232/
|
||||
301 /idtracker/ballot/1760/
|
||||
301 /idtracker/
|
||||
200 /feed/comments/draft-ietf-isis-link-attr/
|
||||
200 /feed/comments/rfc3373/
|
||||
200 /idtracker/?search_group_acronym=&search_job_owner=0&search_rfcnumber=&search_status_id=&sub_state_id=6&search_cur_state=&search_button=SEARCH&search_filename=bgp-m&search_area_acronym=
|
||||
200 /idtracker/?search_rfcnumber=1234
|
||||
200 /idtracker/?search_job_owner=53&search_filename=nfs
|
||||
200 /idtracker/?sub_state_id=5
|
||||
200,heavy /idtracker/?sub_state_id=6
|
||||
200 /idtracker/?search_area_acronym=1260
|
||||
200 /idtracker/?search_group_acronym=tls
|
||||
200 /idtracker/?search_group_acronym=%EF%BD%8C #non-ASCII
|
||||
200 /idtracker/?search_filename=%EF%BD%8C #non-ASCII
|
||||
200 /feed/last-call/
|
||||
|
||||
# An RFC with no matching value in InternetDrafts. This tests
|
||||
# subtle cases of using the draft relation when it's not appropriate.
|
||||
# See ticket #218.
|
||||
200 /idtracker/rfc2444/
|
||||
301 /idtracker/rfc2444/
|
||||
200 /feed/comments/rfc2444/
|
||||
|
||||
# Test case for missing comment time (bug fixed in changeset 1733)
|
||||
|
|
|
@ -1,22 +1,9 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls.defaults import patterns
|
||||
from ietf.idtracker.models import IDInternal, IDState, IDSubState, DocumentComment, BallotInfo
|
||||
from ietf.idtracker.models import IDState, IDSubState
|
||||
from ietf.idtracker import views
|
||||
|
||||
id_dict = {
|
||||
'queryset': IDInternal.objects.all().filter(rfc_flag=0),
|
||||
}
|
||||
rfc_dict = {
|
||||
'queryset': IDInternal.objects.all().filter(rfc_flag=1),
|
||||
}
|
||||
comment_dict = {
|
||||
'queryset': DocumentComment.objects.all().filter(public_flag=1),
|
||||
}
|
||||
|
||||
ballot_dict = {
|
||||
'queryset': BallotInfo.objects.all()
|
||||
}
|
||||
from django.views.generic.simple import redirect_to
|
||||
|
||||
urlpatterns = patterns('django.views.generic.simple',
|
||||
(r'^help/state/$', 'direct_to_template', { 'template': 'idtracker/states.html', 'extra_context': { 'states': IDState.objects.all(), 'substates': IDSubState.objects.all() } }),
|
||||
|
@ -28,13 +15,13 @@ urlpatterns += patterns('',
|
|||
(r'^status/last-call/$', views.last_call),
|
||||
)
|
||||
urlpatterns += patterns('',
|
||||
(r'^rfc(?P<object_id>\d+)/$', views.view_rfc),
|
||||
(r'^rfc0*(?P<rfc_number>\d+)/$', views.redirect_rfc),
|
||||
(r'^(?P<object_id>\d+)/$', views.redirect_id),
|
||||
(r'^(?P<slug>[^/]+)/$', views.view_id, dict(id_dict, slug_field='draft__filename')),
|
||||
(r'^comment/(?P<object_id>\d+)/$', views.view_comment, comment_dict),
|
||||
(r'^ballot/(?P<object_id>\d+)/$', views.view_ballot, ballot_dict),
|
||||
(r'^(?P<slug>[^/]+)/comment/(?P<object_id>\d+)/$', views.comment, comment_dict),
|
||||
(r'^(?P<filename>[^/]+)/$', views.redirect_filename),
|
||||
(r'^comment/(?P<object_id>\d+)/$', views.redirect_comment),
|
||||
(r'^ballot/(?P<object_id>\d+)/$', views.redirect_ballot),
|
||||
(r'^([^/]+)/comment/(?P<object_id>\d+)/$', views.redirect_comment),
|
||||
(r'^help/state/(?P<state>\d+)/$', views.state_desc),
|
||||
(r'^help/substate/(?P<state>\d+)/$', views.state_desc, { 'is_substate': 1 }),
|
||||
(r'^$', views.search),
|
||||
(r'^$', redirect_to, { 'url': '/doc/'}),
|
||||
)
|
||||
|
|
|
@ -2,137 +2,12 @@
|
|||
|
||||
# Create your views here.
|
||||
from django.http import HttpResponsePermanentRedirect
|
||||
from django import forms
|
||||
from django.template import RequestContext
|
||||
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, DocumentWrapper
|
||||
from ietf.idtracker.forms import IDSearch
|
||||
from ietf.utils import normalize_draftname
|
||||
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, BallotInfo, DocumentComment
|
||||
import re
|
||||
|
||||
def search(request):
|
||||
# for compatability with old tracker form, which has
|
||||
# "all substates" = 6.
|
||||
args = request.GET.copy()
|
||||
if args.get('sub_state_id', '') == '6':
|
||||
args['sub_state_id'] = ''
|
||||
# "job_owner" of "0" means "All/Any"
|
||||
if args.get('search_job_owner', '') == '0':
|
||||
args['search_job_owner'] = ''
|
||||
if args.has_key('search_filename'):
|
||||
args['search_filename'] = normalize_draftname(args['search_filename'])
|
||||
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 = {
|
||||
'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() + ['search_group_acronym', 'search_rfcnumber', 'search_filename', 'search_status_id']:
|
||||
if args.has_key(k):
|
||||
searching = True
|
||||
if args[k] != '' and qdict.has_key(k):
|
||||
q_objs.append(Q(**{qdict[k]: args[k]}))
|
||||
if form.is_valid() == False:
|
||||
searching = False
|
||||
if searching:
|
||||
# Non-ASCII group/filename doesn't match anything; this check
|
||||
# is currently needed to avoid complaints from MySQL.
|
||||
for k in ['search_group_acronym','search_filename']:
|
||||
try:
|
||||
tmp = str(args.get(k, ''))
|
||||
except:
|
||||
args[k] = '*NOSUCH*'
|
||||
|
||||
group = args.get('search_group_acronym', '')
|
||||
if group != '':
|
||||
rfclist = [rfc['rfc_number'] for rfc in Rfc.objects.all().filter(group_acronym=group).values('rfc_number')]
|
||||
draftlist = [draft['id_document_tag'] for draft in InternetDraft.objects.all().filter(group__acronym=group).values('id_document_tag')]
|
||||
if rfclist or draftlist:
|
||||
q_objs.append(Q(draft__in=draftlist)&Q(rfc_flag=0)|Q(draft__in=rfclist)&Q(rfc_flag=1))
|
||||
else:
|
||||
q_objs.append(Q(draft__isnull=True)) # no matches
|
||||
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).values('id_document_tag')]
|
||||
q_objs.append(Q(draft__in=draftlist)&Q(rfc_flag=0)|Q(draft=rfc_number)&Q(rfc_flag=1))
|
||||
filename = args.get('search_filename', '')
|
||||
if filename != '':
|
||||
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().exclude(draft=999999).filter(*q_objs)
|
||||
matches = matches.order_by('cur_state', 'cur_sub_state', 'ballot', '-primary_flag')
|
||||
# sort by date in reverse
|
||||
# first build docstate groups, within which we sort
|
||||
# in each docstate group, we build ballot id groups, which we sort
|
||||
m1 = [] # list of: docstate, list of: event date; ballot id; list of: ms for the ballot id
|
||||
for m in matches:
|
||||
if m1 and m1[-1][0] == m.docstate():
|
||||
if m1[-1][1] and m1[-1][1][0][1] == m.ballot_id:
|
||||
m1[-1][1][0][4].append(m)
|
||||
else:
|
||||
m1[-1][1].append((m.event_date, m.ballot_id, m.primary_flag, m.draft_id, [m]))
|
||||
else:
|
||||
m1.append((m.docstate(), [(m.event_date, m.ballot_id, m.primary_flag, m.draft_id, [m])]))
|
||||
matches = []
|
||||
for ms in m1: ms[1].sort(reverse=True)
|
||||
for ms in m1:
|
||||
for mt in ms[1]:
|
||||
matches.extend(mt[4])
|
||||
#
|
||||
# Now search by I-D exists, if there could be any results.
|
||||
# If searching by job owner, current state or substate, there
|
||||
# can't be any "I-D exists" matches.
|
||||
if not(args.get('search_job_owner', 0) or args.get('search_cur_state', 0) or args.get('sub_state_id', 0)):
|
||||
if not(args.get('search_rfcnumber', 0)):
|
||||
in_tracker=[i['draft'] for i in IDInternal.objects.filter(rfc_flag=0).values('draft')]
|
||||
qdict = {
|
||||
'search_area_acronym': 'group__ietfwg__areagroup__area',
|
||||
'search_group_acronym': 'group__acronym',
|
||||
'search_filename': 'filename__icontains',
|
||||
#'search_status_id': 'status',
|
||||
}
|
||||
q_objs = [Q(**{qdict[k]: args[k]}) for k in qdict.keys() if args.get(k, '') != '']
|
||||
idmatches = InternetDraft.objects.filter(*q_objs).exclude(id_document_tag__in=in_tracker).filter(status__status='Active').order_by('filename')
|
||||
# resolve the queryset, append wrapper objects.
|
||||
matches = list(matches) + [DocumentWrapper(id) for id in idmatches]
|
||||
if not(args.get('search_filename', '') or args.get('search_status_id', 0)) and args.get('search_rfcnumber', 0):
|
||||
# the existing area acronym support in this function
|
||||
# in pidtracker.cgi is broken, since it compares an
|
||||
# area acronym string in the database against an
|
||||
# area acronym number in the form. We just ignore
|
||||
# the area (resulting in a different search, but
|
||||
# given that this search is only performed when there's
|
||||
# an explicit rfc number, it seems more or less silly
|
||||
# to filter it further anyway.)
|
||||
in_tracker=[i['draft'] for i in IDInternal.objects.filter(rfc_flag=1).values('draft')]
|
||||
qdict = {
|
||||
'search_group_acronym': 'group_acronym',
|
||||
'search_rfcnumber': 'rfc_number',
|
||||
'search_status_id': 'status',
|
||||
}
|
||||
q_objs = [Q(**{qdict[k]: args[k]}) for k in qdict.keys() if args.get(k, '') != '']
|
||||
rfcmatches = Rfc.objects.filter(*q_objs).exclude(rfc_number__in=in_tracker)
|
||||
matches = list(matches) + [DocumentWrapper(rfc) for rfc in rfcmatches]
|
||||
else:
|
||||
matches = None
|
||||
|
||||
return render_to_response('idtracker/idtracker_search.html', {
|
||||
'form': form,
|
||||
'matches': matches,
|
||||
'searching': searching,
|
||||
'spacing': True
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def state_desc(request, state, is_substate=0):
|
||||
if int(state) == 100:
|
||||
object = {
|
||||
|
@ -151,15 +26,6 @@ IESG to do anything with the document.
|
|||
return render_to_response('idtracker/state_desc.html', {'state': object},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
def comment(request, slug, object_id, queryset):
|
||||
rfcnum = re.match(r'^rfc(\d+)$', slug)
|
||||
if rfcnum:
|
||||
queryset = queryset.filter(document=rfcnum.groups()[0])
|
||||
else:
|
||||
draft = get_object_or_404(InternetDraft, filename=slug)
|
||||
queryset = queryset.filter(document=draft.id_document_tag)
|
||||
return object_detail(request, queryset=queryset, object_id=object_id)
|
||||
|
||||
def status(request):
|
||||
queryset = IDInternal.objects.filter(primary_flag=1).exclude(cur_state__state__in=('RFC Ed Queue', 'RFC Published', 'AD is watching', 'Dead')).order_by('cur_state', 'status_date', 'ballot')
|
||||
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'IESG Status of Items'})
|
||||
|
@ -173,36 +39,25 @@ def redirect_id(request, object_id):
|
|||
doc = get_object_or_404(InternetDraft, id_document_tag=object_id)
|
||||
return HttpResponsePermanentRedirect("/doc/"+doc.filename+"/")
|
||||
|
||||
# calling sequence similar to object_detail, but we have different
|
||||
# 404 handling: if the draft exists, render a not-found template.
|
||||
def view_id(request, queryset, slug, slug_field):
|
||||
try:
|
||||
object = IDInternal.objects.get(draft__filename=slug, rfc_flag=0)
|
||||
except IDInternal.DoesNotExist:
|
||||
draft = get_object_or_404(InternetDraft, filename=slug)
|
||||
return HttpResponsePermanentRedirect("/doc/"+draft.filename+"/")
|
||||
return render_to_response('idtracker/idinternal_detail.html', {'object': object, 'spacing': False}, context_instance=RequestContext(request))
|
||||
def redirect_rfc(request, rfc_number):
|
||||
return HttpResponsePermanentRedirect("/doc/rfc"+rfc_number+"/")
|
||||
|
||||
def view_rfc(request, object_id):
|
||||
'''A replacement for the object_detail generic view for this
|
||||
specific case to work around the following problem:
|
||||
The object_detail generic view looks up the value of the
|
||||
primary key in order to hand it to populate_xheaders.
|
||||
In the IDInternal table, the primary key is a foreign key
|
||||
to InternetDraft. object_detail assumes that the PK is not
|
||||
an FK so doesn't do the foo_id trick, so the lookup is
|
||||
attempted and an exception raised if there is no match.
|
||||
This view gets the appropriate row from IDInternal and
|
||||
calls the template with the necessary context.'''
|
||||
object = get_object_or_404(IDInternal, pk=object_id, rfc_flag=1)
|
||||
return render_to_response('idtracker/idinternal_detail.html', {'object': object, 'spacing': False}, context_instance=RequestContext(request))
|
||||
def redirect_filename(request, filename):
|
||||
return HttpResponsePermanentRedirect("/doc/"+filename+"/")
|
||||
|
||||
# Wrappers around object_detail to give permalink a handle.
|
||||
# The named-URLs feature in django 0.97 will eliminate the
|
||||
# need for these.
|
||||
def view_comment(*args, **kwargs):
|
||||
return object_detail(*args, **kwargs)
|
||||
def redirect_ballot(request, object_id):
|
||||
ballot = get_object_or_404(BallotInfo, pk=object_id)
|
||||
id = ballot.drafts.filter(primary_flag=1)[0]
|
||||
if id.rfc_flag:
|
||||
return HttpResponsePermanentRedirect("/doc/rfc"+str(id.draft_id)+"/#ballot")
|
||||
else:
|
||||
return HttpResponsePermanentRedirect("/doc/"+id.draft.filename+"/#ballot")
|
||||
|
||||
def view_ballot(*args, **kwargs):
|
||||
return object_detail(*args, **kwargs)
|
||||
def redirect_comment(request, object_id):
|
||||
comment = get_object_or_404(DocumentComment, pk=object_id)
|
||||
id = comment.document
|
||||
if id.rfc_flag:
|
||||
return HttpResponsePermanentRedirect("/doc/rfc"+str(id.draft_id)+"/#history-"+str(object_id))
|
||||
else:
|
||||
return HttpResponsePermanentRedirect("/doc/"+id.draft.filename+"/#history-"+str(object_id))
|
||||
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}-- Ballot for {{ object.drafts.all.0.document.filename }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<pre>
|
||||
To: Internet Engineering Steering Group <iesg@ietf.org>
|
||||
From: IESG Secretary <iesg-secretary@ietf.org>
|
||||
Reply-To: IESG Secretary <iesg-secretary@ietf.org>
|
||||
Subject: Evaluation: {% for id in object.drafts.all %}{{ id.draft.filename }}-{{ id.draft.revision }}.txt to {{ id.draft.intended_status }}
|
||||
{% endfor %}
|
||||
--------
|
||||
|
||||
Evaluation for{% for id in object.drafts.all %} {{ id.draft.filename }}-{{ id.draft.revision }}.txt {% endfor %}can be found at
|
||||
https://datatracker.ietf.org{% url ietf.idtracker.views.view_ballot object.ballot %} <!-- FIXME: hardcoded URL -->
|
||||
{% if object.drafts.all.0.draft.lc_expiration_date %}
|
||||
Last Call to expire on: {{ object.drafts.all.0.draft.lc_expiration_date|escape }}
|
||||
{% endif %}
|
||||
Please return the full line with your position.
|
||||
|
||||
Yes No-Objection Discuss Abstain
|
||||
{% if not object.an_sent %}{% for curpos in object.active_positions %}{{ curpos.ad|ljust:"20" }} {{ curpos.pos.yes|bracket }} {{ curpos.pos.noobj|bracket }} {{ curpos.pos.discuss|bracket }} {{ curpos.pos.abstain_ind|bracket }}
|
||||
{% endfor %}
|
||||
{% endif %}{% for position in object.positions.all|dictsort:"ad.last_name" %}{% if object.an_sent or not position.ad.is_current_ad %}{{ position.ad|ljust:"20" }} {{ position.yes|bracket }} {{ position.noobj|bracket }} {{ position.discuss|bracket }} {{ position.abstain_ind|bracket }}
|
||||
{% endif %}{% endfor %}
|
||||
|
||||
"Yes" or "No-Objection" positions from 2/3 of non-recused ADs,
|
||||
with no "Discuss" positions, are needed for approval.
|
||||
|
||||
DISCUSSES AND COMMENTS:
|
||||
======================
|
||||
{% for position in object.positions.all|dictsort:"ad.last_name" %}{% ifequal position.discuss 1 %}{{ position.ad }}:{% for item in object.discusses.all %}{% ifequal position.ad item.ad %}
|
||||
|
||||
Discuss [{{ item.date }}]:
|
||||
{{ item.text|fill:"80"|escape }}
|
||||
|
||||
{% endifequal %}{% endfor %}{% endifequal %}{% for item in object.comments.all %}{% ifequal position.ad item.ad %}{% ifnotequal position.discuss 1 %}{{ position.ad }}:
|
||||
|
||||
{% endifnotequal %}Comment [{{ item.date }}]:
|
||||
{{ item.text|fill:"80"|escape }}
|
||||
|
||||
{% endifequal %}{% endfor %}{% endfor %}
|
||||
|
||||
|
||||
^L
|
||||
---- following is a DRAFT of message to be sent AFTER approval ---
|
||||
{{ object.approval_text|escape|urlize }}
|
||||
|
||||
{{ object.ballot_writeup|escape|urlize }}
|
||||
</pre>
|
||||
{% endblock %}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}
|
||||
Comment on {{ object.document.document.filename }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="first">Comment on {{ object.document.document.displayname_with_link|safe }}</h1>
|
||||
|
||||
|
||||
<table class="top">
|
||||
|
||||
<tr><th>Date:</th><td>{{ object.date }}, {{ object.time }}</td></tr>
|
||||
<tr><th>Document:</th>
|
||||
<td>{{ object.document.document.displayname_with_link|safe }}</td>
|
||||
</tr>
|
||||
<tr><th>Version:</th><td>{{ object.version }}</td></tr>
|
||||
<tr><th>Commented by:</th><td>{{ object.get_author }}</td></tr>
|
||||
|
||||
{% if object.origin_state %}
|
||||
<tr><th>State before Comment:</th><td>{{ object.origin_state }}</td></tr>
|
||||
{% endif %}
|
||||
|
||||
{% if object.result_state %}
|
||||
<tr><th>State after Comment:</th><td>{{ object.result_state }}</td></tr>
|
||||
{% endif %}
|
||||
|
||||
<tr><th>Comment:</th><td>
|
||||
|
||||
{% if object.ballot %}
|
||||
<span class="{{ object.get_ballot_display }}">[IESG Evaluation {{ object.get_ballot_display|upper }}] </span>
|
||||
{% endif %}
|
||||
|
||||
<pre>{{ object.comment_text|wrap_long_lines|safe }}</pre></td></tr>
|
||||
</table>
|
||||
|
||||
<form action="."><p><input type="button" value="Back" onClick="history.go(-1)"/></p></form>
|
||||
|
||||
{% endblock %}
|
|
@ -1,221 +0,0 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}-- {{ object.document.filename }}{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
<link rel="alternate" type="application/atom+xml" href="/feed/comments/{{ object.document.filename }}/"/>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1 class="first">Detailed Information</h1>
|
||||
|
||||
<h1>This page will be removed soon; go <a href="/doc/{{object.document.filename}}/">here</a> instead.</h1>
|
||||
<!--
|
||||
{% if object.ballot_others.count %}
|
||||
<a href="#action">Action List</a>
|
||||
{% endif %}
|
||||
-->
|
||||
|
||||
<table class="top">
|
||||
<tr>
|
||||
<th>
|
||||
{{ object.document.doctype }} Name:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{{ object.document.displayname_with_link|safe }}
|
||||
{% ifequal object.document.doctype "Draft" %}
|
||||
{% ifnotequal object.document.status.status "Active" %}
|
||||
({{ object.document.status.status }})
|
||||
{% endifnotequal %}
|
||||
{% endifequal %}
|
||||
{% if object.via_rfc_editor %}
|
||||
(Independent submission via RFC Editor)
|
||||
{% else %}
|
||||
{% ifequal object.document.group_acronym "none" %}
|
||||
(Individual submission)
|
||||
{% else %}
|
||||
(<a href="/idtracker/?search_group_acronym={{ object.document.group_acronym }}">{{ object.document.group_acronym|upper }}</a> WG submission)
|
||||
{% endifequal %}
|
||||
{% endif %}
|
||||
{% ifequal object.document.status.status "Replaced" %}
|
||||
Replaced by
|
||||
{% if object.document.replaced_by.idinternal %}
|
||||
<a href="{{ object.document.replaced_by.idinternal.get_absolute_url }}">
|
||||
{% endif %}
|
||||
{{ object.document.replaced_by.displayname_with_link|safe }}
|
||||
{% if object.document.replaced_by.idinternal %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endifequal %}
|
||||
{% if object.document.replaces_set.count %}
|
||||
<br>Replaces
|
||||
{% for replaces in object.document.replaces_set.all %}
|
||||
{% if replaces.idinternal %}
|
||||
<a href="{{ replaces.idinternal.get_absolute_url }}">
|
||||
{% endif %}
|
||||
{{ replaces.displayname_with_link|safe }}{% if replaces.idinternal %}</a>{% endif %}{% if not forloop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Version:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{{ object.document.revision }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Intended Status:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{{ object.document.intended_status }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
On Next Agenda?
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{{ object.agenda|yesno:"Yes,No" }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
IESG Discussion:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{% if object.ballot.ballot_issued %}
|
||||
<a href="{% url ietf.idtracker.views.view_ballot object.ballot_id %}">IESG evaluation record</a>
|
||||
[<a href="/idtracker/help/evaluation/">What they mean</a>]
|
||||
[<a href="/idtracker/help/ballot/">How they are recorded</a>]
|
||||
{% else %}
|
||||
No IESG evaluation record
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Current State:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
<a title="{{ object.cur_state.description|escape|allononelinew }}" href="/idtracker/help/state/{{ object.cur_state_id }}/">
|
||||
{{ object.cur_state }}</a>
|
||||
{% if object.cur_sub_state %}
|
||||
::
|
||||
<a title="{{ object.cur_sub_state.description|escape|allononelinew }}" href="/idtracker/help/substate/{{ object.cur_sub_state_id }}/">
|
||||
{{ object.cur_sub_state }}</a>
|
||||
{% endif %}
|
||||
{% if object.rfc_flag %}
|
||||
{% else %}
|
||||
{% ifequal object.cur_state.state "RFC Ed Queue" %}
|
||||
<a href="http://www.rfc-editor.org/queue.html#{{ object.document.filename }}">
|
||||
[RFC Editor State]</a>
|
||||
{% endifequal %}
|
||||
{% endif %}
|
||||
<a href="/idtracker/help/state/">
|
||||
[State explanations]</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Responsible AD:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{{ object.job_owner }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Status Date:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{% firstof object.status_date " " %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>
|
||||
Note:
|
||||
</th>
|
||||
|
||||
<td>
|
||||
{# |unformat_textarea #}
|
||||
{% firstof object.note " " %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!--
|
||||
<tr>
|
||||
<td/>
|
||||
|
||||
<td>
|
||||
<form action="{% url ietf.idtracker.views.search %}" method="GET">
|
||||
<input type="submit" value=
|
||||
"Main Menu">
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
-->
|
||||
</table>
|
||||
|
||||
{% if object.ballot_others.count %}
|
||||
<h1>Ballot Set</h1>
|
||||
{% regroup object.ballot_set by docstate as grouped %}
|
||||
{% include "idtracker/search_result_table.html" %}
|
||||
{% endif %}
|
||||
|
||||
<h1>Comment Log [<a href="/feed/comments/{{ object.document.filename }}/">atom feed</a>]</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Version</th>
|
||||
<th>Action</th>
|
||||
<th>Who</th>
|
||||
<th>Date</th>
|
||||
</tr>
|
||||
|
||||
{% for comment in object.public_comments %}
|
||||
<tr bgcolor="{% cycle #CFE1CC,#7DC189 %}">
|
||||
<td>{{ comment.version }}</td>
|
||||
|
||||
<td>
|
||||
{% if comment.ballot %}
|
||||
<span class="{{ comment.get_ballot_display }}">[IESG Evaluation {{ comment.get_ballot_display|upper }}] </span>
|
||||
{% endif %}
|
||||
|
||||
{{ comment.comment_text|removetags:"b br"|truncatewords_html:"20"|safe }}
|
||||
[<a href="{{ comment.get_absolute_url }}">more</a>]
|
||||
</td>
|
||||
|
||||
<td>{{ comment.get_fullname }}</td>
|
||||
<td>{{ comment.date }}</td>
|
||||
</tr>
|
||||
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
|
||||
<p><a href="{% url ietf.idtracker.views.search %}">Main Menu</a></p>
|
||||
|
||||
{% endblock %}
|
|
@ -1,88 +0,0 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||
|
||||
{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
{% block title %}IETF I-D Tracker{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<script type="text/javascript" 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 = "";
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<h1 class="first">IETF I-D Tracker</h1>
|
||||
|
||||
<h1>This page will be removed soon; go <a href="/doc/">here</a> instead.</h1>
|
||||
|
||||
<form action="." method="get" name="search_form">
|
||||
<table class="top">
|
||||
<tr>
|
||||
<th><label for="id_search_job_owner">Responsible AD:</label></th>
|
||||
<td>{{ form.search_job_owner }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="id_search_group_acronym">WG Acronym:</label></th>
|
||||
<td>{{ form.search_group_acronym }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="id_search_area_acronym">Area Acronym:</label></th>
|
||||
<td>{{ form.search_area_acronym }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="id_search_status_id">Status:</label></th>
|
||||
<td>{{ form.search_status_id }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><a href="/idtracker/help/state/">Current State:</a></th>
|
||||
<td>{{ form.search_cur_state }}{{ form.sub_state_id }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="id_search_filename">Draft Name:</label></th>
|
||||
<td>{{ form.search_filename }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><label for="id_search_rfcnumber">RFC Number:</label></th>
|
||||
<td>{{ form.search_rfcnumber }} </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td/>
|
||||
<td class="buttons">
|
||||
<input type="button" value="Reset Form" onClick="clear_fields()"/>
|
||||
<input type="submit" value="Search I-Ds"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
{% if form.errors %}
|
||||
<p class="error">
|
||||
Please fix the following error{{ form.errors|pluralize }} and retry your search:
|
||||
{{ form.errors }}
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if matches %}
|
||||
{% regroup matches by docstate as grouped %}
|
||||
{% include "idtracker/search_result_table.html" %}
|
||||
{% else %}
|
||||
{% if searching %}
|
||||
<p class="error">No matches to your query.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if matches or searching %}
|
||||
<p><a href=".">Back</a></p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,47 +0,0 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||
|
||||
{% load ietf_filters %}
|
||||
{# we can't do alternating row colors with CSS alone #}
|
||||
<tr
|
||||
bgcolor="{% cycle #F8D6F8,#E2AFE2 %}">
|
||||
|
||||
<td {% if not match.primary_flag %} class="nonprimary" {% endif %} >
|
||||
|
||||
<a href="{% url ietf.idtracker.views.view_id match.document.filename %}">
|
||||
{{ match.document.displayname|safe }}
|
||||
</a>
|
||||
|
||||
{% ifequal match.document.status.status "Replaced" %}
|
||||
<p class="replace">Replaced by
|
||||
<!-- {% if match.document.replaced_by.idinternal %}
|
||||
<a href="{% url ietf.idtracker.views.search %}?search_filename={{ match.document.replaced_by.filename }}">
|
||||
{% endif %}
|
||||
--> {{ match.document.replaced_by.displayname_with_link|safe }}
|
||||
<!-- {% if match.document.replaced_by.idinternal %}
|
||||
</a>
|
||||
{% endif %}
|
||||
--> </p>
|
||||
{% endifequal %}
|
||||
|
||||
{% if match.document.replaces_set.count %}
|
||||
<p class="replace">Replaces
|
||||
{% for replaces in match.document.replaces_set.all %}
|
||||
<!-- {% if replaces.idinternal %}
|
||||
<a href="{% url ietf.idtracker.views.search %}?search_filename={{ replaces.filename }}">
|
||||
{% endif %}
|
||||
--> {{ replaces.displayname_with_link|safe }}
|
||||
<!-- {% if replaces.idinternal %}</a>{% endif %}{% if not forloop.last %}</p><p class="replace">{% endif %}
|
||||
--> {% endfor %}</p>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<a href="{{ match.document.doclink }}">{{ match.document.revision_display }}</a>
|
||||
</td>
|
||||
|
||||
<td>{{ match.document.intended_status }}</td>
|
||||
|
||||
<td>{{ match.job_owner }}</td>
|
||||
|
||||
<td>{{ match.event_date }}</td>
|
||||
</tr>
|
|
@ -1,36 +0,0 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||
|
||||
<table>
|
||||
|
||||
{% for group in grouped %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
<tr>
|
||||
<th {% if spacing %} class="state" {% endif %} colspan="7">
|
||||
State:
|
||||
<a title="{{ group.list.0.cur_state.description|escape|allononelinew }}" href="/idtracker/help/state/{{ group.list.0.cur_state_id }}/">{{ group.list.0.cur_state }}</a>
|
||||
{% if group.list.0.cur_sub_state %}
|
||||
:: <a title="{{ group.list.0.cur_sub_state.description|escape|allononelinew }}" href="/idtracker/help/substate/{{ group.list.0.cur_sub_state_id }}/">
|
||||
{{ group.list.0.cur_sub_state }}</a>
|
||||
{% endif %}
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>Document</th>
|
||||
<th>Version</th>
|
||||
<th>Intended Status</th>
|
||||
<th>Responsible AD</th>
|
||||
<th>Modified</th>
|
||||
</tr>
|
||||
|
||||
{# Same sort algorithm as I-D tracker #}
|
||||
{% regroup group.list by primary_flag as primaries %}
|
||||
{% for pgroup in primaries %}
|
||||
{% for match in pgroup.list %}
|
||||
{% include "idtracker/search_result_row.html" %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
</table>
|
Loading…
Reference in a new issue