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
This commit is contained in:
Michael Lee 2007-05-30 13:47:09 +00:00
parent 27460c988b
commit 1c9bf9b1ca
6 changed files with 163 additions and 32 deletions

View file

@ -216,6 +216,15 @@ class PersonOrOrgInfo(models.Model):
except EmailAddress.DoesNotExist:
email = ''
return (name, email)
# Added by Sunny Lee to display person's affiliation - 5/26/2007
def affiliation(self, priority=1, type='INET'):
try:
postal = self.postaladdress_set.get(address_priority=1)
except PostalAddress.DoesNotExist:
return "PersonOrOrgInfo with no name, no postal address!"
except AssertionError:
return "PersonOrOrgInfo with multiple priority-1 addresses!"
return "%s" % ( postal.affiliated_company or postal.department or "???" )
class Meta:
db_table = 'person_or_org_info'
ordering = ['last_name']

View file

@ -5,7 +5,7 @@ urlpatterns = patterns('',
(r'^$', views.showlist),
(r'^(?P<meeting_num>\d+)/$', views.show),
(r'^(?P<meeting_num>\d+)/agenda.html$', views.show_html_agenda),
(r'^(?P<meeting_num>\d+)/agenda.(?P<html_or_txt>\S+)$', views.show_html_agenda),
(r'^(?P<meeting_num>\d+)/materials.html$', views.show_html_materials),

View file

@ -4,8 +4,9 @@ from django.shortcuts import render_to_response as render
import django.newforms as forms
from django.utils.html import escape, linebreaks
import ietf.utils
from ietf.proceedings.models import Meeting, MeetingTime, WgMeetingSession, SessionName, NonSession, MeetingVenue
from ietf.proceedings.models import Meeting, MeetingTime, WgMeetingSession, SessionName, NonSession, MeetingVenue, IESGHistory
from django.views.generic.list_detail import object_list
from django.http import Http404
def default(request):
"""Default page, with links to sub-pages"""
@ -31,15 +32,37 @@ def meeting_list(request, template):
def show_html_materials(request, meeting_num=None):
return render("meeting/list.html",{})
def show_html_agenda(request, meeting_num=None):
meeting_info=Meeting.objects.filter(meeting_num=meeting_num)[0]
nonsession_info=NonSession.objects.filter(meeting=meeting_num,day_id__gte='0').order_by("day_id")
meetingvenue_info=MeetingVenue.objects.filter(meeting_num=meeting_num)[0]
def show_html_agenda(request, meeting_num=None, html_or_txt=None):
try:
queryset_list=MeetingTime.objects.filter(meeting=meeting_num).exclude(day_id=0).order_by("day_id","time_desc")
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
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
#queryset_list=WgMeetingSession.objects.filter(meeting_num=meeting_num, group_acronym_id > -3)
except MeetingTime.DoesNotExist:
raise Http404
meeting_info=Meeting.objects.get(meeting_num=meeting_num)
nonsession_info=NonSession.objects.filter(meeting=meeting_num,day_id__gte='0').order_by("day_id")
try:
meetingvenue_info=MeetingVenue.objects.get(meeting_num=meeting_num)
except MeetingVenue.DoesNotExist:
raise Http404
plenaryt_agenda_file = "/home/master-site/proceedings/%s" % WgMeetingSession.objects.get(meeting=meeting_num,group_acronym_id=-2).agenda_file()
try:
f = open(plenaryt_agenda_file)
plenaryt_agenda = f.read()
f.close()
except IOError:
plenaryt_agenda = "THE AGENDA HAS NOT BEEN UPLOADED YET"
if html_or_txt == "html":
template_file="meeting/agenda.html"
elif html_or_txt == "txt":
template_file="meeting/agenda.txt"
else:
raise Http404
plenaryw_agenda_file = "/home/master-site/proceedings/%s" % WgMeetingSession.objects.get(meeting=meeting_num,group_acronym_id=-1).agenda_file()
try:
f = open(plenaryw_agenda_file)
plenaryw_agenda = f.read()
f.close()
except IOError:
plenaryw_agenda = "THE AGENDA HAS NOT BEEN UPLOADED YET"
# Due to a bug in Django@0.96 we can't use foreign key lookup in
# order_by(), see http://code.djangoproject.com/ticket/2076. Changeset
# [133] is broken because it requires a patched Django to run. Work
@ -48,7 +71,9 @@ def show_html_agenda(request, meeting_num=None):
## queryset_list_sun=WgMeetingSession.objects.filter(meeting=meeting_num, sched_time_id1__day_id=0).order_by('sched_time_id1__time_desc')
queryset_list_sun=list(WgMeetingSession.objects.filter(meeting=meeting_num, sched_time_id1__day_id=0))
queryset_list_sun.sort(key=(lambda item: item.sched_time_id1.time_desc))
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})
queryset_list_ads = list(IESGHistory.objects.filter(meeting=meeting_num))
queryset_list_ads.sort(key=(lambda item: item.area.area_acronym.acronym))
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})
def show(request):
return 0

