Skip to content

Commit 1c9bf9b

Browse files
author
Michael Lee
committed
meeting_agenda_html.cgi porting has been completed.
* Add a new method, affiliation to idtracker/models.py, in class PersonOrOrgInfo * Agenda for the Plenaries should be stored in /home/master-site/proceedings directory to be displayed. * Bug found in listing ADs at the end of the agenda. An agenda always lists the current IESG instead of the IESG at each meeting. Bug is fixed in the ported tool. * meeting_agenda_text.cgi was obsolete, but ported anyway in case someone still has it bookmarked. - Legacy-Id: 182
1 parent 27460c9 commit 1c9bf9b

6 files changed

Lines changed: 163 additions & 32 deletions

File tree

ietf/idtracker/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,15 @@ def email(self, priority=1, type='INET'):
216216
except EmailAddress.DoesNotExist:
217217
email = ''
218218
return (name, email)
219+
# Added by Sunny Lee to display person's affiliation - 5/26/2007
220+
def affiliation(self, priority=1, type='INET'):
221+
try:
222+
postal = self.postaladdress_set.get(address_priority=1)
223+
except PostalAddress.DoesNotExist:
224+
return "PersonOrOrgInfo with no name, no postal address!"
225+
except AssertionError:
226+
return "PersonOrOrgInfo with multiple priority-1 addresses!"
227+
return "%s" % ( postal.affiliated_company or postal.department or "???" )
219228
class Meta:
220229
db_table = 'person_or_org_info'
221230
ordering = ['last_name']

ietf/meeting/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
(r'^$', views.showlist),
66

77
(r'^(?P<meeting_num>\d+)/$', views.show),
8-
(r'^(?P<meeting_num>\d+)/agenda.html$', views.show_html_agenda),
8+
(r'^(?P<meeting_num>\d+)/agenda.(?P<html_or_txt>\S+)$', views.show_html_agenda),
99
(r'^(?P<meeting_num>\d+)/materials.html$', views.show_html_materials),
1010

1111

ietf/meeting/views.py

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import django.newforms as forms
55
from django.utils.html import escape, linebreaks
66
import ietf.utils
7-
from ietf.proceedings.models import Meeting, MeetingTime, WgMeetingSession, SessionName, NonSession, MeetingVenue
7+
from ietf.proceedings.models import Meeting, MeetingTime, WgMeetingSession, SessionName, NonSession, MeetingVenue, IESGHistory
88
from django.views.generic.list_detail import object_list
9+
from django.http import Http404
910

1011
def default(request):
1112
"""Default page, with links to sub-pages"""
@@ -31,15 +32,37 @@ def meeting_list(request, template):
3132
def show_html_materials(request, meeting_num=None):
3233
return render("meeting/list.html",{})
3334

