@@ -304,42 +304,41 @@ def edit_agenda(request, num=None, owner=None, name=None):
304304
305305##############################################################################
306306# show the properties associated with an agenda (visible, public)
307- # this page uses ajax POST requests to the API
308307#
309308AgendaPropertiesForm = modelform_factory (Schedule , fields = ('name' ,'visible' , 'public' ))
310309
311310@role_required ('Area Director' ,'Secretariat' )
312- @ensure_csrf_cookie
313311def edit_agenda_properties (request , num = None , owner = None , name = None ):
314312 meeting = get_meeting (num )
315313 person = get_person_by_email (owner )
316314 schedule = get_schedule_by_name (meeting , person , name )
317315 if schedule is None :
318316 raise Http404 ("No meeting information for meeting %s owner %s schedule %s available" % (num , owner , name ))
319- form = AgendaPropertiesForm (instance = schedule )
320317
321318 cansee , canedit , secretariat = agenda_permissions (meeting , schedule , request .user )
322319
323320 if not (canedit or has_role (request .user ,'Secretariat' )):
324321 return HttpResponseForbidden ("You may not edit this agenda" )
325322 else :
323+ if request .method == 'POST' :
324+ form = AgendaPropertiesForm (instance = schedule ,data = request .POST )
325+ if form .is_valid ():
326+ form .save ()
327+ return HttpResponseRedirect (reverse ('ietf.meeting.views.list_agendas' ,kwargs = {'num' : num }))
328+ else :
329+ form = AgendaPropertiesForm (instance = schedule )
326330 return render (request , "meeting/properties_edit.html" ,
327331 {"schedule" :schedule ,
328332 "form" :form ,
329333 "meeting" :meeting ,
330- "hide_menu" : True ,
331334 })
332335
333336##############################################################################
334337# show list of agendas.
335338#
336339
337340@role_required ('Area Director' ,'Secretariat' )
338- @ensure_csrf_cookie
339- def edit_agendas (request , num = None , order = None ):
340-
341- #if request.method == 'POST':
342- # return agenda_create(request, num, owner, name)
341+ def list_agendas (request , num = None ):
343342
344343 meeting = get_meeting (num )
345344 user = request .user
@@ -350,10 +349,11 @@ def edit_agendas(request, num=None, order=None):
350349
351350 schedules = schedules .order_by ('owner' , 'name' )
352351
352+ schedules = sorted (list (schedules ),key = lambda x :not x .is_official )
353+
353354 return render (request , "meeting/agenda_list.html" ,
354355 {"meeting" : meeting ,
355- "schedules" : schedules .all (),
356- "hide_menu" : True ,
356+ "schedules" : schedules ,
357357 })
358358
359359@ensure_csrf_cookie
@@ -927,3 +927,62 @@ def add_session_drafts(request, session_id, num):
927927 'already_linked' : session .sessionpresentation_set .filter (document__type_id = 'draft' ),
928928 'form' : form ,
929929 })
930+
931+ @role_required ('Secretariat' )
932+ def make_schedule_official (request , num , owner , name ):
933+
934+ meeting = get_meeting (num )
935+ person = get_person_by_email (owner )
936+ schedule = get_schedule_by_name (meeting , person , name )
937+
938+ if schedule is None :
939+ raise Http404
940+
941+ if request .method == 'POST' :
942+ if not (schedule .public and schedule .visible ):
943+ schedule .public = True
944+ schedule .visible = True
945+ schedule .save ()
946+ meeting .agenda = schedule
947+ meeting .save ()
948+ return HttpResponseRedirect (reverse ('ietf.meeting.views.list_agendas' ,kwargs = {'num' :num }))
949+
950+ if not schedule .public :
951+ messages .warning (request ,"This schedule will be made public as it is made official." )
952+
953+ if not schedule .visible :
954+ messages .warning (request ,"This schedule will be made visible as it is made official." )
955+
956+ return render (request , "meeting/make_schedule_official.html" ,
957+ { 'schedule' : schedule ,
958+ 'meeting' : meeting ,
959+ }
960+ )
961+
962+
963+ @role_required ('Secretariat' ,'Area Director' )
964+ def delete_schedule (request , num , owner , name ):
965+
966+ meeting = get_meeting (num )
967+ person = get_person_by_email (owner )
968+ schedule = get_schedule_by_name (meeting , person , name )
969+
970+ if schedule .name == 'Empty-Schedule' :
971+ return HttpResponseForbidden ('You may not delete the default empty schedule' )
972+
973+ if schedule == meeting .agenda :
974+ return HttpResponseForbidden ('You may not delete the official agenda for %s' % meeting )
975+
976+ if not ( has_role (request .user , 'Secretariat' ) or person .user == request .user ):
977+ return HttpResponseForbidden ("You may not delete other user's schedules" )
978+
979+ if request .method == 'POST' :
980+ schedule .delete ()
981+ return HttpResponseRedirect (reverse ('ietf.meeting.views.list_agendas' ,kwargs = {'num' :num }))
982+
983+ return render (request , "meeting/delete_schedule.html" ,
984+ { 'schedule' : schedule ,
985+ 'meeting' : meeting ,
986+ }
987+ )
988+
0 commit comments