Merged in changes from Pasi.
- Legacy-Id: 1550
This commit is contained in:
parent
49bd3daab4
commit
b82697ed83
10
changelog
10
changelog
|
@ -1,3 +1,13 @@
|
|||
ietfdb (2.28)
|
||||
|
||||
* Show full name in document comment log. From Pasi.
|
||||
|
||||
* Optimize meeting agenda page to use less SQL queries. From Pasi.
|
||||
|
||||
* Include version in iesg/agenda/documents.txt. From Pasi.
|
||||
|
||||
-- Henrik Levkowetz <henrik@levkowetz.com> 25 Jul 2009 14:38:41 +0200
|
||||
|
||||
ietfdb (2.27)
|
||||
|
||||
* Add support for an iPhone specific agenda format. Going to the html
|
||||
|
|
|
@ -148,7 +148,7 @@ def document_comments(request, name):
|
|||
info['by'] = m.group(2)
|
||||
else:
|
||||
info['text'] = comment.comment_text
|
||||
info['by'] = comment.get_username()
|
||||
info['by'] = comment.get_fullname()
|
||||
info['textSnippet'] = truncatewords_html(format_textarea(fill(info['text'], 80)), 25)
|
||||
info['snipped'] = info['textSnippet'][-3:] == "..."
|
||||
info['commentNumber'] = commentNumber
|
||||
|
|
|
@ -58,13 +58,13 @@ def get_plenary_agenda(meeting_num, id):
|
|||
def agenda_info(num=None):
|
||||
if not num:
|
||||
num = list(Meeting.objects.all())[-1].meeting_num
|
||||
timeslots = MeetingTime.objects.filter(meeting=num).order_by("day_id", "time_desc")
|
||||
timeslots = MeetingTime.objects.select_related().filter(meeting=num).order_by("day_id", "time_desc")
|
||||
update = get_object_or_404(Switches,id=1)
|
||||
meeting=get_object_or_404(Meeting, meeting_num=num)
|
||||
venue = get_object_or_404(MeetingVenue, meeting_num=num)
|
||||
ads = list(IESGHistory.objects.filter(meeting=num))
|
||||
ads = list(IESGHistory.objects.select_related().filter(meeting=num))
|
||||
if not ads:
|
||||
ads = list(IESGHistory.objects.filter(meeting=str(int(num)-1)))
|
||||
ads = list(IESGHistory.objects.select_related().filter(meeting=str(int(num)-1)))
|
||||
ads.sort(key=(lambda item: item.area.area_acronym.acronym))
|
||||
plenaryw_agenda = get_plenary_agenda(num, -1)
|
||||
plenaryt_agenda = get_plenary_agenda(num, -2)
|
||||
|
@ -92,4 +92,4 @@ def text_agenda(request, num=None):
|
|||
{"timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads,
|
||||
"plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda, },
|
||||
RequestContext(request)), mimetype="text/plain")
|
||||
|
||||
|
||||
|
|
|
@ -13,32 +13,40 @@ import datetime
|
|||
# an interim attribute first)
|
||||
class ResolveAcronym(object):
|
||||
def acronym(self):
|
||||
if hasattr(self, '_acronym_acronym'):
|
||||
return self._acronym_acronym
|
||||
try:
|
||||
interim = self.interim
|
||||
except AttributeError:
|
||||
interim = False
|
||||
if self.irtf:
|
||||
acronym = IRTF.objects.get(pk=self.group_acronym_id).acronym
|
||||
o = IRTF.objects.get(pk=self.group_acronym_id)
|
||||
else:
|
||||
acronym = Acronym.objects.get(pk=self.group_acronym_id).acronym
|
||||
o = Acronym.objects.get(pk=self.group_acronym_id)
|
||||
self._acronym_acronym = o.acronym
|
||||
self._acronym_name = o.name
|
||||
acronym = self._acronym_acronym
|
||||
if interim:
|
||||
return "i" + acronym
|
||||
return acronym
|
||||
else:
|
||||
return acronym
|
||||
def acronym_lower(self):
|
||||
return self.acronym().lower()
|
||||
def acronym_name(self):
|
||||
if not hasattr(self, '_acronym_name'):
|
||||
self.acronym()
|
||||
try:
|
||||
interim = self.interim
|
||||
except AttributeError:
|
||||
interim = False
|
||||
if self.irtf:
|
||||
acronym_name = IRTF.objects.get(pk=self.group_acronym_id).name
|
||||
else:
|
||||
acronym_name = Acronym.objects.get(pk=self.group_acronym_id).name
|
||||
acronym_name = self._acronym_name
|
||||
if interim:
|
||||
return acronym_name + " (interim)"
|
||||
return acronym_name
|
||||
else:
|
||||
return acronym_name
|
||||
def area(self):
|
||||
if hasattr(self, '_area'):
|
||||
return self._area
|
||||
if self.irtf:
|
||||
area = "irtf"
|
||||
elif self.group_acronym_id < 0 and self.group_acronym_id > -3:
|
||||
|
@ -47,9 +55,10 @@ class ResolveAcronym(object):
|
|||
area = ""
|
||||
else:
|
||||
try:
|
||||
area = AreaGroup.objects.get(group=self.group_acronym_id).area.area_acronym.acronym
|
||||
area = AreaGroup.objects.select_related().get(group=self.group_acronym_id).area.area_acronym.acronym
|
||||
except AreaGroup.DoesNotExist:
|
||||
area = ""
|
||||
self._area = area
|
||||
return area
|
||||
def area_name(self):
|
||||
if self.irtf:
|
||||
|
@ -67,28 +76,27 @@ class ResolveAcronym(object):
|
|||
def isWG(self):
|
||||
if self.irtf:
|
||||
return False
|
||||
else:
|
||||
if not hasattr(self,'_ietfwg'):
|
||||
try:
|
||||
g_type_id = IETFWG.objects.get(pk=self.group_acronym_id).group_type_id == 1
|
||||
if g_type_id == 1:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
self._ietfwg = IETFWG.objects.get(pk=self.group_acronym_id)
|
||||
except IETFWG.DoesNotExist:
|
||||
return False
|
||||
self._ietfwg = None
|
||||
if self._ietfwg and self._ietfwg.group_type_id == 1:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
def group_type_str(self):
|
||||
if self.irtf:
|
||||
return ""
|
||||
return ""
|
||||
else:
|
||||
try:
|
||||
g_type_id = IETFWG.objects.get(pk=self.group_acronym_id).group_type_id
|
||||
if g_type_id == 1:
|
||||
return "WG"
|
||||
elif g_type_id == 3:
|
||||
return "BOF"
|
||||
else:
|
||||
return ""
|
||||
except IETFWG.DoesNotExist:
|
||||
self.isWG()
|
||||
if not self._ietfwg:
|
||||
return ""
|
||||
elif self._ietfwg.group_type_id == 1:
|
||||
return "WG"
|
||||
elif self._ietfwg.group_type_id == 3:
|
||||
return "BOF"
|
||||
else:
|
||||
return ""
|
||||
|
||||
TIME_ZONE_CHOICES = (
|
||||
|
@ -234,7 +242,7 @@ class MeetingTime(models.Model):
|
|||
time_desc = models.CharField(maxlength=100)
|
||||
meeting = models.ForeignKey(Meeting, db_column='meeting_num', unique=True)
|
||||
day_id = models.IntegerField()
|
||||
session_name = models.ForeignKey(SessionName)
|
||||
session_name = models.ForeignKey(SessionName,null=True)
|
||||
def __str__(self):
|
||||
return "[%d] |%s| %s" % (self.meeting_id, (self.meeting.start_date + datetime.timedelta(self.day_id)).strftime('%A'), self.time_desc)
|
||||
def sessions(self):
|
||||
|
@ -266,8 +274,11 @@ class MeetingTime(models.Model):
|
|||
def meeting_date(self):
|
||||
return self.meeting.get_meeting_date(self.day_id)
|
||||
def registration(self):
|
||||
if hasattr(self, '_reg_info'):
|
||||
return self._reg_info
|
||||
reg = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=1)
|
||||
reg.name = reg.non_session_ref.name
|
||||
self._reg_info = reg
|
||||
return reg
|
||||
def reg_info(self):
|
||||
reg_info = self.registration()
|
||||
|
@ -341,6 +352,8 @@ class WgMeetingSession(models.Model, ResolveAcronym):
|
|||
def __str__(self):
|
||||
return "%s at %s" % (self.acronym(), self.meeting)
|
||||
def agenda_file(self,interimvar=0):
|
||||
if hasattr(self, '_agenda_file'):
|
||||
return self._agenda_file
|
||||
irtfvar = 0
|
||||
if self.irtf:
|
||||
irtfvar = self.group_acronym_id
|
||||
|
@ -352,10 +365,15 @@ class WgMeetingSession(models.Model, ResolveAcronym):
|
|||
interimvar = 0
|
||||
try:
|
||||
filename = WgAgenda.objects.get(meeting=self.meeting, group_acronym_id=self.group_acronym_id,irtf=irtfvar,interim=interimvar).filename
|
||||
dir = Proceeding.objects.get(meeting_num=self.meeting).dir_name
|
||||
if self.meeting_id in WgMeetingSession._dirs:
|
||||
dir = WgMeetingSession._dirs[self.meeting_id]
|
||||
else:
|
||||
dir = Proceeding.objects.get(meeting_num=self.meeting).dir_name
|
||||
WgMeetingSession._dirs[self.meeting_id]=dir
|
||||
retvar = "%s/agenda/%s" % (dir,filename)
|
||||
except WgAgenda.DoesNotExist:
|
||||
retvar = ""
|
||||
self._agenda_file = retvar
|
||||
return retvar
|
||||
def minute_file(self,interimvar=0):
|
||||
irtfvar = 0
|
||||
|
@ -402,6 +420,7 @@ class WgMeetingSession(models.Model, ResolveAcronym):
|
|||
db_table = 'wg_meeting_sessions'
|
||||
class Admin:
|
||||
pass
|
||||
_dirs = {}
|
||||
|
||||
class WgAgenda(models.Model, ResolveAcronym):
|
||||
meeting = models.ForeignKey(Meeting, db_column='meeting_num')
|
||||
|
|
|
@ -41,7 +41,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
{% else %}<a href="/doc/{{doc.id.draft_name}}/">{{doc.id.draft_name_and_revision}}</a>{% endif %}</td>
|
||||
<td class="title">{{ doc.title|escape }}</td>
|
||||
<td class="date">{{ doc.publication_date }}
|
||||
{% if doc.publication_date|timesince_days|less_than:"14" %}<br/><span style="padding:0 2px;background:yellow;font-size:85%;">new</span>{%endif%}
|
||||
{% if doc.publication_date|timesince_days|less_than:"14" %}<br/><span style="padding:0 2px;background:yellow;font-size:85%;">{% if not doc.rfc%}<a href="http://tools.ietf.org/rfcdiff?url2={{doc.id.draft_name_and_revision}}">new</a>{%else%}new{%endif%}</span>{%endif%}
|
||||
{% if doc.id and doc.id.expected_expiration_date and doc.id.expected_expiration_date|timesince_days|greater_than:"-14" %}<br/><span style="padding:0 2px;font-size:85%;background:yellow;">expires soon</span>{%endif%}
|
||||
</td>
|
||||
|
||||
|
|
|
@ -30,5 +30,5 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
{% endcomment %}# Fields: telechat date, filename (draft-foo-bar or rfc1234), intended status, rfc editor submission flag (0=no, 1=yes), area acronym, AD name{% for doc in docs %}
|
||||
{{ doc.telechat_date }} {{ doc.document.filename }} {{ doc.document.intended_status }} {{doc.via_rfc_editor}} {{doc.area_acronym|lower}} {{doc.token_name }}{% endfor %}
|
||||
{% endcomment %}# Fields: telechat date, filename (draft-foo-bar or rfc1234), intended status, rfc editor submission flag (0=no, 1=yes), area acronym, AD name, version{% for doc in docs %}
|
||||
{{ doc.telechat_date }} {{ doc.document.filename }} {{ doc.document.intended_status }} {{doc.via_rfc_editor}} {{doc.area_acronym|lower}} {{doc.token_name }} {{doc.document.revision}}{% endfor %}
|
Loading…
Reference in a new issue