34-
def show_html_agenda(request, meeting_num=None):
35-
meeting_info=Meeting.objects.filter(meeting_num=meeting_num)[0]
35+
def show_html_agenda(request, meeting_num=None, html_or_txt=None):
36+
try:
37+
queryset_list=MeetingTime.objects.filter(meeting=meeting_num).exclude(day_id=0).order_by("day_id","time_desc")
38+
except MeetingTime.DoesNotExist:
39+
raise Http404
40+
meeting_info=Meeting.objects.get(meeting_num=meeting_num)
3641
nonsession_info=NonSession.objects.filter(meeting=meeting_num,day_id__gte='0').order_by("day_id")
37-
meetingvenue_info=MeetingVenue.objects.filter(meeting_num=meeting_num)[0]
38-
queryset_list=MeetingTime.objects.filter(meeting=meeting_num).exclude(day_id=0).order_by("day_id","time_desc")
39-
plenaryw_agenda = "17:00 Welcome\n17:05 NOC report (Wieslaw Blysz, Siemens Networks))\n Host presentation (Georg Haubs, CTO Innovations of Siemens Networks)\n17:20 IETF Chair and IAD short reports\n17:30 Jonathan B. Postel award\n17:40 NomCom Chair (Andrew Lange)\n17:45 Open Microphone\n19:30 (latest) end <end of text>" #only for testing. In production, this text will be pulled from actualy agenda file
40-
plenaryt_agenda = "-17h00 Welcome and introduction (Leslie Daigle)\n-17h05 IAB update (Leslie Daigle)\nTH17h15 IRTF Report (Aaron Falk)\nTH17h25 Technical Presentations\n Highlights from draft-iab-net-transparent\n (Bernard Aboba)\n Readout from Unwanted Traffic Workshop\n (Danny McPherson & Loa Andersson)\n Readout from the Routing & Addressing Workshop\n (Dave Meyer, Chris Morrow)\n Next steps from RAWS (Leslie Daigle)\nTH19h00 IAB open Mic\n-19h30 End. " #only for testing. In production, this text will be pulled from actualy agenda file
41-
#queryset_list=WgMeetingSession.objects.filter(meeting_num=meeting_num, group_acronym_id > -3)
42-
42+
try:
43+
meetingvenue_info=MeetingVenue.objects.get(meeting_num=meeting_num)
44+
except MeetingVenue.DoesNotExist:
45+
raise Http404
46+
plenaryt_agenda_file = "/home/master-site/proceedings/%s" % WgMeetingSession.objects.get(meeting=meeting_num,group_acronym_id=-2).agenda_file()
47+
try:
48+
f = open(plenaryt_agenda_file)
49+
plenaryt_agenda = f.read()
50+
f.close()
51+
except IOError:
52+
plenaryt_agenda = "THE AGENDA HAS NOT BEEN UPLOADED YET"
53+
if html_or_txt == "html":
54+
template_file="meeting/agenda.html"
55+
elif html_or_txt == "txt":
56+
template_file="meeting/agenda.txt"
57+
else:
58+
raise Http404
59+
plenaryw_agenda_file = "/home/master-site/proceedings/%s" % WgMeetingSession.objects.get(meeting=meeting_num,group_acronym_id=-1).agenda_file()
60+
try:
61+
f = open(plenaryw_agenda_file)
62+
plenaryw_agenda = f.read()
63+
f.close()
64+
except IOError:
65+
plenaryw_agenda = "THE AGENDA HAS NOT BEEN UPLOADED YET"
4366
# Due to a bug in Django@0.96 we can't use foreign key lookup in
4467
# order_by(), see http://code.djangoproject.com/ticket/2076. Changeset
4568
# [133] is broken because it requires a patched Django to run. Work
@@ -48,7 +71,9 @@ def show_html_agenda(request, meeting_num=None):
4871
## queryset_list_sun=WgMeetingSession.objects.filter(meeting=meeting_num, sched_time_id1__day_id=0).order_by('sched_time_id1__time_desc')
4972
queryset_list_sun=list(WgMeetingSession.objects.filter(meeting=meeting_num, sched_time_id1__day_id=0))
5073
queryset_list_sun.sort(key=(lambda item: item.sched_time_id1.time_desc))
51-
return object_list(request,queryset=queryset_list, template_name='meeting/agenda.html',allow_empty=True, extra_context={'qs_sun':queryset_list_sun, 'meeting_info':meeting_info, 'meeting_num':meeting_num, 'nonsession_info':nonsession_info, 'meetingvenue_info':meetingvenue_info, 'plenaryw_agenda':plenaryw_agenda, 'plenaryt_agenda':plenaryt_agenda})
74+
queryset_list_ads = list(IESGHistory.objects.filter(meeting=meeting_num))
75+
queryset_list_ads.sort(key=(lambda item: item.area.area_acronym.acronym))
76+
return object_list(request,queryset=queryset_list, template_name=template_file,allow_empty=True, extra_context={'qs_sun':queryset_list_sun, 'meeting_info':meeting_info, 'meeting_num':meeting_num, 'nonsession_info':nonsession_info, 'meetingvenue_info':meetingvenue_info, 'plenaryw_agenda':plenaryw_agenda, 'plenaryt_agenda':plenaryt_agenda, 'qs_ads':queryset_list_ads})
5277

