Merged in [13492] from rcross@amsl.com:

Remove old proceedings generation code.  Fixes #2234.
 - Legacy-Id: 13510
Note: SVN reference [13492] has been migrated to Git commit 254e35fa56
This commit is contained in:
Henrik Levkowetz 2017-06-04 13:09:16 +00:00
commit d23650e382
24 changed files with 10 additions and 1372 deletions

View file

@ -6,7 +6,7 @@
{% if template_list %}
<ul>
{% for template in template_list %}
<li><a href="{% url "template_edit" group.acronym template.id %}">{{ template }}</a></li>
<li><a href="{% url "ietf.dbtemplate.views.template_edit" group.acronym template.id %}">{{ template }}</a></li>
{% endfor %}
</ul>
{% else %}

View file

@ -4,13 +4,10 @@ proc_utils.py
This module contains all the functions for generating static proceedings pages
'''
import datetime
import glob
import httplib2
import os
import re
import shutil
import subprocess
import urllib2
from urllib import urlencode
import debug # pyflakes:ignore
@ -19,29 +16,20 @@ from apiclient.discovery import build
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpRequest
from django.shortcuts import render_to_response, render
from django.db.utils import ConnectionDoesNotExist
from django.shortcuts import render
from ietf.doc.models import Document, DocAlias, RelatedDocument, DocEvent, NewRevisionDocEvent, State
from ietf.group.models import Group, Role
from ietf.group.utils import get_charter_text
from ietf.meeting.helpers import get_schedule
from ietf.meeting.models import Session, Meeting, SchedTimeSessAssignment, SessionPresentation, TimeSlot
from ietf.doc.models import Document, DocAlias, DocEvent, NewRevisionDocEvent, State
from ietf.group.models import Group
from ietf.meeting.models import Meeting, SessionPresentation, TimeSlot, SchedTimeSessAssignment
from ietf.person.models import Person
from ietf.secr.proceedings.models import InterimMeeting # proxy model
from ietf.secr.proceedings.models import Registration
from ietf.secr.utils.document import get_rfc_num
from ietf.secr.utils.group import groups_by_session
from ietf.secr.utils.meeting import get_proceedings_path, get_materials, get_session
from ietf.utils.log import log
from ietf.utils.mail import send_mail
AUDIO_FILE_RE = re.compile(r'ietf(?P<number>[\d]+)-(?P<room>.*)-(?P<time>[\d]{8}-[\d]{4})')
VIDEO_TITLE_RE = re.compile(r'IETF(?P<number>\d{2})-(?P<name>.*)-(?P<date>\d{8})-(?P<time>\d{4})')
# -------------------------------------------------
# Recording Functions
# -------------------------------------------------
def import_youtube_video_urls(meeting, http=httplib2.Http()):
'''Create Document and set external_url for session videos'''
@ -246,18 +234,6 @@ def send_audio_import_warning(unmatched_files):
context = dict(unmatched_files=unmatched_files),
extra = {})
def mycomp(timeslot):
'''
This takes a timeslot object and returns a key to sort by the area acronym or None
'''
try:
session = get_session(timeslot)
group = session.group
key = '%s:%s' % (group.parent.acronym, group.acronym)
except AttributeError:
key = None
return key
# -------------------------------------------------
# End Recording Functions
# -------------------------------------------------
@ -328,18 +304,6 @@ def get_progress_stats(sdate,edate):
return data
def write_html(path,content):
f = open(path,'w')
f.write(content)
f.close()
try:
os.chmod(path, 0664)
except OSError:
pass
# -------------------------------------------------
# End Helper Functions
# -------------------------------------------------
def create_interim_directory():
'''
Create static Interim Meeting directory pages that will live in a different URL space than
@ -365,366 +329,6 @@ def create_interim_directory():
f.write(response.content)
f.close()
def create_proceedings(meeting, group, is_final=False):
'''
This function creates the proceedings html document. It gets called anytime there is an
update to the meeting or the slides for the meeting.
NOTE: execution is aborted if the meeting is older than 79 because the format changed.
'''
# abort, proceedings from meetings before 79 have a different format, don't overwrite
if meeting.type_id == 'ietf' and int(meeting.number) < 79:
return
#check_audio_files(group,meeting)
materials = get_materials(group,meeting)
chairs = group.role_set.filter(name='chair')
secretaries = group.role_set.filter(name='secr')
if group.parent: # Certain groups like Tools Team do no have a parent
ads = group.parent.role_set.filter(name='ad')
else:
ads = None
tas = group.role_set.filter(name='techadv')
docs = Document.objects.filter(group=group,type='draft').order_by('time')
meeting_root = meeting.get_materials_path()
url_root = "%sproceedings/%s/" % (settings.IETF_HOST_URL,meeting.number)
# Only do these tasks if we are running official proceedings generation,
# otherwise skip them for expediency. This procedure is called any time meeting
# materials are uploaded/deleted, and we don't want to do all this work each time.
if is_final:
# ----------------------------------------------------------------------
# Find active Drafts and RFCs, copy them to id and rfc directories
drafts = docs.filter(states__slug='active')
for draft in drafts:
source = os.path.join(draft.get_file_path(),draft.filename_with_rev())
target = os.path.join(meeting_root,'id')
if not os.path.exists(target):
os.makedirs(target)
if os.path.exists(source):
shutil.copy(source,target)
draft.bytes = os.path.getsize(source)
else:
draft.bytes = 0
draft.url = url_root + "id/%s" % draft.filename_with_rev()
rfcs = docs.filter(states__slug='rfc')
for rfc in rfcs:
# TODO should use get_file_path() here but is incorrect for rfcs
rfc_num = get_rfc_num(rfc)
filename = "rfc%s.txt" % rfc_num
alias = rfc.docalias_set.filter(name='rfc%s' % rfc_num)
source = os.path.join(settings.RFC_PATH,filename)
target = os.path.join(meeting_root,'rfc')
rfc.rmsg = ''
rfc.msg = ''
if not os.path.exists(target):
os.makedirs(target)
try:
shutil.copy(source,target)
rfc.bytes = os.path.getsize(source)
except IOError:
pass
rfc.url = url_root + "rfc/%s" % filename
rfc.num = "RFC %s" % rfc_num
# check related documents
# check obsoletes
related = rfc.relateddocument_set.all()
for item in related.filter(relationship='obs'):
rfc.msg += 'obsoletes %s ' % item.target.name
#rfc.msg += ' '.join(item.__str__().split()[1:])
updates_list = [x.target.name.upper() for x in related.filter(relationship='updates')]
if updates_list:
rfc.msg += 'updates ' + ','.join(updates_list)
# check reverse related
rdocs = RelatedDocument.objects.filter(target=alias)
for item in rdocs.filter(relationship='obs'):
rfc.rmsg += 'obsoleted by RFC %s ' % get_rfc_num(item.source)
updated_list = ['RFC %s' % get_rfc_num(x.source) for x in rdocs.filter(relationship='updates')]
if updated_list:
rfc.msg += 'updated by ' + ','.join(updated_list)
else:
drafts = rfcs = None
# ----------------------------------------------------------------------
# check for blue sheets
if meeting.number.startswith('interim'):
pattern = os.path.join(meeting_root,'bluesheets','bluesheets-%s*' % (meeting.number))
else:
pattern = os.path.join(meeting_root,'bluesheets','bluesheets-%s-%s-*' % (meeting.number,group.acronym.lower()))
files = glob.glob(pattern)
bluesheets = []
for name in files:
basename = os.path.basename(name)
obj = {'name': basename,
'url': url_root + "bluesheets/" + basename}
bluesheets.append(obj)
bluesheets = sorted(bluesheets, key = lambda x: x['name'])
# the simplest way to display the charter is to place it in a <pre> block
# however, because this forces a fixed-width font, different than the rest of
# the document we modify the charter by adding replacing linefeeds with <br>'s
if group.charter:
charter = get_charter_text(group).replace('\n','<br />')
ctime = group.charter.time
else:
charter = None
ctime = None
status_update = group.latest_event(type='status_update',time__lte=meeting.get_submission_correction_date())
# rather than return the response as in a typical view function we save it as the snapshot
# proceedings.html
response = render_to_response('proceedings/proceedings.html',{
'bluesheets': bluesheets,
'charter': charter,
'ctime': ctime,
'drafts': drafts,
'group': group,
'chairs': chairs,
'secretaries': secretaries,
'ads': ads,
'tas': tas,
'meeting': meeting,
'rfcs': rfcs,
'materials': materials,
'status_update': status_update,}
)
# save proceedings
proceedings_path = get_proceedings_path(meeting,group)
f = open(proceedings_path,'w')
f.write(response.content)
f.close()
try:
os.chmod(proceedings_path, 0664)
except OSError:
pass
# rebuild the directory
if meeting.type.slug == 'interim':
create_interim_directory()
# -------------------------------------------------
# Functions for generating Proceedings Pages
# -------------------------------------------------
def gen_areas(context):
meeting = context['meeting']
gmet, gnot = groups_by_session(None,meeting)
# append proceedings URL
for group in gmet + gnot:
group.proceedings_url = "%sproceedings/%s/%s.html" % (settings.IETF_HOST_URL,meeting.number,group.acronym)
for (counter,area) in enumerate(context['areas'], start=1):
groups_met = {'wg':filter(lambda a: a.parent==area and a.state.slug not in ('bof','bof-conc') and a.type_id=='wg',gmet),
'bof':filter(lambda a: a.parent==area and a.state.slug in ('bof','bof-conc') and a.type_id=='wg',gmet),
'ag':filter(lambda a: a.parent==area and a.type_id=='ag',gmet)}
groups_not = {'wg':filter(lambda a: a.parent==area and a.state.slug not in ('bof','bof-conc') and a.type_id=='wg',gnot),
'bof':filter(lambda a: a.parent==area and a.state.slug=='bof' and a.type_id=='wg',gnot),
'ag':filter(lambda a: a.parent==area and a.type_id=='ag',gnot)}
html = render_to_response('proceedings/area.html',{
'area': area,
'meeting': meeting,
'groups_met': groups_met,
'groups_not': groups_not,
'index': counter}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'%s.html' % area.acronym)
write_html(path,html.content)
def gen_acknowledgement(context):
meeting = context['meeting']
html = render_to_response('proceedings/acknowledgement.html',{
'meeting': meeting}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'acknowledgement.html')
write_html(path,html.content)
def gen_agenda(context):
meeting = context['meeting']
schedule = get_schedule(meeting)
schedtimesessassignments = SchedTimeSessAssignment.objects.filter(schedule=schedule).exclude(session__isnull=True)
html = render_to_response('proceedings/agenda.html',{
'meeting': meeting,
'schedtimesessassignments': schedtimesessassignments}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'agenda.html')
write_html(path,html.content)
# get the text agenda from datatracker
url = 'https://datatracker.ietf.org/meeting/%s/agenda.txt' % meeting.number
text = urllib2.urlopen(url).read()
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'agenda.txt')
write_html(path,text)
def gen_attendees(context):
meeting = context['meeting']
attendees = Registration.objects.using('ietf' + meeting.number).all().order_by('lname')
if settings.SERVER_MODE!='production':
try:
attendees.count()
except ConnectionDoesNotExist:
attendees = Registration.objects.none()
html = render_to_response('proceedings/attendee.html',{
'meeting': meeting,
'attendees': attendees}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'attendee.html')
write_html(path,html.content)
def gen_group_pages(context):
meeting = context['meeting']
for group in Group.objects.filter(type__in=('wg','ag','rg'), state__in=('bof','proposed','active')):
create_proceedings(meeting,group,is_final=True)
def gen_index(context):
index = render_to_response('proceedings/index.html',context)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,context['meeting'].number,'index.html')
write_html(path,index.content)
def gen_irtf(context):
meeting = context['meeting']
irtf_chair = Role.objects.filter(group__acronym='irtf',name='chair')[0]
html = render_to_response('proceedings/irtf.html',{
'irtf_chair':irtf_chair}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'irtf.html')
write_html(path,html.content)
def gen_overview(context):
meeting = context['meeting']
ietf_chair = Role.objects.get(group__acronym='ietf',name='chair')
ads = Role.objects.filter(group__type='area',group__state='active',name='ad')
sorted_ads = sorted(ads, key = lambda a: a.person.name_parts()[3])
html = render_to_response('proceedings/overview.html',{
'meeting': meeting,
'ietf_chair': ietf_chair,
'ads': sorted_ads}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'overview.html')
write_html(path,html.content)
def gen_plenaries(context):
'''
This function generates pages for the Plenaries. At meeting 85 the Plenary sessions
were combined into one, so we need to handle not finding one of the sessions.
'''
meeting = context['meeting']
# Administration Plenary
try:
admin_session = Session.objects.get(meeting=meeting,name__contains='Administration Plenary')
admin_slides = admin_session.materials.filter(type='slides')
admin_minutes = admin_session.materials.filter(type='minutes')
admin = render_to_response('proceedings/plenary.html',{
'title': 'Administrative',
'meeting': meeting,
'slides': admin_slides,
'minutes': admin_minutes}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,context['meeting'].number,'administrative-plenary.html')
write_html(path,admin.content)
except Session.DoesNotExist:
pass
# Technical Plenary
try:
tech_session = Session.objects.get(meeting=meeting,name__contains='Technical Plenary')
tech_slides = tech_session.materials.filter(type='slides')
tech_minutes = tech_session.materials.filter(type='minutes')
tech = render_to_response('proceedings/plenary.html',{
'title': 'Technical',
'meeting': meeting,
'slides': tech_slides,
'minutes': tech_minutes}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,context['meeting'].number,'technical-plenary.html')
write_html(path,tech.content)
except Session.DoesNotExist:
pass
def gen_progress(context, final=True):
'''
This function generates the Progress Report. This report is actually produced twice. First
for inclusion in the Admin Plenary, then for the final proceedings. When produced the first
time we want to exclude the headers because they are broken links until all the proceedings
are generated.
'''
meeting = context['meeting']
# proceedings are run sometime after the meeting, so end date = the passed meeting
# date and start date = the date of the meeting before that
previous_meetings = Meeting.objects.filter(type='ietf',date__lt=meeting.date).order_by('-date')
start_date = previous_meetings[0].date
end_date = meeting.date
data = get_progress_stats(start_date,end_date)
data['meeting'] = meeting
data['final'] = final
html = render_to_response('proceedings/progress.html',data)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'progress-report.html')
write_html(path,html.content)
def gen_research(context):
meeting = context['meeting']
gmet, gnot = groups_by_session(None,meeting)
groups = [ g for g in gmet if g.type_id=='rg' or (g.type_id=='ag' and g.parent.acronym=='irtf') ]
# append proceedings URL
for group in groups:
group.proceedings_url = "%sproceedings/%s/%s.html" % (settings.IETF_HOST_URL,meeting.number,group.acronym)
html = render_to_response('proceedings/rg_irtf.html',{
'meeting': meeting,
'groups': groups}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'rg_irtf.html')
write_html(path,html.content)
def gen_training(context):
meeting = context['meeting']
timeslots = context['others']
sessions = [ get_session(t) for t in timeslots ]
for counter,session in enumerate(sessions, start=1):
slides = session.materials.filter(type='slides')
minutes = session.materials.filter(type='minutes')
html = render_to_response('proceedings/training.html',{
'title': '4.%s %s' % (counter, session.name),
'meeting': meeting,
'slides': slides,
'minutes': minutes}
)
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'train-%s.html' % counter )
write_html(path,html.content)
def is_powerpoint(doc):
'''
Returns true if document is a Powerpoint presentation

View file

@ -11,14 +11,14 @@ from django.urls import reverse
from ietf.doc.models import Document
from ietf.group.models import Group
from ietf.meeting.factories import SessionFactory
from ietf.meeting.models import Session, TimeSlot, SchedTimeSessAssignment
from ietf.meeting.test_data import make_meeting_test_data
from ietf.name.models import SessionStatusName
from ietf.utils.test_data import make_test_data
from ietf.utils.test_utils import TestCase
from ietf.utils.mail import outbox
from ietf.secr.proceedings.proc_utils import (create_proceedings, import_audio_files,
from ietf.secr.proceedings.proc_utils import (import_audio_files,
get_timeslot_for_filename, normalize_room_name, send_audio_import_warning,
get_or_create_recording_document, create_recording, get_next_sequence,
get_youtube_playlistid, get_youtube_videos, import_youtube_video_urls,
@ -241,24 +241,3 @@ class RecordingTestCase(TestCase):
send_audio_import_warning(['recording-43-badroom-20000101-0800.mp3'])
self.assertEqual(len(outbox), length_before + 1)
self.assertTrue('Audio file import' in outbox[-1]['Subject'])
class OldProceedingsTestCase(TestCase):
''' Ensure coverage of fragments of old proceedings generation until those are removed '''
def setUp(self):
self.session = SessionFactory(meeting__type_id='ietf')
self.proceedings_dir = self.tempdir('proceedings')
# This unintuitive bit is a consequence of the surprising implementation of meeting.get_materials_path
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH= self.proceedings_dir
target_path = self.session.meeting.get_materials_path()
if not os.path.exists(target_path):
os.makedirs(target_path)
def tearDown(self):
shutil.rmtree(self.proceedings_dir)
settings.AGENDA_PATH = self.saved_agenda_path
def test_old_generate(self):
create_proceedings(self.session.meeting,self.session.group,is_final=True)

View file

@ -6,10 +6,8 @@ from ietf.secr.proceedings import views
urlpatterns = [
url(r'^$', views.main),
url(r'^ajax/generate-proceedings/(?P<meeting_num>\d{1,3})/$', views.ajax_generate_proceedings),
# special offline URL for testing proceedings build
url(r'^process-pdfs/(?P<meeting_num>\d{1,3})/$', views.process_pdfs),
url(r'^progress-report/(?P<meeting_num>\d{1,3})/$', views.progress_report),
url(r'^(?P<meeting_num>\d{1,3})/$', views.select),
url(r'^(?P<meeting_num>\d{1,3})/recording/$', views.recording),
url(r'^(?P<meeting_num>\d{1,3})/recording/edit/(?P<name>[A-Za-z0-9_\-\+]+)$', views.recording_edit),

View file

@ -16,15 +16,12 @@ from ietf.secr.utils.decorators import sec_only
from ietf.secr.utils.group import get_my_groups
from ietf.secr.utils.meeting import get_timeslot, get_proceedings_url
from ietf.doc.models import Document, DocEvent
from ietf.group.models import Group
from ietf.person.models import Person
from ietf.ietfauth.utils import has_role, role_required
from ietf.meeting.models import Meeting, Session, TimeSlot
from ietf.meeting.models import Meeting, Session
from ietf.secr.proceedings.forms import RecordingForm, RecordingEditForm
from ietf.secr.proceedings.proc_utils import ( gen_acknowledgement, gen_agenda, gen_areas,
gen_attendees, gen_group_pages, gen_index, gen_irtf, gen_overview, gen_plenaries,
gen_progress, gen_research, gen_training, create_proceedings, create_recording )
from ietf.secr.proceedings.proc_utils import (create_recording)
# -------------------------------------------------
# Globals
@ -139,60 +136,11 @@ def parsedate(d):
This function takes a date object and returns a tuple of year,month,day
'''
return (d.strftime('%Y'),d.strftime('%m'),d.strftime('%d'))
# -------------------------------------------------
# AJAX Functions
# -------------------------------------------------
@sec_only
def ajax_generate_proceedings(request, meeting_num):
'''
Ajax function which takes a meeting number and generates the proceedings
pages for the meeting. It returns a snippet of HTML that gets placed in the
Secretariat Only section of the select page.
'''
meeting = get_object_or_404(Meeting, number=meeting_num)
areas = Group.objects.filter(type='area',state='active').order_by('name')
others = TimeSlot.objects.filter(sessionassignments__schedule=meeting.agenda,type='other').order_by('time')
extras = get_extras(meeting)
context = {'meeting':meeting,
'areas':areas,
'others':others,
'extras':extras,
'request':request}
proceedings_url = get_proceedings_url(meeting)
# the acknowledgement page can be edited manually so only produce if it doesn't already exist
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'acknowledgement.html')
if not os.path.exists(path):
gen_acknowledgement(context)
gen_overview(context)
gen_progress(context)
gen_agenda(context)
gen_attendees(context)
gen_index(context)
gen_areas(context)
gen_plenaries(context)
gen_training(context)
gen_irtf(context)
gen_research(context)
gen_group_pages(context)
# get the time proceedings were generated
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'index.html')
last_run = datetime.datetime.fromtimestamp(os.path.getmtime(path))
return render(request, 'includes/proceedings_functions.html',{
'meeting':meeting,
'last_run':last_run,
'proceedings_url':proceedings_url},
)
# --------------------------------------------------
# STANDARD VIEW FUNCTIONS
# --------------------------------------------------
@role_required(*AUTHORIZED_ROLES)
def main(request):
'''
@ -269,17 +217,6 @@ def process_pdfs(request, meeting_num):
url = reverse('ietf.secr.proceedings.views.select', kwargs={'meeting_num':meeting_num})
return HttpResponseRedirect(url)
@role_required('Secretariat')
def progress_report(request, meeting_num):
'''
This function generates the proceedings progress report for use at the Plenary.
'''
meeting = get_object_or_404(Meeting, number=meeting_num)
gen_progress({'meeting':meeting},final=False)
url = reverse('ietf.secr.proceedings.views.select', kwargs={'meeting_num':meeting_num})
return HttpResponseRedirect(url)
@role_required('Secretariat')
def recording(request, meeting_num):
'''
@ -304,9 +241,6 @@ def recording(request, meeting_num):
else:
create_recording(session,external_url)
# rebuild proceedings
create_proceedings(meeting,session.group)
messages.success(request,'Recording added')
return redirect('ietf.secr.proceedings.views.recording', meeting_num=meeting_num)
@ -346,7 +280,6 @@ def recording_edit(request, meeting_num, name):
)
recording.save_with_history([e])
create_proceedings(meeting,recording.group)
messages.success(request,'Recording saved')
return redirect('ietf.secr.proceedings.views.recording', meeting_num=meeting_num)
else:

