Skip to content

Commit 8b0c358

Browse files
committed
Move some views to the private area
Refactor edit_chair, edit_members and edit_publickey with the news decorators and form styles fixed error in the role_required decorator See ietf-tools#904 ietf-tools#905 - Legacy-Id: 5162
1 parent cca4924 commit 8b0c358

6 files changed

Lines changed: 30 additions & 24 deletions

File tree

ietf/ietfauth/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def has_role(user, role_names):
107107
def role_required(*role_names):
108108
"""View decorator for checking that the user is logged in and
109109
has one of the listed roles."""
110-
return passes_test_decorator(lambda u: has_role(u, role_names),
110+
return passes_test_decorator(lambda u, *args, **kwargs: has_role(u, role_names),
111111
"Restricted to role%s %s" % ("s" if len(role_names) != 1 else "", ", ".join(role_names)))
112112

113113
if settings.USE_DB_REDESIGN_PROXY_CLASSES:

ietf/nomcom/forms.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from django.conf import settings
22
from django import forms
33
from django.contrib.formtools.preview import FormPreview
4-
from django.http import HttpResponseRedirect, HttpResponseForbidden
4+
from django.http import HttpResponseRedirect
55
from django.shortcuts import get_object_or_404
66
from django.core.urlresolvers import reverse
77
from django.template.loader import render_to_string
8+
from django.utils.decorators import method_decorator
89

910
from ietf.utils import unaccent
1011
from ietf.utils.mail import send_mail
11-
from ietf.ietfauth.decorators import has_role
12+
from ietf.ietfauth.decorators import role_required
1213
from ietf.utils import fields as custom_fields
1314
from ietf.group.models import Group, Role
1415
from ietf.name.models import RoleName, FeedbackType
@@ -17,6 +18,7 @@
1718
Position, Feedback
1819
from ietf.nomcom.utils import QUESTIONNAIRE_TEMPLATE, NOMINATION_EMAIL_TEMPLATE, \
1920
INEXISTENT_PERSON_TEMPLATE, NOMINEE_EMAIL_TEMPLATE
21+
from ietf.nomcom.decorators import member_required
2022

2123
ROLODEX_URL = getattr(settings, 'ROLODEX_URL', None)
2224

@@ -50,23 +52,21 @@ def get_fieldsets(self):
5052
yield fieldset_dict
5153

5254

53-
class EditMembersForm(forms.Form):
55+
class EditMembersForm(BaseNomcomForm, forms.Form):
5456

5557
members = custom_fields.MultiEmailField(label="Members email", required=False)
5658

59+
fieldsets = [('Members', ('members',))]
60+
5761

5862
class EditMembersFormPreview(FormPreview):
5963
form_template = 'nomcom/edit_members.html'
6064
preview_template = 'nomcom/edit_members_preview.html'
6165

66+
@method_decorator(member_required(role='chair'))
6267
def __call__(self, request, *args, **kwargs):
6368
year = kwargs['year']
6469
group = get_group_or_404(year)
65-
is_group_chair = group.is_chair(request.user)
66-
is_secretariat = has_role(request.user, "Secretariat")
67-
if not is_secretariat and not is_group_chair:
68-
return HttpResponseForbidden("Must be a secretariat or group chair")
69-
7070
self.state['group'] = group
7171
self.state['rolodex_url'] = ROLODEX_URL
7272
self.group = group
@@ -115,23 +115,22 @@ def done(self, request, cleaned_data):
115115
return HttpResponseRedirect(reverse('edit_members', kwargs={'year': self.year}))
116116

117117

118-
class EditChairForm(forms.Form):
118+
class EditChairForm(BaseNomcomForm, forms.Form):
119119

120120
chair = forms.EmailField(label="Chair email", required=False,
121121
widget=forms.TextInput(attrs={'size': '40'}))
122122

123+
fieldsets = [('Chair info', ('chair',))]
124+
123125

124126
class EditChairFormPreview(FormPreview):
125127
form_template = 'nomcom/edit_chair.html'
126128
preview_template = 'nomcom/edit_chair_preview.html'
127129

130+
@method_decorator(role_required("Secretariat"))
128131
def __call__(self, request, *args, **kwargs):
129132
year = kwargs['year']
130133
group = get_group_or_404(year)
131-
is_secretariat = has_role(request.user, "Secretariat")
132-
if not is_secretariat:
133-
return HttpResponseForbidden("Must be a secretariat")
134-
135134
self.state['group'] = group
136135
self.state['rolodex_url'] = ROLODEX_URL
137136
self.group = group
@@ -171,12 +170,17 @@ def done(self, request, cleaned_data):
171170
return HttpResponseRedirect(reverse('edit_chair', kwargs={'year': self.year}))
172171

173172

174-
class EditPublicKeyForm(forms.ModelForm):
175-
fieldsets = [('Edit the public key of NomCom', ('public_key',))]
173+
class EditPublicKeyForm(BaseNomcomForm, forms.ModelForm):
174+
175+
fieldsets = [('Public Key', ('public_key',))]
176176

177177
class Meta:
178178
model = NomCom
179179

180+
def __init__(self, *args, **kwargs):
181+
super(EditPublicKeyForm, self).__init__(*args, **kwargs)
182+
self.fields['public_key'].required = True
183+
180184

181185
class NominateForm(BaseNomcomForm, forms.ModelForm):
182186
comments = forms.CharField(label='Comments', widget=forms.Textarea())

ietf/nomcom/urls.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
urlpatterns = patterns('ietf.nomcom.views',
66
url(r'^(?P<year>\d{4})/private/$', 'private_index', name='nomcom_private_index'),
77
url(r'^(?P<year>\d{4})/private/merge/$', 'private_merge', name='nomcom_private_merge'),
8+
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'),
9+
url(r'^(?P<year>\d{4})/private/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'),
10+
url(r'^(?P<year>\d{4})/private/edit-publickey/$', 'edit_publickey', name='edit_publickey'),
11+
812
url(r'^(?P<year>\d{4})/$', 'index', name='nomcom_index'),
913
url(r'^(?P<year>\d{4})/requirements/$', 'requirements', name='nomcom_requirements'),
1014
url(r'^(?P<year>\d{4})/questionnaires/$', 'questionnaires', name='nomcom_questionnaires'),
1115
url(r'^(?P<year>\d{4})/comments/$', 'comments', name='nomcom_comments'),
1216
url(r'^(?P<year>\d{4})/nominate/$', 'nominate', name='nomcom_nominate'),
1317
url(r'^ajax/position-text/(?P<position_id>\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'),
14-
url(r'^(?P<year>\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'),
15-
url(r'^(?P<year>\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'),
16-
url(r'^(?P<year>\d{4})/edit-publickey/$', 'edit_publickey', name='edit_publickey'),
18+
1719
)

ietf/nomcom/views.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from django.template.loader import render_to_string
77
from django.utils import simplejson
88

9-
109
from ietf.nomcom.utils import get_nomcom_by_year, is_nomcom_member, \
1110
is_nomcom_chair, HOME_TEMPLATE
1211
from ietf.nomcom.decorators import member_required

ietf/templates/nomcom/nomcomform.html

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,5 @@ <h2>{{ fieldset.name }}</h2>
2828
{% endif %}
2929
{% endfor %}
3030

31-
<div class="submitrow">
32-
<input type="submit" value="Save" name="save" />
33-
</div>
34-
3531
</div>
3632

ietf/templates/nomcom/nominate.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525

2626
<form id="nominateform" action="" method="post">{% csrf_token %}
2727
{{ form }}
28+
29+
<div class="submitrow">
30+
<input type="submit" value="Save" name="save" />
31+
</div>
32+
2833
</form>
2934

3035
{% endblock %}

0 commit comments

Comments
 (0)