Skip to content

Commit 2d0eb1e

Browse files
committed
Reworked URLs to explicitly invoke edit. Build list of possible sessions using group acronym and sequence variant of urls, not just sequence alone
- Legacy-Id: 8706
1 parent 5f16635 commit 2d0eb1e

3 files changed

Lines changed: 86 additions & 57 deletions

File tree

ietf/doc/urls_material.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
urlpatterns = patterns('ietf.doc.views_material',
44
url(r'^(?P<action>state|title|abstract|revise)/$', "edit_material", name="material_edit"),
55
url(r'^sessions/$', "material_presentations", name="material_presentations"),
6+
(r'^sessions/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
7+
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/edit/$', "edit_material_presentations"),
8+
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
9+
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<week_day>[a-zA-Z]+)/edit/$', "edit_material_presentations"),
10+
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/edit/$', "edit_material_presentations"),
11+
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
612
(r'^sessions/(?P<seq>\d+)/$', "material_presentations"),
713
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/$', "material_presentations"),
814
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<seq>\d+)/$', "material_presentations"),

ietf/doc/views_material.py

Lines changed: 72 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -183,16 +183,7 @@ def __init__(self, *args, **kwargs):
183183
super(MaterialVersionForm,self).__init__(*args,**kwargs)
184184
self.fields['version'].choices = choices
185185

186-
@login_required
187-
def material_presentations(request, name, acronym=None, date=None, seq=None, week_day=None):
188-
189-
doc = get_object_or_404(Document, name=name)
190-
if not (doc.type_id=='slides' and doc.get_state('slides').slug=='active'):
191-
raise Http404
192-
193-
group = doc.group
194-
if not (group.features.has_materials and can_manage_materials(request.user,group)):
195-
raise Http404
186+
def get_upcoming_manageable_sessions(user, doc, acronym=None, date=None, seq=None, week_day = None):
196187