View file

@ -1,24 +0,0 @@
{% if set.wg %}
<h4>Working Groups</h4>
<ul>
{% for group in set.wg %}
<li><a href="{{ group.proceedings_url }}">{{ group.name }} ({{group.acronym}})</a></li>
{% endfor %}
</ul>
{% endif %}
{% if set.bof %}
<h4>BoFs</h4>
<ul>
{% for group in set.bof %}
<li><a href="{{ group.proceedings_url }}">{{ group.name }} ({{group.acronym}})</a></li>
{% endfor %}
</ul>
{% endif %}
{% if set.ag %}
<h4>Area Group</h4>
<ul>
{% for group in set.ag %}
<li><a href="{{ group.proceedings_url }}">{{ group.name }} ({{group.acronym}})</a></li>
{% endfor %}
</ul>
{% endif %}

View file

@ -1,14 +0,0 @@
<tr>
<td id="footer1" colspan="2"><div id="footer2">
<p><a href="https://www.isoc.org/"><img src="/images/isoc_logo.gif" alt="Internet Society" align="left" border="0" hspace="5" /></a><a href="https://www.amsl.com/"><img src="/images/ams_logo.png" alt="AMS" align="right" border="0" hspace="5" /></a><a href="/">Home</a> - <a href="https://tools.ietf.org/">Tools
Team</a> - <a href="https://datatracker.ietf.org/">Datatracker</a> - <a href="/usagedata/">Web&nbsp;Site&nbsp;Usage&nbsp;Statistics</a> - <a href="https://iaoc.ietf.org/">IASA</a> - <a href="https://www.iab.org/">IAB</a> - <a href="https://www.rfc-editor.org/">RFC&nbsp;Editor</a> - <a href="https://www.iana.org/">IANA</a> - <a href="https://www.irtf.org/">IRTF</a> - <a href="https://trustee.ietf.org/">IETF&nbsp;Trust</a> - <a href="https://www.isoc.org/">ISOC</a> - <a href="https://www.cafepress.com/ietf">Store</a> - <a href="/secretariat.html">Contact&nbsp;Us</a><br />
Secretariat services provided by <a href="https://www.amsl.com/">Association Management Solutions, LLC (AMS)</a>.<br />
Please send problem reports to: <a href="mailto:ietf-action@ietf.org">ietf-action@ietf.org</a>.<br />
&nbsp;</p>
</div></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

