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
This commit is contained in:
Robert Sparks 2014-11-24 20:53:36 +00:00
parent 5f1663530c
commit 2d0eb1e011
3 changed files with 84 additions and 55 deletions

View file

@ -3,6 +3,12 @@ from django.conf.urls import patterns, url
urlpatterns = patterns('ietf.doc.views_material',
url(r'^(?P<action>state|title|abstract|revise)/$', "edit_material", name="material_edit"),
url(r'^sessions/$', "material_presentations", name="material_presentations"),
(r'^sessions/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/edit/$', "edit_material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<seq>\d+)/edit/$', "edit_material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<week_day>[a-zA-Z]+)/edit/$', "edit_material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<date>\d{4}-\d{2}-\d{2}(-\d{4})?)/edit/$', "edit_material_presentations"),
(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"),
(r'^sessions/(?P<seq>\d+)/$', "material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/$', "material_presentations"),
(r'^sessions/(?P<acronym>[A-Za-z0-9_\-\+]+)/(?P<seq>\d+)/$', "material_presentations"),

View file

@ -183,16 +183,7 @@ class MaterialVersionForm(forms.Form):
super(MaterialVersionForm,self).__init__(*args,**kwargs)
self.fields['version'].choices = choices
@login_required
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)):
raise Http404
def get_upcoming_manageable_sessions(user, doc, acronym=None, date=None, seq=None, week_day = None):
# Find all the sessions for meetings that haven't ended that the user could affect
# 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
raise Http404
refined_candidates = [ sess for sess in refined_candidates if sess.scheduledsession_set.filter(schedule=sess.meeting.agenda,timeslot__time__week_day=dow) ]
changeable_sessions = [ sess for sess in refined_candidates if can_manage_materials(request.user, sess.group) ]
changeable_sessions = [ sess for sess in refined_candidates if can_manage_materials(user, sess.group) ]
if not changeable_sessions:
raise Http404
@ -253,48 +244,77 @@ def material_presentations(request, name, acronym=None, date=None, seq=None, wee
else:
sorted_sessions = [sorted_sessions[iseq]]
for index,session in enumerate(sorted_sessions):
session.sequence = index+1
return sorted_sessions
if len(sorted_sessions)==1:
session = sorted_sessions[0]
choices = [('notpresented','Not Presented')]
choices.extend([(x,x) for x in doc.docevent_set.filter(type='new_revision').values_list('newrevisiondocevent__rev',flat=True)])
initial = {'version' : session.version if hasattr(session,'version') else 'notpresented'}
@login_required
def edit_material_presentations(request, name, acronym=None, date=None, seq=None, week_day=None):
if request.method == 'POST':
form = MaterialVersionForm(request.POST,choices=choices)
if form.is_valid():
if request.POST.get("action", "") == "Save":
new_selection = form.cleaned_data['version']
if initial['version'] != new_selection:
if initial['version'] == 'notpresented':
doc.sessionpresentation_set.create(session=session,rev=new_selection)
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
c.desc = "Added version %s to session: %s" % (new_selection,session)
c.save()
elif new_selection == 'notpresented':
doc.sessionpresentation_set.filter(session=session).delete()
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
c.desc = "Removed from session: %s" % (session)
c.save()
else:
doc.sessionpresentation_set.filter(session=session).update(rev=new_selection)
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
c.desc = "Revision for session %s changed to %s" % (session,new_selection)
c.save()
return redirect('doc_view',name=doc.name)
else:
form = MaterialVersionForm(choices=choices,initial=initial)
doc = get_object_or_404(Document, name=name)
if not (doc.type_id=='slides' and doc.get_state('slides').slug=='active'):
raise Http404
return render(request, 'doc/material/edit_material_presentations.html', {
'session': session,
'doc': doc,
'form': form,
})
group = doc.group
if not (group.features.has_materials and can_manage_materials(request.user,group)):
raise Http404
sorted_sessions = get_upcoming_manageable_sessions(request.user, doc, acronym, date, seq, week_day)
if len(sorted_sessions)!=1:
raise Http404
session = sorted_sessions[0]
choices = [('notpresented','Not Presented')]
choices.extend([(x,x) for x in doc.docevent_set.filter(type='new_revision').values_list('newrevisiondocevent__rev',flat=True)])
initial = {'version' : session.version if hasattr(session,'version') else 'notpresented'}
if request.method == 'POST':
form = MaterialVersionForm(request.POST,choices=choices)
if form.is_valid():
if request.POST.get("action", "") == "Save":
new_selection = form.cleaned_data['version']
if initial['version'] != new_selection:
if initial['version'] == 'notpresented':
doc.sessionpresentation_set.create(session=session,rev=new_selection)
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
c.desc = "Added version %s to session: %s" % (new_selection,session)
c.save()
elif new_selection == 'notpresented':
doc.sessionpresentation_set.filter(session=session).delete()
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
c.desc = "Removed from session: %s" % (session)
c.save()
else:
doc.sessionpresentation_set.filter(session=session).update(rev=new_selection)
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
c.desc = "Revision for session %s changed to %s" % (session,new_selection)
c.save()
return redirect('doc_view',name=doc.name)
else:
return render(request, 'doc/material/material_presentations.html', {
'sessions' : sorted_sessions,
'doc': doc,
form = MaterialVersionForm(choices=choices,initial=initial)
return render(request, 'doc/material/edit_material_presentations.html', {
'session': session,
'doc': doc,
'form': form,
})
@login_required
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)):
raise Http404
sorted_sessions = get_upcoming_manageable_sessions(request.user, doc, acronym, date, seq, week_day)
#for index,session in enumerate(sorted_sessions):
# session.sequence = index+1
return render(request, 'doc/material/material_presentations.html', {
'sessions' : sorted_sessions,
'doc': doc,
})

View file

@ -14,11 +14,14 @@ Upcoming Presentations
{% for is_scheduled in is_scheduled_list %}
<li> {{ is_scheduled.grouper|yesno:"Presentation Scheduled,Presentation Not Scheduled"}}
<ul>
{% for session in is_scheduled.list %}
<li>
<a href="{{session.sequence}}">{{ session }}</a>
{% if session.versions %} (version{{session.versions|pluralize}} {{session.versions|join:','}}) {% endif %}
</li>
{% regroup is_scheduled.list by group as group_list %}
{% for group in group_list %}
{% for session in group.list %}
<li>
<a href="{% url 'ietf.doc.views_material.edit_material_presentations' name=doc.name acronym=group.grouper.acronym seq=forloop.counter %}">{{ session }}</a>
{% if session.versions %} (version{{session.versions|pluralize}} {{session.versions|join:','}}) {% endif %}
</li>
{% endfor %}
{% endfor %}
</ul>
</li>