5378
def show(request):
5479
return 0

ietf/proceedings/models.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.db import models
2-
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, IETFWG
2+
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, Area, IETFWG
33
import datetime
44
from ietf.utils import log
55

@@ -147,7 +147,17 @@ class Meta:
147147
db_table = 'session_names'
148148
class Admin:
149149
pass
150-
150+
class IESGHistory(models.Model):
151+
meeting = models.ForeignKey(Meeting, db_column='meeting_num', primary_key=True, core=True)
152+
area = models.ForeignKey(Area, db_column='area_acronym_id', primary_key=True, core=True)
153+
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, core=True)
154+
def __str__(self):
155+
return "%s (%s)" % (self.person,self.area)
156+
class Meta:
157+
db_table = 'iesg_history'
158+
class Admin:
159+
pass
160+
151161
class MeetingTime(models.Model):
152162
time_id = models.AutoField(primary_key=True)
153163
time_desc = models.CharField(maxlength=100)
@@ -163,30 +173,31 @@ def sessions(self):
163173
sessions = WgMeetingSession.objects.filter(
164174
models.Q(sched_time_id1=self.time_id) |
165175
models.Q(sched_time_id2=self.time_id) |
166-
models.Q(sched_time_id3=self.time_id))
176+
models.Q(sched_time_id3=self.time_id) |
177+
models.Q(combined_time_id1=self.time_id) |
178+
models.Q(combined_time_id2=self.time_id))
167179
for s in sessions:
168180
if s.sched_time_id1_id == self.time_id:
169181
s.room_id = s.sched_room_id1
170182
elif s.sched_time_id2_id == self.time_id:
171183
s.room_id = s.sched_room_id2
172184
elif s.sched_time_id3_id == self.time_id:
173185
s.room_id = s.sched_room_id3
186+
elif s.combined_time_id1_id == self.time_id:
187+
s.room_id = s.combined_room_id1
188+
elif s.combined_time_id2_id == self.time_id:
189+
s.room_id = s.combined_room_id2
174190
else:
175191
s.room_id = 0
176192
return sessions
177-
def combined_sessions(self):
178-
"""
179-
Get all sessions that have a combined_time at this
180-
time.
181-
"""
182-
return WgMeetingSession.objects.filter(
183-
models.Q(combined_time_id1=self.time_id) |
184-
models.Q(combined_time_id2=self.time_id))
185193
def meeting_date(self):
186194
return self.meeting.get_meeting_date(self.day_id)
187195
def reg_info(self):
188196
reg_info = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=1)
189-
return "%s %s" % (reg_info.time_desc, reg_info.non_session_ref)
197+
if reg_info.time_desc:
198+
return "%s %s" % (reg_info.time_desc, reg_info.non_session_ref)
199+
else:
200+
return ""
190201
def morning_br_info(self):
191202
br_info = NonSession.objects.get(models.Q(day_id=self.day_id) | models.Q(day_id__isnull=True), meeting=self.meeting, non_session_ref=2)
192203
return "%s %s" % (br_info.time_desc, br_info.non_session_ref)
@@ -198,6 +209,9 @@ def an_br1_info(self):
198209
def an_br2_info(self):
199210
an_br2_info = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=5)
200211
return "%s %s" % (an_br2_info.time_desc, an_br2_info.non_session_ref)
212+
def fbreak_info(self):
213+
fbreak_info = NonSession.objects.get(meeting-self.meeting, day_id=5, non_session_ref=6)
214+
return "%s %s" % (fbreak_info.time_desc, fbreak_info.non_session_ref)
201215
class Meta:
202216
db_table = 'meeting_times'
203217
class Admin:
@@ -261,7 +275,7 @@ def agenda_file(self):
261275
try:
262276
filename = WgAgenda.objects.get(meeting=self.meeting, group_acronym_id=self.group_acronym_id,irtf=irtfvar,interim=0).filename
263277
dir = Proceeding.objects.get(meeting_num=self.meeting).dir_name
264-
retvar = "%s/%s" % (dir,filename)
278+
retvar = "%s/agenda/%s" % (dir,filename)
265279
except WgAgenda.DoesNotExist:
266280
retvar = ""
267281
return retvar