View file

@ -1,96 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>IETF Proceedings</title>
<script type="text/javascript" language="JavaScript" src="/css/ietf.js"></script>
<script type="text/javascript">
document.write('<link id="sheet4" href="/css/ietf4.css" rel="stylesheet" type="text/css" />');
document.write('<link id="sheet3" href="/css/ietf3.css" rel="stylesheet" type="text/css" />');
document.write('<link id="sheet2" href="/css/ietf2.css" rel="stylesheet" type="text/css" />');
</script>
<link id="sheet1" href="/css/ietf.css" rel="stylesheet" type="text/css" />
<style>
tr.time-title > td {
padding-top: 1em;
}
</style>
</head>
<body onload="setStyle(0);">
<div id="container">
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td id="sidebar1"><div id="sidebar2"><a href="/"><img src="/images/ietflogotrans.gif" alt="Logo" height="75" width="140" border="0"/></a>
<div style="margin:0;padding:0;white-space: nowrap;">
<form method="get" action="https://www.google.com/u/ietf" style="margin:0;padding:0;white-space: nowrap;">
<p style="margin:0;padding:0;white-space: nowrap;">
<input name="q" size="16" maxlength="255" value="" type="text" style="margin:1px;padding:0;width:100px;border:1px solid #89d;" />
<input name="Search" value="Search" type="submit" style="margin:0;padding:0;font-size:85%;" />
</p>
</form>
</div>
<ul>
<li class="subhdr00"><a class="subhdr00" href="xmpp:hallway@jabber.ietf.org?join"><img src="/images/chat-trans.png" border="0" alt="transparent chat button" /></a></li>
<li class="subhdr00"><a class="subhdr00" href="/"><strong>Home</strong></a></li>
<li class="subhdr00"><a class="subhdr00" href="/about/"><strong>About the IETF</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/about/mission.html">Mission</a></li>
<li class="subhdr02"><a class="subhdr02" href="/about/standards-process.html">Standards&nbsp;Process</a></li>
<li class="subhdr02"><a class="subhdr02" href="/about/note-well.html">Note&nbsp;Well</a></li>
<li class="subhdr02"><a class="subhdr02" href="/nomcom/">NomCom</a></li>
<li class="subhdr02"><a class="subhdr02" href="/newcomers.html">Info&nbsp;for&nbsp;Newcomers</a></li>
<li class="subhdr00"><a class="subhdr00" href="/id-info/"><strong>Internet-Drafts</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/">Datatracker</a></li>
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/drafts/">Search</a></li>
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/idst/upload.cgi">Submit</a></li>
<li class="subhdr00"><a class="subhdr00" href="/rfc.html"><strong>RFC Pages</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="https://rfc-editor.org/rfcsearch.html">Search&nbsp;RFC&nbsp;Ed&nbsp;Index</a></li>
<li class="subhdr02"><a class="subhdr02" href="https://rfc-editor.org/queue2.html">RFC&nbsp;Editor&nbsp;Queue</a></li>
<li class="subhdr00"><a class="subhdr00" href="/iana.html"><strong>IANA Pages</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/assignments/">Protocol&nbsp;Parameters</a></li>
<li class="subhdr00"><a class="subhdr00" href="/wg/"><strong>Working Groups</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/dyn/wg/charter.html">WG&nbsp;Charters</a></li>
<li class="subhdr02"><a class="subhdr02" href="/list/wg/">Email&nbsp;Lists</a></li>
<li class="subhdr02"><a class="subhdr02" href="/wg/chairs-page.html">WG&nbsp;Chairs'&nbsp;Page</a></li>
<li class="subhdr00"><a class="subhdr00" href="/tools/"><strong>Resources</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/tools/tools.html">Community&nbsp;Tools</a></li>
<li class="subhdr02"><a class="subhdr02" href="https://tools.ietf.org/">Tools&nbsp;Team&nbsp;Pages</a></li>
<li class="subhdr02"><a class="subhdr02" href="/edu/">Edu&nbsp;Team&nbsp;Pages</a></li>
<li class="subhdr02"><a class="subhdr02" href="https://wiki.tools.ietf.org/group/">Wikis</a></li>
<li class="subhdr00"><a class="subhdr00" href="/meeting/"><strong>Meetings</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/meeting/upcoming.html">Upcoming&nbsp;Meetings</a></li>
<li class="subhdr02"><a class="subhdr02" href="/meeting/past.html">Past&nbsp;Meetings</a></li>
<li class="subhdr02"><a class="subhdr02" href="/meeting/interim-meetings.html">Interim&nbsp;Meetings</a></li>
<li class="subhdr02"><a class="subhdr02" href="/meeting/cutoff-dates.html">Important&nbsp;Dates</a></li>
<li class="subhdr02"><a class="subhdr02" href="/meeting/proceedings.html">Proceedings</a></li>
<li class="subhdr00"><a class="subhdr00" href="/list/"><strong>Mailing Lists</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/list/announcement.html">Announcement&nbsp;Lists</a></li>
<li class="subhdr02"><a class="subhdr02" href="/list/discussion.html">Discussion&nbsp;Lists</a></li>
<li class="subhdr02"><a class="subhdr02" href="/list/nonwg.html">Non-WG&nbsp;Lists</a></li>
<li class="subhdr00"><a class="subhdr00" href="/iesg/"><strong>IESG </strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/iesg/ann/new/">Announcements</a></li>
<li class="subhdr02"><a class="subhdr02" href="/iesg/statement.html">Statements</a></li>
<li class="subhdr02"><a class="subhdr02" href="/iesg/members.html">Members</a></li>
<li class="subhdr02"><a class="subhdr02" href="/iesg/minutes.html">Minutes</a></li>
<li class="subhdr00"><a class="subhdr00" href="/ipr/"><strong>IPR</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/ipr/policy.html">IPR&nbsp;Policy</a></li>
<li class="subhdr02"><a class="subhdr02" href="/ipr/file-disclosure">File&nbsp;a&nbsp;Disclosure</a></li>
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/ipr/search/">Disclosure&nbsp;Search</a></li>
<li class="subhdr00"><a class="subhdr00" href="/liaison/"><strong>Liaisons</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/liaison/">Liaison&nbsp;Statements</a></li>
<li class="subhdr02"><a class="subhdr02" href="/liaison/managers.html">Liaison&nbsp;Managers</a></li>
<li class="subhdr00"><a class="subhdr00" href="/contact-the-ietf.html"><strong>Contact</strong></a></li>
<li class="subhdr02"><a class="subhdr02" href="/secretariat.html">IETF&nbsp;Secretariat</a><sup>&reg;</sup></li>
<li class="subhdr02"><a class="subhdr02" href="https://iaoc.ietf.org/legalmatters.html">Legal&nbsp;Matters</a></li>
<li class="subhdr02"><a class="subhdr02" href="mailto:webmaster@ietf.org">Report&nbsp;Web&nbsp;Site&nbsp;Errors</a></li>
<li class="subhdr00"><strong>Customize View</strong><br />
</li>
<li class="subhdr01"><a class="subhdr01" href="javascript:setStyle('2');" title="Brief">Brief</a></li>
<li class="subhdr01"><a class="subhdr01" href="javascript:setStyle('1');" title="Normal">Normal</a></li>
<li class="subhdr01"><a class="subhdr01" href="javascript:setStyle('3');" title="Extended">Extended</a></li>
<li class="subhdr01"><a class="subhdr01" href="javascript:setStyle('4');" title="Advanced">Advanced</a></li>
<li class="subhdr01"><small>(Requires Javascript)</small></li>
</ul>
</div></td>