197188
# Find all the sessions for meetings that haven't ended that the user could affect
198189
# This motif is also in Document.future_presentations - it would be nice to consolodate it somehow
@@ -219,7 +210,7 @@ def material_presentations(request, name, acronym=None, date=None, seq=None, wee
219210
raise Http404
220211
refined_candidates = [ sess for sess in refined_candidates if sess.scheduledsession_set.filter(schedule=sess.meeting.agenda,timeslot__time__week_day=dow) ]
221212

222-
changeable_sessions = [ sess for sess in refined_candidates if can_manage_materials(request.user, sess.group) ]
213+
changeable_sessions = [ sess for sess in refined_candidates if can_manage_materials(user, sess.group) ]
223214

224215
if not changeable_sessions:
225216
raise Http404
@@ -253,48 +244,77 @@ def time_sort_key(session):
253244
else:
254245
sorted_sessions = [sorted_sessions[iseq]]
255246

256-
for index,session in enumerate(sorted_sessions):
257-
session.sequence = index+1
258-
259-
if len(sorted_sessions)==1:
260-
session = sorted_sessions[0]
261-
choices = [('notpresented','Not Presented')]
262-
choices.extend([(x,x) for x in doc.docevent_set.filter(type='new_revision').values_list('newrevisiondocevent__rev',flat=True)])
263-
initial = {'version' : session.version if hasattr(session,'version') else 'notpresented'}
264-
265-
if request.method == 'POST':
266-
form = MaterialVersionForm(request.POST,choices=choices)
267-
if form.is_valid():
268-
if request.POST.get("action", "") == "Save":
269-
new_selection = form.cleaned_data['version']
270-
if initial['version'] != new_selection:
271-
if initial['version'] == 'notpresented':
272-
doc.sessionpresentation_set.create(session=session,rev=new_selection)
273-
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
274-
c.desc = "Added version %s to session: %s" % (new_selection,session)
275-
c.save()
276-
elif new_selection == 'notpresented':
277-
doc.sessionpresentation_set.filter(session=session).delete()
278-
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
279-
c.desc = "Removed from session: %s" % (session)
280-
c.save()
281-
else:
282-
doc.sessionpresentation_set.filter(session=session).update(rev=new_selection)
283-
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
284-
c.desc = "Revision for session %s changed to %s" % (session,new_selection)
285-
c.save()
286-
return redirect('doc_view',name=doc.name)
287-
else:
288-
form = MaterialVersionForm(choices=choices,initial=initial)
247+
return sorted_sessions
289248

290-
return render(request, 'doc/material/edit_material_presentations.html', {
291-
'session': session,
292-
'doc': doc,
293-
'form': form,
294-
})
249+
@login_required
250+
def edit_material_presentations(request, name, acronym=None, date=None, seq=None, week_day=None):
251+
252+
doc = get_object_or_404(Document, name=name)
253+
if not (doc.type_id=='slides' and doc.get_state('slides').slug=='active'):
254+
raise Http404
295255

256+
group = doc.group
257+
if not (group.features.has_materials and can_manage_materials(request.user,group)):
258+
raise Http404
259+
260+
sorted_sessions = get_upcoming_manageable_sessions(request.user, doc, acronym, date, seq, week_day)
261+
262+
if len(sorted_sessions)!=1:
263+
raise Http404
264+
265+
session = sorted_sessions[0]
266+
choices = [('notpresented','Not Presented')]
267+
choices.extend([(x,x) for x in doc.docevent_set.filter(type='new_revision').values_list('newrevisiondocevent__rev',flat=True)])
268+
initial = {'version' : session.version if hasattr(session,'version') else 'notpresented'}
269+
270+
if request.method == 'POST':
271+
form = MaterialVersionForm(request.POST,choices=choices)
272+
if form.is_valid():
273+
if request.POST.get("action", "") == "Save":
274+
new_selection = form.cleaned_data['version']
275+
if initial['version'] != new_selection:
276+
if initial['version'] == 'notpresented':
277+
doc.sessionpresentation_set.create(session=session,rev=new_selection)
278+
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
279+
c.desc = "Added version %s to session: %s" % (new_selection,session)
280+
c.save()
281+
elif new_selection == 'notpresented':
282+
doc.sessionpresentation_set.filter(session=session).delete()
283+
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
284+
c.desc = "Removed from session: %s" % (session)
285+
c.save()
286+
else:
287+
doc.sessionpresentation_set.filter(session=session).update(rev=new_selection)
288+
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
289+
c.desc = "Revision for session %s changed to %s" % (session,new_selection)
290+
c.save()
291+
return redirect('doc_view',name=doc.name)
296292
else:
297-
return render(request, 'doc/material/material_presentations.html', {
298-
'sessions' : sorted_sessions,
299-
'doc': doc,
293+
form = MaterialVersionForm(choices=choices,initial=initial)
294+
295+
return render(request, 'doc/material/edit_material_presentations.html', {
296+
'session': session,
297+
'doc': doc,
298+
'form': form,
299+
})
300+
301+
@login_required
302+
def material_presentations(request, name, acronym=None, date=None, seq=None, week_day=None):
303+
304+
doc = get_object_or_404(Document, name=name)
305+
if not (doc.type_id=='slides' and doc.get_state('slides').slug=='active'):
306+
raise Http404
307+
308+
group = doc.group
309+
if not (group.features.has_materials and can_manage_materials(request.user,group)):
310+
raise Http404
311+
312+
sorted_sessions = get_upcoming_manageable_sessions(request.user, doc, acronym, date, seq, week_day)
313+
314+
#for index,session in enumerate(sorted_sessions):
315+
# session.sequence = index+1
316+
317+
return render(request, 'doc/material/material_presentations.html', {
318+
'sessions' : sorted_sessions,
319+
'doc': doc,
300320
})

ietf/templates/doc/material/material_presentations.html

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ <h1>Upcoming Presentations of<br/>{{doc.title}}<br/>{{doc.name}}</h1>
1414
{% for is_scheduled in is_scheduled_list %}
1515
<li> {{ is_scheduled.grouper|yesno:"Presentation Scheduled,Presentation Not Scheduled"}}
1616
<ul>
17-
{% for session in is_scheduled.list %}
18-
<li>
19-
<a href="{{session.sequence}}">{{ session }}</a>
20-
{% if session.versions %} (version{{session.versions|pluralize}} {{session.versions|join:','}}) {% endif %}
21-
</li>
17+
{% regroup is_scheduled.list by group as group_list %}
18+
{% for group in group_list %}
19+
{% for session in group.list %}
20+
<li>
21+
<a href="{% url 'ietf.doc.views_material.edit_material_presentations' name=doc.name acronym=group.grouper.acronym seq=forloop.counter %}">{{ session }}</a>
22+
{% if session.versions %} (version{{session.versions|pluralize}} {{session.versions|join:','}}) {% endif %}
23+
</li>
24+
{% endfor %}
2225
{% endfor %}
2326
</ul>
2427
</li>

0 commit comments

Comments
 (0)