ietf/templates/meeting/agenda.html

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{% extends "base.html" %}
2-
{% block title %} Meeting Agenda {% endblock %}
2+
{% block title %} Meeting Agenda of IETF {{ meeting_num }} {% endblock %}
3+
{% block body_attributes %}background="http://www.ietf.org/meetings/peachbkg.gif"{% endblock %}
34
{% block content %}
45

56
<center>
@@ -8,7 +9,7 @@
89
Updated As of : {% now "F j, Y" %}<br />
910
</center>
1011

11-
<a href="/meeting/{{meeting_num}}/agenda.txt"> Text Format of the Agenda </a> <br />
12+
<a href="http://www3.ietf.org//meetings/agenda_{{meeting_num}}.txt"> Text Format of the Agenda </a> <br />
1213
<P>
1314
*** Click on an acronym of the group to get a charter page *** <br />
1415
*** Click on a name of the group to get a meeting agenda *** <br />
@@ -22,19 +23,23 @@
2223
<br>
2324
{% regroup object_list by day_id as days %}
2425
{% for day in days %}
25-
<b>Day: {{ day.list.1.meeting_date|date:"l, F j, Y" }} </b><br>
26-
{{ day.list.1.reg_info }} - {{ meetingvenue_info.reg_area_name }} <br>
27-
{{ day.list.1.morning_br_info }} - {{ meetingvenue_info.break_area_name }} <br>
26+
<b>{{ day.list.0.meeting_date|date:"l, F j, Y" }} </b><br>
27+
{% if day.list.0.reg_info %}{{ day.list.0.reg_info }} - {{ meetingvenue_info.reg_area_name }} <br>{% endif %}
28+
{% ifequal day.list.0.day_id "5" %}
29+
{{ day.list.0.fbreak_info }} - {{ meetingvenue_info.break_area_name }} <br>
30+
{% else %}
31+
{{ day.list.0.morning_br_info }} - {{ meetingvenue_info.break_area_name }} <br>
32+
{% endifequal %}
2833
<br>
2934
{% for item in day.list %}
3035
{% ifequal item.session_name_id 3 %}
31-
{{ day.list.1.lunch_br_info }} Break<br>
36+
{{ day.list.0.lunch_br_info }} Break<br>
3237
{% endifequal %}
3338
{% ifequal item.session_name_id 4 %}
34-
{{ day.list.1.an_br1_info }}<br>
39+
{{ day.list.0.an_br1_info }}<br>
3540
{% endifequal %}
3641
{% ifequal item.session_name_id 5 %}
37-
{{ day.list.1.an_br2_info }}<br>
42+
{{ day.list.0.an_br2_info }}<br>
3843
{% endifequal %}
3944
<b>{{ item.time_desc }} {{ item.session_name }} </b>
4045
{% ifequal item.sessions.0.acronym "plenaryw" %}
@@ -56,4 +61,21 @@
5661
{% endfor %}
5762
<br>
5863
{% endfor %}
64+
<hr>
65+
<center><b>AREA DIRECTORS</b></center><br>
66+
<table border="0" width="800">
67+
{% regroup qs_ads by area as ads %}
68+
{% for ad in ads %}
69+
<tr valign="top">
70+
<td width="65">{{ ad.grouper|upper }}</td>
71+
<td width="140">{{ ad.list.0.area.area_acronym.name }}</td>
72+
<td>
73+
{% for ad_person in ad.list %}
74+
{% ifequal forloop.counter 2 %} & {% endifequal %}
75+
{{ ad_person.person }}/{{ ad_person.person.affiliation }}
76+
{% endfor %}
77+
</td>
78+
</tr>
79+
{% endfor %}
80+
</table>
5981
{% endblock %}

