Skip to content

Commit efa3228

Browse files
committed
Added the ability to remove documents from a session to session_details. Made slide upload code more robust against removing a set of slides from a session and then revising them. Commit ready for merge.
- Legacy-Id: 12004
1 parent 3ef256b commit efa3228

5 files changed

Lines changed: 91 additions & 9 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,3 +1451,26 @@ def test_upload_slides(self):
14511451
self.assertEqual(sp.rev,u'01')
14521452
self.assertEqual(sp.document.rev,u'01')
14531453

1454+
def test_remove_sessionpresentation(self):
1455+
session = SessionFactory(meeting__type_id='ietf')
1456+
doc = DocumentFactory(type_id='slides')
1457+
session.sessionpresentation_set.create(document=doc)
1458+
1459+
url = urlreverse('ietf.meeting.views.remove_sessionpresentation',kwargs={'num':session.meeting.number,'session_id':session.id,'name':'no-such-doc'})
1460+
response = self.client.get(url)
1461+
self.assertEqual(response.status_code, 404)
1462+
1463+
url = urlreverse('ietf.meeting.views.remove_sessionpresentation',kwargs={'num':session.meeting.number,'session_id':0,'name':doc.name})
1464+
response = self.client.get(url)
1465+
self.assertEqual(response.status_code, 404)
1466+
1467+
url = urlreverse('ietf.meeting.views.remove_sessionpresentation',kwargs={'num':session.meeting.number,'session_id':session.id,'name':doc.name})
1468+
login_testing_unauthorized(self,"secretary",url)
1469+
response = self.client.get(url)
1470+
self.assertEqual(response.status_code, 200)
1471+
1472+
self.assertEqual(1,session.sessionpresentation_set.count())
1473+
response = self.client.post(url,{'remove_session':''})
1474+
self.assertEqual(response.status_code, 302)
1475+
self.assertEqual(0,session.sessionpresentation_set.count())
1476+
self.assertEqual(2,doc.docevent_set.count())

ietf/meeting/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
url(r'^session/(?P<session_id>\d+)/agenda$', views.upload_session_agenda),
1616
url(r'^session/(?P<session_id>\d+)/slides(?:/%(name)s)?$' % settings.URL_REGEXPS, views.upload_session_slides),
1717
url(r'^session/(?P<session_id>\d+)/slides/%(name)s/order$' % settings.URL_REGEXPS, views.set_slide_order),
18+
url(r'^session/(?P<session_id>\d+)/doc/%(name)s/remove$' % settings.URL_REGEXPS, views.remove_sessionpresentation),
1819
]
1920

2021

ietf/meeting/views.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from ietf.group.models import Group
3939
from ietf.group.utils import can_manage_materials
4040
from ietf.ietfauth.utils import role_required, has_role
41-
from ietf.meeting.models import Meeting, Session, Schedule, Room, FloorPlan
41+
from ietf.meeting.models import Meeting, Session, Schedule, Room, FloorPlan, SessionPresentation
4242
from ietf.meeting.helpers import get_areas, get_person_by_email, get_schedule_by_name
4343
from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
4444
from ietf.meeting.helpers import get_all_assignments_from_schedule
@@ -1414,16 +1414,21 @@ def upload_session_slides(request, session_id, num, name):
14141414
else:
14151415
name = 'slides-%s-%s' % (session.meeting.number, sess_time.strftime("%Y%m%d%H%M"))
14161416
name = name + '-' + slugify(title)
1417-
doc = Document.objects.create(
1418-
name = name,
1419-
type_id = 'slides',
1420-
title = title,
1421-
group = session.group,
1422-
rev = '00',
1423-
)
1417+
if Document.objects.filter(name=name).exists():
1418+
doc = Document.objects.get(name=name)
1419+
doc.rev = '%02d' % (int(doc.rev)+1)
1420+
doc.title = form.cleaned_data['title']
1421+
else:
1422+
doc = Document.objects.create(
1423+
name = name,
1424+
type_id = 'slides',
1425+
title = title,
1426+
group = session.group,
1427+
rev = '00',
1428+
)
1429+
doc.docalias_set.create(name=doc.name)
14241430
doc.states.add(State.objects.get(type_id='slides',slug='active'))
14251431
doc.states.add(State.objects.get(type_id='reuse_policy',slug='single'))
1426-
doc.docalias_set.create(name=doc.name)
14271432
max_order = session.sessionpresentation_set.filter(document__type='slides').aggregate(Max('order'))['order__max'] or 0
14281433
session.sessionpresentation_set.create(document=doc,rev=doc.rev,order=max_order+1)
14291434
if apply_to_all:
@@ -1451,6 +1456,22 @@ def upload_session_slides(request, session_id, num, name):
14511456
'form': form,
14521457
})
14531458

