11# Copyright The IETF Trust 2008, All Rights Reserved
22
3- from django .shortcuts import render_to_response
3+ from django .shortcuts import render_to_response , get_object_or_404 , redirect
44from django .template import RequestContext , loader
5- from django .http import Http404 , HttpResponse
5+ from django .http import Http404 , HttpResponse , HttpResponseForbidden
6+ from django import forms
67
7- from ietf .group .models import Group
8+ from ietf .group .models import *
9+ from ietf .group .utils import *
810from ietf .doc .models import Document
911from ietf .doc .views_search import SearchForm , retrieve_search_results
1012from ietf .name .models import StreamName
13+ from ietf .ietfauth .utils import has_role
14+ from ietf .person .forms import EmailsField
1115
1216import debug
1317
@@ -26,4 +30,46 @@ def stream_documents(request, acronym):
2630 docs , meta = retrieve_search_results (form )
2731 return render_to_response ('group/stream_documents.html' , {'stream' :stream , 'docs' :docs , 'meta' :meta }, context_instance = RequestContext (request ))
2832
29-
33+ class StreamEditForm (forms .Form ):
34+ delegates = EmailsField (label = "Delegates" , required = False , help_text = u"Type in name to search for person" )
35+
36+ def stream_edit (request , acronym ):
37+ group = get_object_or_404 (Group , acronym = acronym )
38+
39+ if not (has_role (request .user , "Secretariat" ) or group .has_role (request .user , "chair" )):
40+ return HttpResponseForbidden ("You don't have permission to access this page." )
41+
42+ chairs = Email .objects .filter (role__group = group , role__name = "chair" ).select_related ("person" )
43+
44+ if request .method == 'POST' :
45+ form = StreamEditForm (request .POST )
46+
47+ if form .is_valid ():
48+ save_group_in_history (group )
49+
50+ # update roles
51+ attr , slug , title = ('delegates' , 'delegate' , "Delegates" )
52+
53+ new = form .cleaned_data [attr ]
54+ old = Email .objects .filter (role__group = group , role__name = slug ).select_related ("person" )
55+ if set (new ) != set (old ):
56+ desc = "%s changed to <b>%s</b> from %s" % (
57+ title , ", " .join (x .get_name () for x in new ), ", " .join (x .get_name () for x in old ))
58+
59+ GroupEvent .objects .create (group = group , by = request .user .get_profile (), type = "info_changed" , desc = desc )
60+
61+ group .role_set .filter (name = slug ).delete ()
62+ for e in new :
63+ Role .objects .get_or_create (name_id = slug , email = e , group = group , person = e .person )
64+
65+ return redirect ("ietf.group.views.streams" )
66+ else :
67+ form = StreamEditForm (initial = dict (delegates = Email .objects .filter (role__group = group , role__name = "delegate" )))
68+
69+ return render_to_response ('group/stream_edit.html' ,
70+ {'group' : group ,
71+ 'chairs' : chairs ,
72+ 'form' : form ,
73+ },
74+ context_instance = RequestContext (request ))
75+
0 commit comments