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
This commit is contained in:
parent
3ef256b959
commit
efa3228314
ietf
meeting
templates/meeting
|
@ -1451,3 +1451,26 @@ class MaterialsTests(TestCase):
|
|||
self.assertEqual(sp.rev,u'01')
|
||||
self.assertEqual(sp.document.rev,u'01')
|
||||
|
||||
def test_remove_sessionpresentation(self):
|
||||
session = SessionFactory(meeting__type_id='ietf')
|
||||
doc = DocumentFactory(type_id='slides')
|
||||
session.sessionpresentation_set.create(document=doc)
|
||||
|
||||
url = urlreverse('ietf.meeting.views.remove_sessionpresentation',kwargs={'num':session.meeting.number,'session_id':session.id,'name':'no-such-doc'})
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
url = urlreverse('ietf.meeting.views.remove_sessionpresentation',kwargs={'num':session.meeting.number,'session_id':0,'name':doc.name})
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
url = urlreverse('ietf.meeting.views.remove_sessionpresentation',kwargs={'num':session.meeting.number,'session_id':session.id,'name':doc.name})
|
||||
login_testing_unauthorized(self,"secretary",url)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
self.assertEqual(1,session.sessionpresentation_set.count())
|
||||
response = self.client.post(url,{'remove_session':''})
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(0,session.sessionpresentation_set.count())
|
||||
self.assertEqual(2,doc.docevent_set.count())
|
||||
|
|
|
@ -15,6 +15,7 @@ safe_for_all_meeting_types = [
|
|||
url(r'^session/(?P<session_id>\d+)/agenda$', views.upload_session_agenda),
|
||||
url(r'^session/(?P<session_id>\d+)/slides(?:/%(name)s)?$' % settings.URL_REGEXPS, views.upload_session_slides),
|
||||
url(r'^session/(?P<session_id>\d+)/slides/%(name)s/order$' % settings.URL_REGEXPS, views.set_slide_order),
|
||||
url(r'^session/(?P<session_id>\d+)/doc/%(name)s/remove$' % settings.URL_REGEXPS, views.remove_sessionpresentation),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent
|
|||
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, FloorPlan
|
||||
from ietf.meeting.models import Meeting, Session, Schedule, Room, FloorPlan, SessionPresentation
|
||||
from ietf.meeting.helpers import get_areas, get_person_by_email, get_schedule_by_name
|
||||
from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
|
||||
from ietf.meeting.helpers import get_all_assignments_from_schedule
|
||||
|
@ -1414,16 +1414,21 @@ def upload_session_slides(request, session_id, num, name):
|
|||
else:
|
||||
name = 'slides-%s-%s' % (session.meeting.number, sess_time.strftime("%Y%m%d%H%M"))
|
||||
name = name + '-' + slugify(title)
|
||||
doc = Document.objects.create(
|
||||
name = name,
|
||||
type_id = 'slides',
|
||||
title = title,
|
||||
group = session.group,
|
||||
rev = '00',
|
||||
)
|
||||
if Document.objects.filter(name=name).exists():
|
||||
doc = Document.objects.get(name=name)
|
||||
doc.rev = '%02d' % (int(doc.rev)+1)
|
||||
doc.title = form.cleaned_data['title']
|
||||
else:
|
||||
doc = Document.objects.create(
|
||||
name = name,
|
||||
type_id = 'slides',
|
||||
title = title,
|
||||
group = session.group,
|
||||
rev = '00',
|
||||
)
|
||||
doc.docalias_set.create(name=doc.name)
|
||||
doc.states.add(State.objects.get(type_id='slides',slug='active'))
|
||||
doc.states.add(State.objects.get(type_id='reuse_policy',slug='single'))
|
||||
doc.docalias_set.create(name=doc.name)
|
||||
max_order = session.sessionpresentation_set.filter(document__type='slides').aggregate(Max('order'))['order__max'] or 0
|
||||
session.sessionpresentation_set.create(document=doc,rev=doc.rev,order=max_order+1)
|
||||
if apply_to_all:
|
||||
|
@ -1451,6 +1456,22 @@ def upload_session_slides(request, session_id, num, name):
|
|||
'form': form,
|
||||
})
|
||||
|
||||
def remove_sessionpresentation(request, session_id, num, name):
|
||||
sp = get_object_or_404(SessionPresentation,session_id=session_id,document__name=name)
|
||||
session = sp.session
|
||||
if not session.can_manage_materials(request.user):
|
||||
return HttpResponseForbidden("You don't have permission to manage materials for this session.")
|
||||
if session.is_material_submission_cutoff() and not has_role(request.user, "Secretariat"):
|
||||
return HttpResponseForbidden("The materials cutoff for this session has passed. Contact the secretariat for further action.")
|
||||
if request.method == 'POST':
|
||||
session.sessionpresentation_set.filter(pk=sp.pk).delete()
|
||||
c = DocEvent(type="added_comment", doc=sp.document, by=request.user.person)
|
||||
c.desc = "Removed from session: %s" % (session)
|
||||
c.save()
|
||||
return redirect('ietf.meeting.views.session_details', num=session.meeting.number, acronym=session.group.acronym)
|
||||
|
||||
return render(request,'meeting/remove_sessionpresentation.html', {'sp': sp })
|
||||
|
||||
def set_slide_order(request, session_id, num, name):
|
||||
# num is redundant, but we're dragging it along an artifact of where we are in the current URL structure
|
||||
session = get_object_or_404(Session,pk=session_id)
|
||||
|
|
31
ietf/templates/meeting/remove_sessionpresentation.html
Normal file
31
ietf/templates/meeting/remove_sessionpresentation.html
Normal file
|
@ -0,0 +1,31 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2015, All Rights Reserved #}
|
||||
{% load origin %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Remove {{sp.document}} from session{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
<h1>Confirm removing document from session {{sp.session}}</h1>
|
||||
|
||||
{% if sp.session.is_material_submission_cutoff %}
|
||||
<p class="alert alert-warning">The deadline for submission corrections has passed. This may affect published proceedings.</p>
|
||||
{% endif %}
|
||||
|
||||
<h2>Document</h2>
|
||||
<p><strong>{{sp.document.name}}{% if sp.rev %}-{{sp.rev}}{% else %} (current version){% endif %}</strong></p>
|
||||
<p>{{sp.document.title}}</p>
|
||||
<h2>Session</h2>
|
||||
<p>{{sp.session}}</p>
|
||||
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{% buttons %}
|
||||
<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>
|
||||
<a class="btn btn-default href="{% url 'ietf.meeting.views.session_details' num=sp.session.meeting.number acronym=sp.session.group.acronym%}">Cancel</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
|
@ -95,6 +95,7 @@
|
|||
{% if can_manage_materials %}
|
||||
<td class="col-md-2">
|
||||
<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>
|
||||
<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>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
|
@ -121,6 +122,11 @@
|
|||
{% endif %}
|
||||
<a href="{{url}}">{{pres.document.title}} ({{ pres.document.name }}{% if pres.rev %}-{{ pres.rev }}{% endif %})</a>
|
||||
</td>
|
||||
{% if can_manage_materials %}
|
||||
<td class="col-md-2">
|
||||
<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>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
|
Loading…
Reference in a new issue