View file

@ -1,2 +0,0 @@
<p class="ptitle">IETF {{ meeting.number }} Proceedings</p>
<p><a href="index.html#intro">Introduction</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#wgreports">Area, Working Goup &amp; BoF Reports</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#plenary">Plenaries</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#training">Training</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#irtf">Internet Research Task Force</a></p>

View file

@ -1,16 +1,4 @@
<p>Use this to generate official proceedings for the selected meeting.</p>
<ul class="none">
<li>
<button id="generate-button">Generate Proceedings</button>
&nbsp;&nbsp;Last run:
{% if last_run %}
{{ last_run|date:"M d, Y H:i" }}&nbsp;&nbsp;<a href="{{ proceedings_url }}">Proceedings</a>
{% else %}
Never
{% endif %}
</li>
</ul>
<p>Use this to process meeting materials files that have been converted to PDF and uploaded to the server.</p>
<ul class="none">
<li>
@ -18,12 +6,6 @@
&nbsp;&nbsp;<span class="{% if ppt_count > 0 %}alert{% endif %}">{{ ppt_count }} PowerPoint files waiting to be converted</span>
</li>
</ul>
<p>Use this to generate the progress report for the plenary.</p>
<ul class="none">
<li><button onclick="window.location='{% url 'ietf.secr.proceedings.views.progress_report' meeting_num=meeting.number %}'">Generate Progress Report</button>
&nbsp;&nbsp;<a href="{{ MEDIA_URL }}proceedings/{{ meeting.number }}/progress-report.html">Progress Report</a>
</li>
</ul>
<p>Use this to input session recording information.</p>
<ul class="none">
<li><button onclick="window.location='{% url 'ietf.secr.proceedings.views.recording' meeting_num=meeting.number %}'">Recordings</button>