View file

@ -1,5 +1,5 @@
from django.db import models
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, IETFWG
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, Area, IETFWG
import datetime
from ietf.utils import log
@ -147,6 +147,16 @@ class SessionName(models.Model):
db_table = 'session_names'
class Admin:
pass
class IESGHistory(models.Model):
meeting = models.ForeignKey(Meeting, db_column='meeting_num', primary_key=True, core=True)
area = models.ForeignKey(Area, db_column='area_acronym_id', primary_key=True, core=True)
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, core=True)
def __str__(self):
return "%s (%s)" % (self.person,self.area)
class Meta:
db_table = 'iesg_history'
class Admin:
pass
class MeetingTime(models.Model):
time_id = models.AutoField(primary_key=True)
@ -163,7 +173,9 @@ class MeetingTime(models.Model):
sessions = WgMeetingSession.objects.filter(
models.Q(sched_time_id1=self.time_id) |
models.Q(sched_time_id2=self.time_id) |
models.Q(sched_time_id3=self.time_id))
models.Q(sched_time_id3=self.time_id) |
models.Q(combined_time_id1=self.time_id) |
models.Q(combined_time_id2=self.time_id))
for s in sessions:
if s.sched_time_id1_id == self.time_id:
s.room_id = s.sched_room_id1
@ -171,22 +183,21 @@ class MeetingTime(models.Model):
s.room_id = s.sched_room_id2
elif s.sched_time_id3_id == self.time_id:
s.room_id = s.sched_room_id3
elif s.combined_time_id1_id == self.time_id:
s.room_id = s.combined_room_id1
elif s.combined_time_id2_id == self.time_id:
s.room_id = s.combined_room_id2
else:
s.room_id = 0
return sessions
def combined_sessions(self):
"""
Get all sessions that have a combined_time at this
time.
"""
return WgMeetingSession.objects.filter(
models.Q(combined_time_id1=self.time_id) |
models.Q(combined_time_id2=self.time_id))
def meeting_date(self):
return self.meeting.get_meeting_date(self.day_id)
def reg_info(self):
reg_info = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=1)
if reg_info.time_desc:
return "%s %s" % (reg_info.time_desc, reg_info.non_session_ref)
else:
return ""
def morning_br_info(self):
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)
return "%s %s" % (br_info.time_desc, br_info.non_session_ref)
@ -198,6 +209,9 @@ class MeetingTime(models.Model):
def an_br2_info(self):
an_br2_info = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=5)
return "%s %s" % (an_br2_info.time_desc, an_br2_info.non_session_ref)
def fbreak_info(self):
fbreak_info = NonSession.objects.get(meeting-self.meeting, day_id=5, non_session_ref=6)
return "%s %s" % (fbreak_info.time_desc, fbreak_info.non_session_ref)
class Meta:
db_table = 'meeting_times'
class Admin:
@ -261,7 +275,7 @@ class WgMeetingSession(models.Model, ResolveAcronym):
try:
filename = WgAgenda.objects.get(meeting=self.meeting, group_acronym_id=self.group_acronym_id,irtf=irtfvar,interim=0).filename
dir = Proceeding.objects.get(meeting_num=self.meeting).dir_name
retvar = "%s/%s" % (dir,filename)
retvar = "%s/agenda/%s" % (dir,filename)
except WgAgenda.DoesNotExist:
retvar = ""
return retvar

View file

