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:
parent
27460c988b
commit
1c9bf9b1ca
|
@ -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']
|
||||
|
|
|
@ -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),
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 %}
|
||||
|
|
61
ietf/templates/meeting/agenda.txt
Normal file
61
ietf/templates/meeting/agenda.txt
Normal 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>
|
Loading…
Reference in a new issue