View file

@ -1,30 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>Acknowledgements</h2>
<h3>Host: </h3>
<h3>People: </h3>
<h3>AMS Staff: </h3>
<ul>
<li>Glen Barney</li>
<li>Marcia Beaulieu</li>
<li>Ryan Cross</li>
<li>Matt Larson</li>
<li>Wanda Lo</li>
<li>Kirsten Machi</li>
<li>Anabel Martinez</li>
<li>Stephanie McCammon</li>
<li>Karen Moreland</li>
<li>Cindy Morgan</li>
<li>Alexa Morris</li>
<li>Priyanka Narkar</li>
<li>Laura Nugent</li>
<li>Amy Vezza</li>
<li>Lisa Winkler</li>
<li>Steve Young</li>
</ul>
{% endblock %}

View file

@ -1,65 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h3>Agenda of IETF {{ meeting.number }}</h2>
{{ meeting.date|date:"F d,Y" }}<br />
(<a href="agenda.txt">Plain Text Agenda</a>)<br />
<p>*** Click on an acronym of the group to get a charter page ***<br />
*** Click on a name of the group to get a meeting agenda ***</p>
<table id="agenda">
{% for ss in scheduledsessions %}
{% ifchanged %}
<tr class="meeting-date">
<td colspan="6">
<h2 class="ietf-divider">{{ ss.timeslot.time|date:"l"|upper }}, {{ ss.timeslot.time|date:"F j, Y" }}</h2>
</td>
</tr>
{% endifchanged %}
{% ifchanged %}
<tr class="time-title">
<td colspan="1">
<b>{{ss.timeslot.time|date:"Hi"}}-{{ss.timeslot.end_time|date:"Hi"}}</b>
</td>
<td colspan="5">
<b>{{ss.timeslot.name}}</b>
{% if ss.timeslot.type.name != 'Session' %}
{% if ss.timeslot.show_location %} - {{ss.timeslot.get_location}}{% endif %}
{% endif %}
</td>
</tr>
{% endifchanged %}
{% if ss.timeslot.type.name == 'Session' %} {% if ss.session.group %}
<tr id="{{meeting.number}}-{{ss.timeslot.time|date:"D-Hi"|lower}}-{{ss.session.group.parent.acronym|upper}}-{{ss.session.group.acronym|lower}}" class="grouprow">
<td style="width:200px">{% if ss.timeslot.show_location %}{{ss.timeslot.get_location}}{% endif %}</td>
<td style="width:50px">{{ss.session.group.parent.acronym|upper}}</td>
<td style="width:100px">
{% if ss.session.group.charter %}<a href="{{ss.session.group.charter.get_absolute_url}}">{{ss.session.group.acronym}}</a>
{% else %}{{ss.session.group.acronym}}{% endif %}</td>
<td>
{% if ss.session.agenda %}<a href="/meeting/{{ meeting.number }}/agenda/{{ ss.session.group.acronym }}/">{{ss.session.group.name}}</a>
{% else %}{{ss.session.group.name}}{% endif %}
{% if ss.session.group.state.name == "BOF" %} BOF {% endif %}
{% if ss.session.agenda_note %}
<br/><span class="note">{{ss.session.agenda_note}}</span>{% endif %}</td>
</tr>
{% endif %} {% endif %}
{% if ss.timeslot.type.name == 'Plenary' %}
<tr class="grouprow">
<td style="width:200px">{% if ss.timeslot.show_location %}{{ss.timeslot.get_location}}{% endif %}</td>
<td></td>
<td></td>
<td>{% if ss.session.agenda %}<a href="{{ ss.session.agenda.get_absolute_url }}">Agenda</a>
{% else %}{{ss.session.group.name}}{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</table>
{% endblock %}

View file

@ -1,20 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>2.{{ index }} {{ area.name }}</h2>
<h3>Groups that met at {{ meeting }}</h3>
{% with groups_met as set %}
{% include "includes/proceeding_area.html" %}
{% endwith %}
<h3>Groups that did not meet at {{ meeting }}</h3>
{% with groups_not as set %}
{% include "includes/proceeding_area.html" %}
{% endwith %}
{% endblock %}

View file

@ -1,28 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h3>Attendee List of IETF {{ meeting.number }} Meeting</h3>
<!-- <table style="border-collapse:collapse;border:1px solid black;"> -->
<table border="1" callpadding="4" cellspacing="0">
<tr>
<td><strong>Last Name</strong></td>
<td><strong>First Name</strong></td>
<td><strong>Organization</strong></td>
<td><strong>ISO 3166 Code</strong></td>
</tr>
{% for attendee in attendees %}
<tr>
<td>{{ attendee.lname }}</td>
<td>{{ attendee.fname }}</td>
<td>{{ attendee.company }}</td>
<td>{{ attendee.country }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View file

@ -1,55 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
<p class="ptitle">IETF {{ meeting.number }} Proceedings</p>
<h2>{{ meeting.city }}, {{ meeting.country }}<br />{{ meeting.date }}</h2>
<h3>Table of Contents</h3>
<p><a href="index.html#intro">Introduction</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#wgreports">Area, Working Goup &amp; BoF Reports</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#plenary">Plenaries</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#training">Training</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#irtf">Internet Research Task Force</a></p>
<hr />
<h3><a name="intro" id="intro"></a>1. Introduction </h3>
<ul>
<li><a href="acknowledgement.html">1.1 Acknowledgements</a></li>
<li><a href="overview.html">1.2 IETF Overview</a></li>
<li><a href="progress-report.html">1.3 Progress Report</a></li>
<li><a href="agenda.html">1.4 Agenda</a></li>
<li><a href="attendee.html">1.5 Attendees</a></li>
</ul>
<hr />
<h3><a name="wgreports" id="wgreports"></a>2. Area, Working Group and BoF Reports </h3>
<ul>
{% for area in areas %}
<li><a href="{{ area.acronym }}.html">2.{{ forloop.counter }} {{ area.name }}</a></li>
{% endfor %}
</ul>
<hr />
<h3><a name="plenary" id="plenary"></a>3. Plenaries</h3>
<ul>
<li><a href ="administrative-plenary.html">3.1 Administrative Plenary</a></li>
<li><a href="technical-plenary.html">3.2 Technical Plenary</a></li>
</ul>
<hr />
<h3><a name="training" id="training">4. Training</h3>
<ul>
{% for other in others %}
<li><a href="train-{{ forloop.counter }}.html">4.{{ forloop.counter }} {{ other.name }}</a></li>
{% endfor %}
</ul>
<hr />
<h3><a name="irtf" id="irtf">5. Internet Research Task Force </h3>
<ul>
<li><a href="irtf.html">5.1 IRTF introduction</a></li>
<li><a href="rg_irtf.html">5.2 Research Groups</a></li>
</ul>
<hr />
{% if extras %}
<h3>6. Other</h3>
<ul>
{% for group in extras %}
<li><a href="{{ group.acronym }}.html">6.{{ forloop.counter }} {{ group.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% endblock %}

View file

@ -1,67 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>IRTF Mission</h2>
<p><em>To promote research of importance to the evolution of the future Internet by
creating focused, long-term and small Research Groups working on topics related to
Internet protocols, applications, architecture and technology.</em></p>
<p><img src="https://www.irtf.org/images/div.gif" alt="[Dividing Line Image]" WIDTH="465" HEIGHT="7"> </p>
<H2>IRTF Research Groups</H2>
<p>The Internet Research Task Force is composed of a number
of small <a href="https://www.irtf.org/groups">Research Groups</a>. Research Groups are usually focussed and long term, though short lived "task force" like Research Groups are possible.<p>
<hr />
</p>
<h2>IRTF Overview</h2>
<p>
The <a href="https://www.irtf.org/groups">Research Groups</a> work on topics related to
Internet protocols, applications, architecture and technology. Research Groups are
expected to have the stable long term (with respect to the lifetime of the Research Group) membership needed to promote the development of
research collaboration and teamwork in exploring research issues. Participation is by
individual contributors, rather than by representatives of organizations. </p>
<p>The IRTF is managed by the IRTF Chair in consultation with the Internet Research
Steering Group (IRSG). The IRSG membership includes the IRTF Chair, the chairs of the
various Research Group and possibly other individuals ("members at large") from
the research community. </p>
<p>The IRTF Chair is appointed by the <a href="https://www.iab.org/">Internet
Architecture Board (IAB)</a>, the Research Group chairs are appointed as part of the
formation of Research Groups and the IRSG members at large are chosen by the IRTF Chair in
consultation with the rest of the IRSG and on approval of the IAB. In addition to managing
the Research Groups, the IRSG may from time to time hold topical workshops focusing on
research areas of importance to the evolution of the Internet, or more general workshops
to, for example, discuss research priorities from an Internet perspective. </p>
<p>The IRTF Research Groups guidelines and procedures are described more fully in
<a href="ftp://ftp.isi.edu/in-notes/rfc2014.txt">RFC 2014 (BCP 8)</a>.</p>
<hr />
<h2>Mail Lists</h2>
<p>Each IRTF Research Group maintains one or more open mailing lists.
Information on these lists is available on the individual research
group's pages.</p>
<p>The <a
href="https://www.ietf.org/mailman/listinfo/irtf-announce">IRTF
Announce</a> list receive notices of IRTF Research Group creation
and termination, document publication, invitations for feedback and
participation, and other IRTF activities.</p>
<hr />
<h2>Sponsors</h2>
<p>The IRTF gratefully acknowledges support from the following organizations:<br>
<ul>
<li><a href="https://www.ietf.org/">The Internet Engineering Task Force (IETF)</a>
<li><a href="https://www.isoc.org/">The Internet Society (ISOC)</a>
</UL>
<hr />
<h2>IRTF Chair</h2>
<p>{{ irtf_chair.person }} currently serves as IRTF Chair; he can
be reached at <a
href="mailto:irtf-chair@irtf.org"><em>irtf-chair@irtf.org</em></a>.</p>
{% endblock %}

View file

@ -1,138 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>IETF Overview</h2>
<p>The Internet Engineering Task Force (IETF) provides a forum for working groups to coordinate
technical development of new protocols. Its most important function is the development and selection
of standards within the Internet protocol suite.</p><p>The IETF began in January 1986 as a forum for
technical coordination by contractors for the then US Defense Advanced Research Projects Agency
(DARPA), working on the ARPANET, US Defense Data Network (DDN), and the Internet core gateway
system. Since that time, the IETF has grown into a large open international community of network
designers, operators, vendors, and researchers concerned with the evolution of the Internet
architecture and the smooth operation of the Internet.</p>
<p>The IETF mission includes:</p>
<ul>
<li>Identifying and proposing solutions to pressing operational and technical problems in the Internet </li>
<li>Specifying the development or usage of protocols and the near-term architecture, to solve technical problems for the Internet </li>
<li>Facilitating technology transfer from the Internet Research Task Force (IRTF) to the wider Internet community;and</li>
<li>Providing a forum for the exchange of relevant information within the Internet community between vendors, users, researchers, agency contractors, and network managers.</li>
</ul>
<p>Technical activities in the IETF are addressed within working groups. All working groups are
organized roughly by function into seven areas. Each area is led by one or more Area Directors who
have primary responsibility for that one area of IETF activity. Together with the Chair of the
IETF/IESG, these Area Directors comprise the Internet Engineering Steering Group (IESG).</p>
<p>
<table cellspacing="1" cellpadding="1" border="1">
<tbody>
<tr>
<td valign="Top" width="191">Name</td>
<td valign="Top" width="204">Area</td>
<td valign="Top" width="216">Email</td>
</tr>
<tr>
<td valign="Top" width="191">{{ ietf_chair.person }}</td>
<td valign="Top" width="204">IETF Chair</td>
<td valign="Top" width="216">chair@ietf.org</td>
</tr>
{% for ad in ads %}
<tr>
<td valign="Top" width="191">{{ ad.person }}</td>
<td valign="Top" width="204">{{ ad.group }}</td>
<td valign="Top" width="216">{{ ad.email }}</td>
</tr>
{% endfor %}
</table>
<p>Liaison and ex-officio members include: </p>
<p>
<table border="1">
<tbody>
<tr>
<td valign="Top" width="216">Olaf Kolkman</td>
<td valign="Top" width="216">IAB Chair</td>
<td valign="Top" width="216">iab-chair@iab.org</td>
</tr>
<tr>
<td valign="Top" width="216">Danny McPherson</td>
<td valign="Top" width="216">IAB Liaison</td>
<td valign="Top" width="216">danny@tcb.net</td>
</tr>
<tr>
<td valign="Top" width="216">Michelle Cotton</td>
<td valign="Top" width="216">IANA Liaison</td>
<td valign="Top" width="216">iana@iana.org</td>
</tr>
<tr>
<td valign="Top" width="216">Sandy Ginoza</td>
<td valign="Top" width="216">RFC Editor Liaison</td>
<td valign="Top" width="216">rfc-editor@rfc-editor.org</td>
</tr>
<tr>
<td valign="Top" width="216">Alexa Morris</td>
<td valign="Top" width="216">IETF Secretariat Liaison</td>
<td valign="Top" width="216">exec-director@ietf.org</td>
</tr>
</tbody>
</table>
<p>The IETF has a Secretariat, which is managed by Association Management Solutions, LLC (AMS) in
Fremont, California.The IETF Executive Director is Alexa Morris
<a href="mailto:exec-director@ietf.org">(exec-director@ietf.org)</a>.</p>
<br>Other personnel that provide full-time support to the Secretariat include:<br><br>
<table border="1">
<tbody>
<tr>
<td valign="Top" width="264">Senior Meeting Planner</td>
<td valign="Top" width="180">Marcia Beaulieu</td>
</tr>
<tr>
<td valign="Top" width="264">Project Manager</td>
<td valign="Top" width="180">Stephanie McCammon</td>
</tr>
<tr>
<td valign="Top" width="264">Meeting Registrar</td>
<td valign="Top" width="180">Maddy Conner</td>
</tr>
<tr>
<td valign="Top" width="264">Project Manager</td>
<td valign="Top" width="180">Cindy Morgan</td>
</tr>
<tr>
<td valign="Top" width="264">Project Manager</td>
<td valign="Top" width="180">Amy Vezza</td>
</tr>
</tbody>
</table>
<p>To contact the Secretariat, please refer to the addresses and URLs provided on the
<a href="https://www.ietf.org/secretariat.html">IETF Secretariat</a> Web page. </p>
<p>The IETF also has a general Administrative Support Activity headed by the IETF Administrative
Director, Ray Pelletier <a href="mailto:iad@ietf.org">iad@ietf.org</a></p>
<p>The working groups conduct their business during the tri-annual IETF meetings, at interim working
group meetings, and via electronic mail on mailing lists established for each group. The tri-annual
IETF meetings are 4.5 days in duration, and consist of working group sessions, training sessions,
and plenary sessions. The plenary sessions include technical presentations, status reports, and an
open IESG meeting.</p>
<p>Following each meeting, the IETF Secretariat publishes meeting proceedings,
which contain reports from all of the groups that met, as well as presentation slides, where
available. The proceedings also include a summary of the standards-related activities that took
place since the previous IETF meeting.</p>
<p>Meeting minutes, working group charters (including
information about the working group mailing lists), and general information on current IETF
activities are available on the IETF Web site at
<a href="https://www.ietf.org">https://www.ietf.org</a>.</p>
{% endblock %}

View file

@ -1,20 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>{{ title }} Plenary</h2>
{% if minutes %}
<h3><a href="{{ minutes.0.get_absolute_url }}">Minutes</a></h3>
{% endif %}
<h3>Slides</h3>
<ul>
{% for slide in slides %}
<li><a href="{{ slide.get_absolute_url }}">{{ slide.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -1,169 +0,0 @@
{% include "includes/proceeding_header.html" %}
{% load ams_filters %}
{% comment %}
This is a unique template in the Secretariat Django project in that it does not extend
the standard base templates. Instead we include proceedings_header.html and
proceedings_footer.html which are used in the PHP apps.
Note this section should begin with
<td id="content1"><div id="content2">
and end with
</div></td></tr>
{% endcomment %}
<td id="content1"><div id="content2">
{% if meeting.type.slug == "ietf" %}
<p class="ptitle">{{ meeting }} Proceedings</p>
<p><a href="index.html#intro">Introduction</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#wgreports">Area, Working Goup &amp; BoF Reports</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#plenary">Plenaries</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#training">Training</a>&nbsp;&nbsp;|&nbsp; <a href="index.html#irtf">Internet Research Task Force</a></p>
<h2>{{ group.name }} ({{ group.acronym }}) ({% if group.state.slug == "bof" %}{{ group.state }}{% else %}{{ group.type }}{% endif %})</h2>
{% else %}
<h2>{{ group.name }} ({{ group.acronym }})</h2>
<h3>Interim Meeting of {{ meeting.date }}</h3>
{% endif %}
<h3>
{% if materials.minutes %}
<a href="{{ materials.minutes.get_absolute_url }}">Minutes</a>
{% else %}
Minutes
{% endif %}&nbsp;&nbsp;|&nbsp;&nbsp;
{% if meeting.type.slug == "ietf" %}
{% comment %}<a href="/audio/ietf{{ meeting.number }}/">Audio Archives</a>&nbsp;&nbsp;|&nbsp;&nbsp; {% endcomment %}
{% else %}
{% if materials.agenda %}
<a href="{{ materials.agenda.get_absolute_url }}">Agenda</a>
{% else %}
Agenda
{% endif %}&nbsp;&nbsp;|&nbsp;&nbsp;
{% endif %}
<a href="https://jabber.ietf.org/logs/{{ group.acronym }}/">Jabber Logs</a>&nbsp;&nbsp;|&nbsp;&nbsp;
{% if group.list_archive %}
<a href="{{ group.list_archive }}">Mailing List Archives</a>
{% endif %}
</h3>
{% if group.type.slug == "wg" and group.state.slug != "bof" %}
<p>Additional information is available at <a href="https://tools.ietf.org/wg/{{ group.acronym }}">tools.ietf.org/wg/{{ group.acronym }}</a>
{% endif %}
<table width="60%" border="0" cellspacing="2" cellpadding="2">
<tr><td bgcolor="#EEEEFF">
<h3>Chair(s):</h3>
<ul>
{% for chair in chairs %}
<li><a href="mailto:{{ chair.email.address }}">{{ chair.person.name }}</a></li>
{% endfor %}
</ul>
{% if secretaries %}
{% if secretaries.count > 1 %}<h3>Secretaries</h3>{% else %}<h3>Secretary</h3>{% endif %}
<ul>
{% for secretary in secretaries %}
<li><a href="mailto:{{ secretary.email.address }}">{{ secretary.person.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
<h3>{{ group.parent.name }} Area Director(s):</h3>
<ul>
{% for ad in ads %}
<li><a href="mailto:{{ ad.email.address }}">{{ ad.person.name }}</a></li>
{% endfor %}
</ul>
{% if group.ad_role %}
<h3>Assigned Area Director</h3>
<ul>
<li><a href="mailto:{{ group.ad_role.email.address }}">{{ group.ad_role.person }}</a></li>
</ul>
{% endif %}
{% if tas %}
<h3>Technical Advisor(s)</h3>
<ul>
{% for advisor in tas %}
<li><a href="mailto:{{ advisor.email.address }}">{{ advisor.person.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
<br /><br /></td></tr></table>
{% if status_update %}
<h3>Status Update (provided {{status_update.time|date:"Y-m-d"}})</h3>
<pre class="pasted">{{status_update.desc|escape|urlize}}</pre>
{% endif %}
<h3>Recordings:</h3>
{% if materials.recording %}
<ul>
{% for recording in materials.recording %}
<li><a href="{{ recording.href }}" target="_blank">{{ recording.title }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No Recordings Present</p>
{% endif %}
<h3>Meeting Slides:</h3>
{% if materials.slides %}
<ul>
{% for slide in materials.slides %}
<li><a href="{{ slide.get_absolute_url }}" target="_blank">{{ slide.title }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No Slides Present</p>
{% endif %}
{% if bluesheets %}
<h3>Blue Sheets:</h3>
<ul>
{% for item in bluesheets %}
<li><a href="{{ item.url }}" target="_blank">{{ item.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% if drafts %}
<h3>Internet-Drafts:</h3>
<ul>
{% for draft in drafts %}
<li><a href="{{ draft.url }}" target="_blank">{{ draft.title}}</a> ({{ draft.bytes }} bytes)</li>
{% endfor %}
</ul>
{% else %}
<h3>No Current Internet-Drafts</h3>
{% endif %}
{% if rfcs %}
<h3>Request for Comments:</h3>
<ul>
{% for rfc in rfcs %}
<li><a href="{{ rfc.url }}" target="_blank">{{ rfc.title }} ({{ rfc.num }})</a> ({{ rfc.bytes }} bytes)
{% if rfc.rmsg %}<font color="red"> {{rfc.rmsg }}</font>{% endif %}
{% if rfc.msg %}<font color="orange"> {{ rfc.msg }}</font>{% endif %}
</li>
{% endfor %}
</ul>
{% else %}
<h3>No Request for Comments</h3>
{% endif %}
<h3>Charter{% if ctime %} (as of {{ ctime|date:"Y-m-d" }}){% endif %}:</h3>
<p>{% if charter %}{{ charter|safe }}{% else %}Charter not found{% endif %}</p>
{% if group.milestones %}
<h3>Goals and Milestones:</h3>
<table>
{% for milestone in group.milestone_set.all %}
<tr align="left" valign="top">
<td width="70" valign="top">
{% if milestone.done %}Done{% else %}{{ milestone.expected_due_date|date:"m-Y" }}{% endif %}
</td>
<td>&nbsp;&nbsp;</td><td>{{ milestone.desc }}</td>
</tr>
{% endfor %}
</table>
{% endif %}
</div></td></tr>
{% include "includes/proceeding_footer.html" %}

View file

@ -1,21 +0,0 @@
{% include "includes/proceeding_header.html" %}
{% load ams_filters %}
{% comment %}
This is a unique template in the Secretariat Django project in that it does not extend
the standard base templates. Instead we include proceedings_header.html and
proceedings_footer.html which are used in the PHP apps.
Note this section should begin with
<td id="content1"><div id="content2">
and end with
</div></td></tr>
{% endcomment %}
<td id="content1"><div id="content2">
{% block content %}{% endblock %}
</div></td></tr>
{% include "includes/proceeding_footer.html" %}

View file

@ -1,51 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% load ams_filters %}
{% block content %}
{% if final %}
{% include "includes/proceeding_title.html" %}
{% endif %}
<h2>IETF Progress Report</h2>
<h4>{{ sdate|date:"d-F-y" }} to {{ edate|date:"d-F-y" }}</h4>
&nbsp;&nbsp;&nbsp;{{ action_events.count }} IESG Protocol and Document Actions this period<br />
&nbsp;&nbsp;&nbsp;{{ lc_events.count }} IESG Last Calls issued to the IETF this period<br />
{# &nbsp;&nbsp;&nbsp;{{ new_docs.count }} new or revised Internet-Drafts this period<br /> #}
<br />
&nbsp;&nbsp;&nbsp;{{ new|stringformat:"3s" }} New I-Ds ({{ updated }} of which were updated, some ({{ updated_more }}) more than once)<br />
&nbsp;&nbsp;&nbsp;{{ total_updated|stringformat:"3s" }} I-Ds were updated (Some more than once)<br />
<br />
&nbsp;&nbsp;&nbsp;In the final 4 weeks before meeting<br />
&nbsp;&nbsp;&nbsp;{{ ff_new_count|stringformat:"3s" }} New I-Ds were received - {{ ff_new_percent }} of total newbies since last meeting<br />
&nbsp;&nbsp;&nbsp;{{ ff_update_count|stringformat:"3s" }} I-Ds were updated - {{ ff_update_percent }} of total updated since last meeting<br />
<br />
<h4>{{ new_groups.count }} New Working Group(s) formed this period</h4>
{% for group in new_groups %}
&nbsp;&nbsp;&nbsp;{{ group.name }} ({{ group.acronym }})<br />
{% endfor %}
<h4>{{ concluded_groups.count }} Working Group(s) concluded this period</h4>
{% for group in concluded_groups %}
&nbsp;&nbsp;&nbsp;{{ group.name }} ({{ group.acronym }})<br />
{% endfor %}
<h4>{{ rfcs.count }} RFCs published this period</h4>
{{ counts.std }} Standards Track; {{ counts.bcp }} BCP; {{ counts.exp }} Experimental; {{ counts.inf }} Informational<br />
<br />
<table cellpadding="3" cellspacing="2">
{% for rfc in rfcs %}
<tr>
<td><a href="{{ rfc.ftp_url }}">{{ rfc.doc.canonical_name|upper }}</a></td>
<td>{{ rfc.doc.intended_std_level.name|abbr_status }}</td>
<td>({{ rfc.doc.group.acronym }})</td>
<td>{{ rfc.time|date:"F Y" }}</td>
<td>{{ rfc.doc.title }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View file

@ -1,15 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>5.2 Research Groups</h2>
<ul>
{% for group in groups %}
<li><a href="{{ group.proceedings_url }}">{{ group.name }} ({{ group.acronym }})</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -5,25 +5,6 @@
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% static 'secr/js/utils.js' %}"></script>
<script type="text/javascript">
$(document).ready(function() {
$.ajaxSetup ({
cache: false
});
$('#generate-button').click(function(){
var ajax_load = '<p><h4 align="center">Generating Proceedings. This may take a few minutes.</h3><img class="loading" src="{% static "secr/img/ajax-loader.gif" %}" alt="loading..." /></p>';
var url = window.location.pathname;
var parts = url.split("/");
var loadUrl = "/secr/proceedings/ajax/generate-proceedings/" + parts[3] + "/";
$("#private-functions").html(ajax_load).load(loadUrl);
});
});
</script>
{% endblock %}

View file

@ -1,24 +0,0 @@
{% extends "proceedings/proceedings_template.html" %}
{% block content %}
{% include "includes/proceeding_title.html" %}
<h2>{{ title }}</h2>
{% if minutes %}
<h3><a href="{{ minutes.0.get_absolute_url }}">Minutes</a></h3>
{% endif %}
<h3>Slides</h3>
{% if slides %}
<ul>
{% for slide in slides %}
<li><a href="{{ slide.get_absolute_url }}">{{ slide.title }}</a></li>
{% endfor %}
</ul>
{% else %}
None Received
{% endif %}
{% endblock %}