@ -1,5 +1,6 @@
{% extends "base.html" %}
{% block title %} Meeting Agenda {% endblock %}
{% block title %} Meeting Agenda of IETF {{ meeting_num }} {% endblock %}
{% block body_attributes %}background="http://www.ietf.org/meetings/peachbkg.gif"{% endblock %}
{% block content %}
<center>
@ -8,7 +9,7 @@
Updated As of : {% now "F j, Y" %}<br />
</center>
<a href="/meeting/{{meeting_num}}/agenda.txt"> Text Format of the Agenda </a> <br />
<a href="http://www3.ietf.org//meetings/agenda_{{meeting_num}}.txt"> Text Format of the 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 *** <br />
@ -22,19 +23,23 @@ Updated As of : {% now "F j, Y" %}<br />
<br>
{% regroup object_list by day_id as days %}
{% for day in days %}
<b>Day: {{ day.list.1.meeting_date|date:"l, F j, Y" }} </b><br>
{{ day.list.1.reg_info }} - {{ meetingvenue_info.reg_area_name }} <br>
{{ day.list.1.morning_br_info }} - {{ meetingvenue_info.break_area_name }} <br>
<b>{{ day.list.0.meeting_date|date:"l, F j, Y" }} </b><br>
{% if day.list.0.reg_info %}{{ day.list.0.reg_info }} - {{ meetingvenue_info.reg_area_name }} <br>{% endif %}
{% ifequal day.list.0.day_id "5" %}
{{ day.list.0.fbreak_info }} - {{ meetingvenue_info.break_area_name }} <br>
{% else %}
{{ day.list.0.morning_br_info }} - {{ meetingvenue_info.break_area_name }} <br>
{% endifequal %}
<br>
{% for item in day.list %}
{% ifequal item.session_name_id 3 %}
{{ day.list.1.lunch_br_info }} Break<br>
{{ day.list.0.lunch_br_info }} Break<br>
{% endifequal %}
{% ifequal item.session_name_id 4 %}
{{ day.list.1.an_br1_info }}<br>
{{ day.list.0.an_br1_info }}<br>
{% endifequal %}
{% ifequal item.session_name_id 5 %}
{{ day.list.1.an_br2_info }}<br>
{{ day.list.0.an_br2_info }}<br>
{% endifequal %}
<b>{{ item.time_desc }} {{ item.session_name }} </b>
{% ifequal item.sessions.0.acronym "plenaryw" %}
@ -56,4 +61,21 @@ Updated As of : {% now "F j, Y" %}<br />
{% endfor %}
<br>
{% endfor %}
<hr>
<center><b>AREA DIRECTORS</b></center><br>
<table border="0" width="800">
{% regroup qs_ads by area as ads %}
{% for ad in ads %}
<tr valign="top">
<td width="65">{{ ad.grouper|upper }}</td>
<td width="140">{{ ad.list.0.area.area_acronym.name }}</td>
<td>
{% for ad_person in ad.list %}
{% ifequal forloop.counter 2 %} & {% endifequal %}
{{ ad_person.person }}/{{ ad_person.person.affiliation }}
{% endfor %}
</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!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" lang="en-US"
xml:lang="en-US"><head><title>Agenda of the IETF {{ meeting_num }}</title>
</head><body><p>
<pre>
{% filter center:72 %}Agenda of the IETF {{ meeting_num }} Meeting{% endfilter %}
{% filter center:72 %}{{ meeting_info.start_date|date:"F j, Y" }} - {{ meeting_info.end_date|date:"F j, Y" }}{% endfilter %}
Updated As of : {% now "F j, Y" %}
{{ meeting_info.start_date|date:"l, F j, Y" }}
{{ nonsession_info.0.time_desc }} {{ nonsession_info.0.non_session_ref }} - {{ meetingvenue_info.reg_area_name }}
{% for item in qs_sun %}{{ item.sched_time_id1.time_desc }} {{ item.acronym_name }} - {{ item.sched_room_id1.room_name }}
{% endfor %}</pre>
{% regroup object_list by day_id as days %}
{% for day in days %}
<pre>
{{ day.list.0.meeting_date|date:"l, F j, Y" }}
{% if day.list.0.reg_info %}{{ day.list.0.reg_info }} - {{ meetingvenue_info.reg_area_name }}{% endif %}
{% 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 %}
</pre>
{% for item in day.list %}
{% ifequal item.session_name_id 3 %}
<pre>{{ day.list.0.lunch_br_info }} Break
</pre>
{% endifequal %}
{% ifequal item.session_name_id 4 %}
<pre>{{ day.list.0.an_br1_info }}
</pre>
{% endifequal %}
{% ifequal item.session_name_id 5 %}
<pre>{{ day.list.0.an_br2_info }}
</pre>
{% endifequal %}
<pre>{{ item.time_desc }} {{ item.session_name }}</pre>
{% ifequal item.sessions.0.acronym "plenaryw" %}
<pre>{{ item.sessions.0.room_id.room_name }}
{{ plenaryw_agenda|escape }}
</pre>
{% else %}
{% ifequal item.sessions.0.acronym "plenaryt" %}
<pre>{{ item.sessions.0.room_id.room_name }}
{{ plenaryt_agenda|escape }}
</pre>
{% else %}
<pre>{% for session in item.sessions|dictsort:"area" %}
{{ 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>
{% endifequal %}
{% endifequal %}
{% endfor %}
{% endfor %}
<pre>====================================================================
AREA DIRECTORS
{% regroup qs_ads by area as ads %}{% for ad in ads %}
{{ 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 %}
</pre>
</body>
</html>