Remove old proceedings generation code. Fixes #2234. Commit ready for merge.
- Legacy-Id: 13492
This commit is contained in:
parent
e0c994ffea
commit
254e35fa56
|
@ -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 %}
|
||||
|
|
|
@ -3,12 +3,9 @@ proc_utils.py
|
|||
|
||||
This module contains all the functions for generating static proceedings pages
|
||||
'''
|
||||
from urllib2 import urlopen
|
||||
import datetime
|
||||
import glob
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
@ -16,28 +13,19 @@ import debug # pyflakes:ignore
|
|||
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
|
||||
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})')
|
||||
|
||||
# -------------------------------------------------
|
||||
# Helper Functions
|
||||
# -------------------------------------------------
|
||||
|
||||
def import_audio_files(meeting):
|
||||
'''
|
||||
Checks for audio files and creates corresponding materials (docs) for the Session
|
||||
|
@ -112,7 +100,6 @@ def get_or_create_recording_document(filename,session):
|
|||
pass
|
||||
return create_recording(session,url)
|
||||
|
||||
|
||||
def create_recording(session,url):
|
||||
'''
|
||||
Creates the Document type=recording, setting external_url and creating
|
||||
|
@ -170,18 +157,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
|
||||
|
||||
def get_progress_stats(sdate,edate):
|
||||
'''
|
||||
This function takes a date range and produces a dictionary of statistics / objects for
|
||||
|
@ -248,18 +223,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
|
||||
|
@ -285,366 +248,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 = 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
|
||||
|
|
|
@ -14,9 +14,8 @@ from ietf.utils.test_utils import TestCase
|
|||
from ietf.utils.mail import outbox
|
||||
|
||||
from ietf.name.models import SessionStatusName
|
||||
from ietf.meeting.factories import SessionFactory
|
||||
|
||||
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)
|
||||
|
||||
|
@ -175,24 +174,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)
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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):
|
||||
'''
|
||||
|
@ -303,9 +240,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)
|
||||
|
||||
|
@ -345,7 +279,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:
|
||||
|
|
|
@ -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 %}
|
|
@ -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 Site Usage 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 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 Trust</a> - <a href="https://www.isoc.org/">ISOC</a> - <a href="https://www.cafepress.com/ietf">Store</a> - <a href="/secretariat.html">Contact 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 />
|
||||
</p>
|
||||
</div></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -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 Process</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/about/note-well.html">Note Well</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/nomcom/">NomCom</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/newcomers.html">Info for 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 RFC Ed Index</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="https://rfc-editor.org/queue2.html">RFC Editor 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 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 Charters</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/list/wg/">Email Lists</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/wg/chairs-page.html">WG Chairs' 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 Tools</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="https://tools.ietf.org/">Tools Team Pages</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/edu/">Edu Team 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 Meetings</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/meeting/past.html">Past Meetings</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/meeting/interim-meetings.html">Interim Meetings</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/meeting/cutoff-dates.html">Important 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 Lists</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/list/discussion.html">Discussion Lists</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/list/nonwg.html">Non-WG 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 Policy</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/ipr/file-disclosure">File a Disclosure</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="https://datatracker.ietf.org/ipr/search/">Disclosure 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 Statements</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="/liaison/managers.html">Liaison 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 Secretariat</a><sup>®</sup></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="https://iaoc.ietf.org/legalmatters.html">Legal Matters</a></li>
|
||||
<li class="subhdr02"><a class="subhdr02" href="mailto:webmaster@ietf.org">Report Web Site 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>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
<p class="ptitle">IETF {{ meeting.number }} Proceedings</p>
|
||||
<p><a href="index.html#intro">Introduction</a> | <a href="index.html#wgreports">Area, Working Goup & BoF Reports</a> | <a href="index.html#plenary">Plenaries</a> | <a href="index.html#training">Training</a> | <a href="index.html#irtf">Internet Research Task Force</a></p>
|
|
@ -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>
|
||||
Last run:
|
||||
{% if last_run %}
|
||||
{{ last_run|date:"M d, Y H:i" }} <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 @@
|
|||
<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>
|
||||
<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>
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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> | <a href="index.html#wgreports">Area, Working Goup & BoF Reports</a> | <a href="index.html#plenary">Plenaries</a> | <a href="index.html#training">Training</a> | <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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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> | <a href="index.html#wgreports">Area, Working Goup & BoF Reports</a> | <a href="index.html#plenary">Plenaries</a> | <a href="index.html#training">Training</a> | <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 %} |
|
||||
{% if meeting.type.slug == "ietf" %}
|
||||
{% comment %}<a href="/audio/ietf{{ meeting.number }}/">Audio Archives</a> | {% endcomment %}
|
||||
{% else %}
|
||||
{% if materials.agenda %}
|
||||
<a href="{{ materials.agenda.get_absolute_url }}">Agenda</a>
|
||||
{% else %}
|
||||
Agenda
|
||||
{% endif %} |
|
||||
{% endif %}
|
||||
<a href="https://jabber.ietf.org/logs/{{ group.acronym }}/">Jabber Logs</a> |
|
||||
{% 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> </td><td>{{ milestone.desc }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
</div></td></tr>
|
||||
|
||||
{% include "includes/proceeding_footer.html" %}
|
|
@ -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" %}
|
|
@ -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>
|
||||
|
||||
{{ action_events.count }} IESG Protocol and Document Actions this period<br />
|
||||
{{ lc_events.count }} IESG Last Calls issued to the IETF this period<br />
|
||||
{# {{ new_docs.count }} new or revised Internet-Drafts this period<br /> #}
|
||||
<br />
|
||||
{{ new|stringformat:"3s" }} New I-Ds ({{ updated }} of which were updated, some ({{ updated_more }}) more than once)<br />
|
||||
{{ total_updated|stringformat:"3s" }} I-Ds were updated (Some more than once)<br />
|
||||
<br />
|
||||
In the final 4 weeks before meeting<br />
|
||||
{{ ff_new_count|stringformat:"3s" }} New I-Ds were received - {{ ff_new_percent }} of total newbies since last meeting<br />
|
||||
{{ 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 %}
|
||||
{{ group.name }} ({{ group.acronym }})<br />
|
||||
{% endfor %}
|
||||
|
||||
<h4>{{ concluded_groups.count }} Working Group(s) concluded this period</h4>
|
||||
{% for group in concluded_groups %}
|
||||
{{ 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 %}
|
|
@ -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 %}
|
|
@ -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 %}
|
||||
|
||||
|
||||
|
|
|
@ -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 %}
|
Loading…
Reference in a new issue