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 %} + +
+Session requests +{% if can_edit %} +Request a session +{% endif %} +
+ {% 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 @@ - - - - + + + + + @@ -64,10 +65,11 @@
GroupAgendaMinutesSlidesGroupAgendaMinutesSlidesDrafts
- - - - + + + + + @@ -88,10 +90,11 @@
GroupAgendaMinutesSlidesGroupAgendaMinutesSlidesDrafts
- - - - + + + + + @@ -112,10 +115,11 @@
GroupAgendaMinutesSlidesGroupAgendaMinutesSlidesDrafts
- - - - + + + + + @@ -135,10 +139,11 @@
GroupAgendaMinutesSlidesGroupAgendaMinutesSlidesDrafts
- - - - + + + + + @@ -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' %} +
+ + Upload/Edit Materials + + {% if not type_counter.agenda %} + This session does not yet have an agenda + {% endif %} +
+ {% endif %} + {% endif %} {% if session.filtered_sessionpresentation_set %} -

Materials:

- -
GroupAgendaMinutesSlidesGroupAgendaMinutesSlidesDrafts
- {% for pres in session.filtered_sessionpresentation_set %} - {% if pres.document.type_id != 'bluesheets' and pres.document.type_id != 'recording' %} - - - - {% endif %} - {% endfor %} -
- {{pres.document.title}} ({{ pres.document.name }}-{{ pres.rev }}) - -
+
+
Materials:
+
+ + {% for pres in session.filtered_sessionpresentation_set %} + {% if pres.document.type_id != 'bluesheets' and pres.document.type_id != 'recording' %} + + + + {% endif %} + {% endfor %} +
+ {{pres.document.title}} ({{ pres.document.name }}-{{ pres.rev }}) + +
+
+
{% endif %} {% endfor %}