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:
Emilio Jiménez 2013-01-02 15:33:21 +00:00
parent cca4924597
commit 8b0c358810
6 changed files with 30 additions and 24 deletions

View file

@ -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:

View file

@ -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())

View file

@ -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'),
)

View file

@ -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

View file

@ -28,9 +28,5 @@
{% endif %}
{% endfor %}
<div class="submitrow">
<input type="submit" value="Save" name="save" />
</div>
</div>

View file

@ -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 %}