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 #904 #905 - Legacy-Id: 5162
This commit is contained in:
parent
cca4924597
commit
8b0c358810
|
@ -107,7 +107,7 @@ def has_role(user, role_names):
|
|||
def role_required(*role_names):
|
||||
"""View decorator for checking that the user is logged in and
|
||||
has one of the listed roles."""
|
||||
return passes_test_decorator(lambda u: has_role(u, role_names),
|
||||
return passes_test_decorator(lambda u, *args, **kwargs: has_role(u, role_names),
|
||||
"Restricted to role%s %s" % ("s" if len(role_names) != 1 else "", ", ".join(role_names)))
|
||||
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
from django.conf import settings
|
||||
from django import forms
|
||||
from django.contrib.formtools.preview import FormPreview
|
||||
from django.http import HttpResponseRedirect, HttpResponseForbidden
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.decorators import method_decorator
|
||||
|
||||
from ietf.utils import unaccent
|
||||
from ietf.utils.mail import send_mail
|
||||
from ietf.ietfauth.decorators import has_role
|
||||
from ietf.ietfauth.decorators import role_required
|
||||
from ietf.utils import fields as custom_fields
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.name.models import RoleName, FeedbackType
|
||||
|
@ -17,6 +18,7 @@ from ietf.nomcom.models import NomCom, Nomination, Nominee, NomineePosition, \
|
|||
Position, Feedback
|
||||
from ietf.nomcom.utils import QUESTIONNAIRE_TEMPLATE, NOMINATION_EMAIL_TEMPLATE, \
|
||||
INEXISTENT_PERSON_TEMPLATE, NOMINEE_EMAIL_TEMPLATE
|
||||
from ietf.nomcom.decorators import member_required
|
||||
|
||||
ROLODEX_URL = getattr(settings, 'ROLODEX_URL', None)
|
||||
|
||||
|
@ -50,23 +52,21 @@ class BaseNomcomForm(object):
|
|||
yield fieldset_dict
|
||||
|
||||
|
||||
class EditMembersForm(forms.Form):
|
||||
class EditMembersForm(BaseNomcomForm, forms.Form):
|
||||
|
||||
members = custom_fields.MultiEmailField(label="Members email", required=False)
|
||||
|
||||
fieldsets = [('Members', ('members',))]
|
||||
|
||||
|
||||
class EditMembersFormPreview(FormPreview):
|
||||
form_template = 'nomcom/edit_members.html'
|
||||
preview_template = 'nomcom/edit_members_preview.html'
|
||||
|
||||
@method_decorator(member_required(role='chair'))
|
||||
def __call__(self, request, *args, **kwargs):
|
||||
year = kwargs['year']
|
||||
group = get_group_or_404(year)
|
||||
is_group_chair = group.is_chair(request.user)
|
||||
is_secretariat = has_role(request.user, "Secretariat")
|
||||
if not is_secretariat and not is_group_chair:
|
||||
return HttpResponseForbidden("Must be a secretariat or group chair")
|
||||
|
||||
self.state['group'] = group
|
||||
self.state['rolodex_url'] = ROLODEX_URL
|
||||
self.group = group
|
||||
|
@ -115,23 +115,22 @@ class EditMembersFormPreview(FormPreview):
|
|||
return HttpResponseRedirect(reverse('edit_members', kwargs={'year': self.year}))
|
||||
|
||||
|
||||
class EditChairForm(forms.Form):
|
||||
class EditChairForm(BaseNomcomForm, forms.Form):
|
||||
|
||||
chair = forms.EmailField(label="Chair email", required=False,
|
||||
widget=forms.TextInput(attrs={'size': '40'}))
|
||||
|
||||
fieldsets = [('Chair info', ('chair',))]
|
||||
|
||||
|
||||
class EditChairFormPreview(FormPreview):
|
||||
form_template = 'nomcom/edit_chair.html'
|
||||
preview_template = 'nomcom/edit_chair_preview.html'
|
||||
|
||||
@method_decorator(role_required("Secretariat"))
|
||||
def __call__(self, request, *args, **kwargs):
|
||||
year = kwargs['year']
|
||||
group = get_group_or_404(year)
|
||||
is_secretariat = has_role(request.user, "Secretariat")
|
||||
if not is_secretariat:
|
||||
return HttpResponseForbidden("Must be a secretariat")
|
||||
|
||||
self.state['group'] = group
|
||||
self.state['rolodex_url'] = ROLODEX_URL
|
||||
self.group = group
|
||||
|
@ -171,12 +170,17 @@ class EditChairFormPreview(FormPreview):
|
|||
return HttpResponseRedirect(reverse('edit_chair', kwargs={'year': self.year}))
|
||||
|
||||
|
||||
class EditPublicKeyForm(forms.ModelForm):
|
||||
fieldsets = [('Edit the public key of NomCom', ('public_key',))]
|
||||
class EditPublicKeyForm(BaseNomcomForm, forms.ModelForm):
|
||||
|
||||
fieldsets = [('Public Key', ('public_key',))]
|
||||
|
||||
class Meta:
|
||||
model = NomCom
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(EditPublicKeyForm, self).__init__(*args, **kwargs)
|
||||
self.fields['public_key'].required = True
|
||||
|
||||
|
||||
class NominateForm(BaseNomcomForm, forms.ModelForm):
|
||||
comments = forms.CharField(label='Comments', widget=forms.Textarea())
|
||||
|
|
|
@ -5,13 +5,15 @@ from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \
|
|||
urlpatterns = patterns('ietf.nomcom.views',
|
||||
url(r'^(?P<year>\d{4})/private/$', 'private_index', name='nomcom_private_index'),
|
||||
url(r'^(?P<year>\d{4})/private/merge/$', 'private_merge', name='nomcom_private_merge'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-publickey/$', 'edit_publickey', name='edit_publickey'),
|
||||
|
||||
url(r'^(?P<year>\d{4})/$', 'index', name='nomcom_index'),
|
||||
url(r'^(?P<year>\d{4})/requirements/$', 'requirements', name='nomcom_requirements'),
|
||||
url(r'^(?P<year>\d{4})/questionnaires/$', 'questionnaires', name='nomcom_questionnaires'),
|
||||
url(r'^(?P<year>\d{4})/comments/$', 'comments', name='nomcom_comments'),
|
||||
url(r'^(?P<year>\d{4})/nominate/$', 'nominate', name='nomcom_nominate'),
|
||||
url(r'^ajax/position-text/(?P<position_id>\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'),
|
||||
url(r'^(?P<year>\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'),
|
||||
url(r'^(?P<year>\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'),
|
||||
url(r'^(?P<year>\d{4})/edit-publickey/$', 'edit_publickey', name='edit_publickey'),
|
||||
|
||||
)
|
||||
|
|
|
@ -6,7 +6,6 @@ from django.contrib.auth.decorators import login_required
|
|||
from django.template.loader import render_to_string
|
||||
from django.utils import simplejson
|
||||
|
||||
|
||||
from ietf.nomcom.utils import get_nomcom_by_year, is_nomcom_member, \
|
||||
is_nomcom_chair, HOME_TEMPLATE
|
||||
from ietf.nomcom.decorators import member_required
|
||||
|
|
|
@ -28,9 +28,5 @@
|
|||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="submitrow">
|
||||
<input type="submit" value="Save" name="save" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -25,6 +25,11 @@ Your browser has Javascript disabled. Please enable javascript and reload the pa
|
|||
|
||||
<form id="nominateform" action="" method="post">{% csrf_token %}
|
||||
{{ form }}
|
||||
|
||||
<div class="submitrow">
|
||||
<input type="submit" value="Save" name="save" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
Loading…
Reference in a new issue