1459+
def remove_sessionpresentation(request, session_id, num, name):
1460+
sp = get_object_or_404(SessionPresentation,session_id=session_id,document__name=name)
1461+
session = sp.session
1462+
if not session.can_manage_materials(request.user):
1463+
return HttpResponseForbidden("You don't have permission to manage materials for this session.")
1464+
if session.is_material_submission_cutoff() and not has_role(request.user, "Secretariat"):
1465+
return HttpResponseForbidden("The materials cutoff for this session has passed. Contact the secretariat for further action.")
1466+
if request.method == 'POST':
1467+
session.sessionpresentation_set.filter(pk=sp.pk).delete()
1468+
c = DocEvent(type="added_comment", doc=sp.document, by=request.user.person)
1469+
c.desc = "Removed from session: %s" % (session)
1470+
c.save()
1471+
return redirect('ietf.meeting.views.session_details', num=session.meeting.number, acronym=session.group.acronym)
1472+
1473+
return render(request,'meeting/remove_sessionpresentation.html', {'sp': sp })
1474+
14541475
def set_slide_order(request, session_id, num, name):
14551476
# num is redundant, but we're dragging it along an artifact of where we are in the current URL structure
14561477
session = get_object_or_404(Session,pk=session_id)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{% extends "base.html" %}
2+
{# Copyright The IETF Trust 2015, All Rights Reserved #}
3+
{% load origin %}
4+
5+
{% load bootstrap3 %}
6+
7+
{% block title %}Remove {{sp.document}} from session{% endblock %}
8+
9+
{% block content %}
10+
{% origin %}
11+
<h1>Confirm removing document from session {{sp.session}}</h1>
12+
13+
{% if sp.session.is_material_submission_cutoff %}
14+
<p class="alert alert-warning">The deadline for submission corrections has passed. This may affect published proceedings.</p>
15+
{% endif %}
16+
17+
<h2>Document</h2>
18+
<p><strong>{{sp.document.name}}{% if sp.rev %}-{{sp.rev}}{% else %} (current version){% endif %}</strong></p>
19+
<p>{{sp.document.title}}</p>
20+
<h2>Session</h2>
21+
<p>{{sp.session}}</p>
22+
23+
<form method="post">
24+
{% csrf_token %}
25+
{% buttons %}
26+
<button type="submit" class="btn btn-{% if sp.session.is_material_submission_cutoff %}warning{% else %}primary{% endif %}" name="remove_session">Remove document from session</button>
27+
<a class="btn btn-default href="{% url 'ietf.meeting.views.session_details' num=sp.session.meeting.number acronym=sp.session.group.acronym%}">Cancel</a>
28+
{% endbuttons %}
29+
</form>
30+
31+
{% endblock %}

ietf/templates/meeting/session_details.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ <h2 id="session_{{session.pk}}">{% if sessions|length > 1 %}Session {{ forloop.c
9595
{% if can_manage_materials %}
9696
<td class="col-md-2">
9797
<a class="btn btn-default btn-sm pull-right" href="{% url 'ietf.meeting.views.upload_session_slides' session_id=session.pk num=session.meeting.number name=pres.document.name %}">Upload Revision</a>
98+
<a class="btn btn-default btn-sm pull-right" href="{% url 'ietf.meeting.views.remove_sessionpresentation' session_id=session.pk num=session.meeting.number name=pres.document.name %}">Remove</a>
9899
</td>
99100
{% endif %}
100101
</tr>
@@ -121,6 +122,11 @@ <h2 id="session_{{session.pk}}">{% if sessions|length > 1 %}Session {{ forloop.c
121122
{% endif %}
122123
<a href="{{url}}">{{pres.document.title}} ({{ pres.document.name }}{% if pres.rev %}-{{ pres.rev }}{% endif %})</a>
123124
</td>
125+
{% if can_manage_materials %}
126+
<td class="col-md-2">
127+
<a class="btn btn-default btn-sm pull-right" href="{% url 'ietf.meeting.views.remove_sessionpresentation' session_id=session.pk num=session.meeting.number name=pres.document.name %}">Remove</a>
128+
</td>
129+
{% endif %}
124130
</tr>
125131
{% endfor %}
126132
</table>

0 commit comments

Comments
 (0)