From 8b0c3588104ca91d9fa3e98d8ed36ce91157fcd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Jim=C3=A9nez?= Date: Wed, 2 Jan 2013 15:33:21 +0000 Subject: [PATCH] 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 --- ietf/ietfauth/decorators.py | 2 +- ietf/nomcom/forms.py | 34 +++++++++++++++------------ ietf/nomcom/urls.py | 8 ++++--- ietf/nomcom/views.py | 1 - ietf/templates/nomcom/nomcomform.html | 4 ---- ietf/templates/nomcom/nominate.html | 5 ++++ 6 files changed, 30 insertions(+), 24 deletions(-) diff --git a/ietf/ietfauth/decorators.py b/ietf/ietfauth/decorators.py index 965ea1f14..11a123c85 100644 --- a/ietf/ietfauth/decorators.py +++ b/ietf/ietfauth/decorators.py @@ -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: diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index 83a31c09b..b800b6b85 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -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()) diff --git a/ietf/nomcom/urls.py b/ietf/nomcom/urls.py index 17947ae7f..619bf609b 100644 --- a/ietf/nomcom/urls.py +++ b/ietf/nomcom/urls.py @@ -5,13 +5,15 @@ from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \ urlpatterns = patterns('ietf.nomcom.views', url(r'^(?P\d{4})/private/$', 'private_index', name='nomcom_private_index'), url(r'^(?P\d{4})/private/merge/$', 'private_merge', name='nomcom_private_merge'), + url(r'^(?P\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'), + url(r'^(?P\d{4})/private/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'), + url(r'^(?P\d{4})/private/edit-publickey/$', 'edit_publickey', name='edit_publickey'), + url(r'^(?P\d{4})/$', 'index', name='nomcom_index'), url(r'^(?P\d{4})/requirements/$', 'requirements', name='nomcom_requirements'), url(r'^(?P\d{4})/questionnaires/$', 'questionnaires', name='nomcom_questionnaires'), url(r'^(?P\d{4})/comments/$', 'comments', name='nomcom_comments'), url(r'^(?P\d{4})/nominate/$', 'nominate', name='nomcom_nominate'), url(r'^ajax/position-text/(?P\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'), - url(r'^(?P\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'), - url(r'^(?P\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'), - url(r'^(?P\d{4})/edit-publickey/$', 'edit_publickey', name='edit_publickey'), + ) diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index ebbfab7f7..a9325bd6b 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -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 diff --git a/ietf/templates/nomcom/nomcomform.html b/ietf/templates/nomcom/nomcomform.html index a8f8d410a..e04c7a8a2 100644 --- a/ietf/templates/nomcom/nomcomform.html +++ b/ietf/templates/nomcom/nomcomform.html @@ -28,9 +28,5 @@ {% endif %} {% endfor %} -
- -
- diff --git a/ietf/templates/nomcom/nominate.html b/ietf/templates/nomcom/nominate.html index 2310f9cf5..1021aa754 100644 --- a/ietf/templates/nomcom/nominate.html +++ b/ietf/templates/nomcom/nominate.html @@ -25,6 +25,11 @@ Your browser has Javascript disabled. Please enable javascript and reload the pa
{% csrf_token %} {{ form }} + +
+ +
+
{% endblock %} \ No newline at end of file