ietf/templates/meeting/agenda.txt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?xml version="1.0" encoding="iso-8859-1"?>
2+
<!DOCTYPE html
3+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"
6+
xml:lang="en-US"><head><title>Agenda of the IETF {{ meeting_num }}</title>
7+
</head><body><p>
8+
<pre>
9+
{% filter center:72 %}Agenda of the IETF {{ meeting_num }} Meeting{% endfilter %}
10+
{% filter center:72 %}{{ meeting_info.start_date|date:"F j, Y" }} - {{ meeting_info.end_date|date:"F j, Y" }}{% endfilter %}
11+
12+
Updated As of : {% now "F j, Y" %}
13+
14+
{{ meeting_info.start_date|date:"l, F j, Y" }}
15+
{{ nonsession_info.0.time_desc }} {{ nonsession_info.0.non_session_ref }} - {{ meetingvenue_info.reg_area_name }}
16+
{% for item in qs_sun %}{{ item.sched_time_id1.time_desc }} {{ item.acronym_name }} - {{ item.sched_room_id1.room_name }}
17+
{% endfor %}</pre>
18+
{% regroup object_list by day_id as days %}
19+
{% for day in days %}
20+
<pre>
21+
{{ day.list.0.meeting_date|date:"l, F j, Y" }}
22+
{% if day.list.0.reg_info %}{{ day.list.0.reg_info }} - {{ meetingvenue_info.reg_area_name }}{% endif %}
23+
{% ifequal day.list.0.day_id "5" %}{{ day.list.0.fbreak_info }} - {{ meetingvenue_info.break_area_name }}{% else %}{{ day.list.0.morning_br_info }} - {{ meetingvenue_info.break_area_name }}{% endifequal %}
24+
</pre>
25+
{% for item in day.list %}
26+
{% ifequal item.session_name_id 3 %}
27+
<pre>{{ day.list.0.lunch_br_info }} Break
28+
</pre>
29+
{% endifequal %}
30+
{% ifequal item.session_name_id 4 %}
31+
<pre>{{ day.list.0.an_br1_info }}
32+
</pre>
33+
{% endifequal %}
34+
{% ifequal item.session_name_id 5 %}
35+
<pre>{{ day.list.0.an_br2_info }}
36+
</pre>
37+
{% endifequal %}
38+
<pre>{{ item.time_desc }} {{ item.session_name }}</pre>
39+
{% ifequal item.sessions.0.acronym "plenaryw" %}
40+
<pre>{{ item.sessions.0.room_id.room_name }}
41+
{{ plenaryw_agenda|escape }}
42+
</pre>
43+
{% else %}
44+
{% ifequal item.sessions.0.acronym "plenaryt" %}
45+
<pre>{{ item.sessions.0.room_id.room_name }}
46+
{{ plenaryt_agenda|escape }}
47+
</pre>
48+
{% else %}
49+
<pre>{% for session in item.sessions|dictsort:"area" %}
50+
{{ session.room_id.room_name|ljust:20 }} {{ session.area|upper|ljust:5 }} {{ session.acronym|lower|ljust:10 }} {{ session.acronym_name }}{% if session.special_agenda_note %} - {{ session.special_agenda_note|upper }}{% endif %}{% endfor %}</pre>
51+
{% endifequal %}
52+
{% endifequal %}
53+
{% endfor %}
54+
{% endfor %}
55+
<pre>====================================================================
56+
AREA DIRECTORS
57+
{% regroup qs_ads by area as ads %}{% for ad in ads %}
58+
{{ ad.grouper|upper|ljust:5 }}{{ ad.list.0.area.area_acronym.name|ljust:18 }} {% for ad_person in ad.list %}{% ifequal forloop.counter 2 %} & {% endifequal %}{{ ad_person.person }}/{{ ad_person.person.affiliation }}{% endfor %}{% endfor %}
59+
</pre>
60+
</body>
61+
</html>

0 commit comments

Comments
 (0)