diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py
index 725e3dfc5..03a0fc121 100644
--- a/ietf/doc/views_doc.py
+++ b/ietf/doc/views_doc.py
@@ -307,6 +307,8 @@ def document_main(request, name, rev=None):
status_changes = [ rel.document for rel in status_change_docs if rel.document.get_state_slug() in ('appr-sent','appr-pend')]
proposed_status_changes = [ rel.document for rel in status_change_docs if rel.document.get_state_slug() in ('needshep','adrev','iesgeval','defer','appr-pr')]
+ presentations = doc.future_presentations()
+
# remaining actions
actions = []
@@ -417,6 +419,7 @@ def document_main(request, name, rev=None):
search_archive=search_archive,
actions=actions,
tracking_document=tracking_document,
+ presentations=presentations,
),
context_instance=RequestContext(request))
@@ -526,13 +529,8 @@ def document_main(request, name, rev=None):
# created and content is made available on disk
if doc.type_id in ("slides", "agenda", "minutes"):
can_manage_material = can_manage_materials(request.user, doc.group)
- presentations = None
- if doc.type_id=='slides' and doc.get_state_slug('slides')=='active' :
- presentations = doc.future_presentations()
+ presentations = doc.future_presentations()
if doc.meeting_related():
- # disallow editing meeting-related stuff through this
- # interface for the time being
- can_manage_material = False
basename = doc.canonical_name() # meeting materials are unversioned at the moment
if doc.external_url:
# we need to remove the extension for the globbing below to work
diff --git a/ietf/doc/views_material.py b/ietf/doc/views_material.py
index 390d31d2f..2d6327ba3 100644
--- a/ietf/doc/views_material.py
+++ b/ietf/doc/views_material.py
@@ -250,11 +250,10 @@ def get_upcoming_manageable_sessions(user, doc, acronym=None, date=None, seq=Non
def edit_material_presentations(request, name, acronym=None, date=None, seq=None, week_day=None):
doc = get_object_or_404(Document, name=name)
- if not (doc.type_id=='slides' and doc.get_state('slides').slug=='active'):
- raise Http404
group = doc.group
- if not (group.features.has_materials and can_manage_materials(request.user,group)):
+
+ if not can_manage_materials(request.user,group):
raise Http404
sorted_sessions = get_upcoming_manageable_sessions(request.user, doc, acronym, date, seq, week_day)
@@ -301,11 +300,11 @@ def edit_material_presentations(request, name, acronym=None, date=None, seq=None
def material_presentations(request, name, acronym=None, date=None, seq=None, week_day=None):
doc = get_object_or_404(Document, name=name)
- if not (doc.type_id=='slides' and doc.get_state('slides').slug=='active'):
- raise Http404
+
group = doc.group
- if not (group.features.has_materials and can_manage_materials(request.user,group)):
+
+ if not can_manage_materials(request.user,group):
raise Http404
sorted_sessions = get_upcoming_manageable_sessions(request.user, doc, acronym, date, seq, week_day)
diff --git a/ietf/group/info.py b/ietf/group/info.py
index 0ae939afd..6bfc97e89 100644
--- a/ietf/group/info.py
+++ b/ietf/group/info.py
@@ -59,6 +59,7 @@ from ietf.group.utils import can_manage_materials, get_group_or_404
from ietf.utils.pipe import pipe
from ietf.settings import MAILING_LIST_INFO_URL
from ietf.mailtrigger.utils import gather_relevant_expansions
+from ietf.ietfauth.utils import has_role
def roles(group, role_name):
return Role.objects.filter(group=group, name=role_name).select_related("email", "person")
@@ -732,7 +733,9 @@ def meetings(request, acronym=None, group_type=None):
four_years_ago = datetime.datetime.now()-datetime.timedelta(days=4*365)
- sessions = group.session_set.filter(status__in=['sched','schedw','appr','canceled'],meeting__date__gt=four_years_ago)
+ sessions = group.session_set.filter(status__in=['sched','schedw','appr','canceled'],
+ meeting__date__gt=four_years_ago,
+ type__in=['session','plenary','other'])
def sort_key(session):
if session.meeting.type.slug=='ietf':
@@ -764,10 +767,13 @@ def meetings(request, acronym=None, group_type=None):
else:
past.append(s)
+ can_edit = has_role(request.user,["Secretariat","Area Director"]) or group.has_role(request.user,["Chair","Secretary"])
+
return render(request,'group/meetings.html',
construct_group_menu_context(request, group, "meetings", group_type, {
'group':group,
'future':future,
'in_progress':in_progress,
'past':past,
+ 'can_edit':can_edit,
}))
diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py
index 88ea9e4d3..fc52ef4e0 100644
--- a/ietf/meeting/models.py
+++ b/ietf/meeting/models.py
@@ -948,6 +948,9 @@ class Session(models.Model):
def slides(self):
return list(self.get_material("slides", only_one=False))
+ def drafts(self):
+ return list(self.materials.filter(type='draft'))
+
def __unicode__(self):
if self.meeting.type_id == "interim":
return self.meeting.number
diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py
index a89903390..7f8296667 100644
--- a/ietf/meeting/views.py
+++ b/ietf/meeting/views.py
@@ -6,7 +6,7 @@ import re
import tarfile
import urllib
from tempfile import mkstemp
-from collections import OrderedDict
+from collections import OrderedDict, Counter
import csv
import json
@@ -25,6 +25,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
from ietf.doc.models import Document, State
from ietf.group.models import Group
+from ietf.group.utils import can_manage_materials
from ietf.ietfauth.utils import role_required, has_role
from ietf.meeting.models import Meeting, Session, Schedule, Room
from ietf.meeting.helpers import get_areas, get_person_by_email, get_schedule_by_name
@@ -830,7 +831,7 @@ def session_details(request, num, acronym ):
sessions = Session.objects.filter(meeting=meeting,group__acronym=acronym,type__in=['session','plenary','other'])
if not sessions:
- sessions = Session.objects.filter(meeting=meeting,short=acronym)
+ sessions = Session.objects.filter(meeting=meeting,short=acronym,type__in=['session','plenary','other'])
def sort_key(session):
official_sessions = session.timeslotassignments.filter(schedule=session.meeting.agenda)
@@ -844,21 +845,32 @@ def session_details(request, num, acronym ):
if not sessions:
raise Http404
+ type_counter = Counter()
+
for session in sessions:
ss = session.timeslotassignments.filter(schedule=meeting.agenda).order_by('timeslot__time')
if ss:
session.time = ', '.join(x.timeslot.time.strftime("%A %b-%d-%Y %H%M") for x in ss)
+ if session.status.slug == 'canceled':
+ session.time += " CANCELLED"
elif session.meeting.type_id=='interim':
session.time = session.meeting.date.strftime("%A %b-%d-%Y")
+ if session.status.slug == 'canceled':
+ session.time += " CANCELLED"
else:
- session.time = 'Not yet scheduled'
+ session.time = session.status.name
# TODO FIXME Deleted materials shouldn't be in the sessionpresentation_set
session.filtered_sessionpresentation_set = [p for p in session.sessionpresentation_set.all() if p.document.get_state_slug(p.document.type_id)!='deleted']
+ type_counter.update([p.document.type.slug for p in session.filtered_sessionpresentation_set])
+
+ can_manage = can_manage_materials(request.user, Group.objects.get(acronym=acronym))
return render(request, "meeting/session_details.html",
{ 'sessions':sessions ,
'meeting' :meeting ,
'acronym' :acronym,
+ 'can_manage_materials' : can_manage,
+ 'type_counter': type_counter,
})
diff --git a/ietf/templates/doc/document_draft.html b/ietf/templates/doc/document_draft.html
index 81264ad44..40a1a4918 100644
--- a/ietf/templates/doc/document_draft.html
+++ b/ietf/templates/doc/document_draft.html
@@ -244,6 +244,26 @@
{% endif %}
+ {% if presentations or can_edit_stream_info %}
+
+ |
+ On Agenda |
+
+ {% if not snapshot and can_edit_stream_info %}
+ {% doc_edit_button "material_presentations" name=doc.name %}
+ {% endif %}
+ |
+
+
+ {% if presentations %}
+ {% for pres in presentations %}{{ pres.session.short_name }} at {{ pres.session.meeting }} {% if pres.rev != doc.rev %}(version -{{ pres.rev }}){% endif %}{% if not forloop.last %}, {% endif %}{% endfor %}
+ {% else %}
+ None
+ {% endif %}
+ |
+
+ {% endif %}
+
|
Document shepherd |
diff --git a/ietf/templates/doc/document_material.html b/ietf/templates/doc/document_material.html
index 1b67eb22c..b1f733409 100644
--- a/ietf/templates/doc/document_material.html
+++ b/ietf/templates/doc/document_material.html
@@ -32,9 +32,9 @@
- {% if doc.meeting_related %}Meeting{% endif %} {{ doc.type.name }} |
- |
-
+ | {% if doc.meeting_related %}Meeting{% endif %} {{ doc.type.name }} |
+ |
+
{{ doc.group.name }}
({{ doc.group.acronym }}) {{ doc.group.type.name }}
diff --git a/ietf/templates/group/meetings-row.html b/ietf/templates/group/meetings-row.html
index dff8cee5f..59900d8ed 100644
--- a/ietf/templates/group/meetings-row.html
+++ b/ietf/templates/group/meetings-row.html
@@ -13,15 +13,22 @@
|
{% ifchanged s.meeting %}{% if s.meeting.type.slug == 'ietf' %}IETF{% endif %}{{s.meeting.number}}{% endifchanged %} |
+ {% if s.name %}{{ s.name }} {% endif %}
{% if s.status.slug == "sched" %}
{% if s.meeting.type.slug == 'ietf' %}{{s.time|date:"D M d, Y Hi"}}{% else %}{{s.time|date:"D M d, Y"}}{% endif %}
{% else %}
{{s.status}}
{% endif %}
+ {% if show_request and s.meeting.type.slug == 'ietf' %}
+ {% if can_edit %}
+
+ Edit Session Request
+ {% endif %}
+ {% endif %}
|
- {% if s.minutes %}Minutes{% endif %} |
- {% if s.agenda %}Agenda{% endif %} |
- Materials |
+ {% if s.agenda %}Agenda{% endif %} |
+ {% if s.minutes %}Minutes{% endif %} |
+ Materials |
{% endfor %}
diff --git a/ietf/templates/group/meetings.html b/ietf/templates/group/meetings.html
index 48f1bc641..68bedf9d3 100644
--- a/ietf/templates/group/meetings.html
+++ b/ietf/templates/group/meetings.html
@@ -6,13 +6,21 @@
{% block group_content %}
{% origin %}
+
+
+
{% if in_progress %}
Meetings in progress
- {% with in_progress as sessions %}
+ {% with sessions=in_progress show_request=True %}
{% include "group/meetings-row.html" %}
{% endwith %}
@@ -25,7 +33,7 @@
Future Meetings
- {% with future as sessions %}
+ {% with sessions=future show_request=True %}
{% include "group/meetings-row.html" %}
{% endwith %}
diff --git a/ietf/templates/meeting/group_materials.html b/ietf/templates/meeting/group_materials.html
index b1694b304..f8c0e14d1 100644
--- a/ietf/templates/meeting/group_materials.html
+++ b/ietf/templates/meeting/group_materials.html
@@ -48,6 +48,15 @@
{% endfor %}
{% endwith %}
+
+ {% with session.drafts as drafts %}
+ {% for draft in drafts %}
+ {{ draft.canonical_name }}
+ {% empty %}
+ No drafts
+ {% endfor %}
+ {% endwith %}
+ |
{% endif %}
diff --git a/ietf/templates/meeting/materials.html b/ietf/templates/meeting/materials.html
index 50956940e..6aee1a313 100644
--- a/ietf/templates/meeting/materials.html
+++ b/ietf/templates/meeting/materials.html
@@ -42,10 +42,11 @@
- Group |
- Agenda |
- Minutes |
- Slides |
+ Group |
+ Agenda |
+ Minutes |
+ Slides |
+ Drafts |
@@ -64,10 +65,11 @@
- Group |
- Agenda |
- Minutes |
- Slides |
+ Group |
+ Agenda |
+ Minutes |
+ Slides |
+ Drafts |
@@ -88,10 +90,11 @@
- Group |
- Agenda |
- Minutes |
- Slides |
+ Group |
+ Agenda |
+ Minutes |
+ Slides |
+ Drafts |
@@ -112,10 +115,11 @@
- Group |
- Agenda |
- Minutes |
- Slides |
+ Group |
+ Agenda |
+ Minutes |
+ Slides |
+ Drafts |
@@ -135,10 +139,11 @@
- Group |
- Agenda |
- Minutes |
- Slides |
+ Group |
+ Agenda |
+ Minutes |
+ Slides |
+ Drafts |
@@ -182,4 +187,4 @@
{% block js %}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/ietf/templates/meeting/session_details.html b/ietf/templates/meeting/session_details.html
index b18065991..ade616a2a 100644
--- a/ietf/templates/meeting/session_details.html
+++ b/ietf/templates/meeting/session_details.html
@@ -9,23 +9,39 @@
{{ meeting }} : {{ acronym }}
{% for session in sessions %}
- {{ session.time }}{% if session.name %} : {{ session.name }}{% endif %}
+ {% if sessions|length > 1 %}Session {{ forloop.counter }} : {% endif %}{{ session.time }}{% if session.name %} : {{ session.name }}{% endif %}
+
+ {% if can_manage_materials %}
+ {% if session.status.slug == 'sched' or session.status.slug == 'schedw' %}
+
+ {% endif %}
+ {% endif %}
{% if session.filtered_sessionpresentation_set %}
- Materials:
-
-
+
{% endif %}
{% endfor %}