Summary: Port remaining parts of nomcom to bootstrap, fix some bugs,
let the private/public feedback pages share the same template, remove the edit NomCom chair thing - there's no link to it and the Secretariat can instead use the ordinary group management tool they have available - Legacy-Id: 8721
This commit is contained in:
parent
027a976da4
commit
a3399b0bcd
|
@ -207,62 +207,6 @@ class EditMembersFormPreview(FormPreview):
|
|||
return redirect('nomcom_edit_members', year=self.year)
|
||||
|
||||
|
||||
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_nomcom_group_or_404(year)
|
||||
self.state['group'] = group
|
||||
self.state['rolodex_url'] = ROLODEX_URL
|
||||
self.group = group
|
||||
self.year = year
|
||||
|
||||
return super(EditChairFormPreview, self).__call__(request, *args, **kwargs)
|
||||
|
||||
def get_initial(self, request):
|
||||
chair = self.group.get_chair()
|
||||
if chair:
|
||||
return { "chair": chair.email.address }
|
||||
return {}
|
||||
|
||||
def process_preview(self, request, form, context):
|
||||
chair_email = form.cleaned_data['chair']
|
||||
try:
|
||||
chair_email_obj = Email.objects.get(address=chair_email)
|
||||
chair_person = chair_email_obj.person
|
||||
except Email.DoesNotExist:
|
||||
chair_person = None
|
||||
chair_email_obj = None
|
||||
chair_info = {'email': chair_email,
|
||||
'email_obj': chair_email_obj,
|
||||
'person': chair_person}
|
||||
|
||||
self.state.update({'chair_info': chair_info})
|
||||
|
||||
def done(self, request, cleaned_data):
|
||||
chair_info = self.state['chair_info']
|
||||
chair_exclude = self.group.role_set.filter(name__slug='chair').exclude(email__address=chair_info['email'])
|
||||
chair_exclude.delete()
|
||||
if chair_info['email_obj'] and chair_info['person']:
|
||||
Role.objects.get_or_create(name=RoleName.objects.get(slug="chair"),
|
||||
group=self.group,
|
||||
person=chair_info['person'],
|
||||
email=chair_info['email_obj'])
|
||||
|
||||
return redirect('nomcom_edit_chair', year=self.year)
|
||||
|
||||
|
||||
class EditNomcomForm(BaseNomcomForm, forms.ModelForm):
|
||||
|
||||
fieldsets = [('Edit nomcom settings', ('public_key', 'initial_text',
|
||||
|
|
|
@ -22,7 +22,7 @@ from ietf.nomcom.test_data import nomcom_test_data, generate_cert, check_comment
|
|||
from ietf.nomcom.models import NomineePosition, Position, Nominee, \
|
||||
NomineePositionStateName, Feedback, FeedbackTypeName, \
|
||||
Nomination
|
||||
from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, EditMembersForm
|
||||
from ietf.nomcom.forms import EditMembersForm, EditMembersFormPreview
|
||||
from ietf.nomcom.utils import get_nomcom_by_year, get_or_create_nominee
|
||||
from ietf.nomcom.management.commands.send_reminders import Command, is_time_to_send
|
||||
|
||||
|
@ -54,7 +54,6 @@ class NomcomViewsTest(TestCase):
|
|||
self.private_index_url = reverse('nomcom_private_index', kwargs={'year': self.year})
|
||||
self.private_merge_url = reverse('nomcom_private_merge', kwargs={'year': self.year})
|
||||
self.edit_members_url = reverse('nomcom_edit_members', kwargs={'year': self.year})
|
||||
self.edit_chair_url = reverse('nomcom_edit_chair', kwargs={'year': self.year})
|
||||
self.edit_nomcom_url = reverse('nomcom_edit_nomcom', kwargs={'year': self.year})
|
||||
self.private_nominate_url = reverse('nomcom_private_nominate', kwargs={'year': self.year})
|
||||
self.add_questionnaire_url = reverse('nomcom_private_questionnaire', kwargs={'year': self.year})
|
||||
|
@ -298,7 +297,7 @@ class NomcomViewsTest(TestCase):
|
|||
# preview
|
||||
self.client.post(self.edit_members_url, test_data)
|
||||
|
||||
hash = EditChairFormPreview(EditChairForm).security_hash(None, EditMembersForm(test_data))
|
||||
hash = EditMembersFormPreview(EditMembersForm).security_hash(None, EditMembersForm(test_data))
|
||||
test_data.update({'hash': hash, 'stage': 2})
|
||||
|
||||
# submit
|
||||
|
@ -323,33 +322,6 @@ class NomcomViewsTest(TestCase):
|
|||
self.check_url_status(self.private_index_url, 403)
|
||||
self.client.logout()
|
||||
|
||||
def change_chair(self, user):
|
||||
test_data = {'chair': '%s%s' % (user, EMAIL_DOMAIN),
|
||||
'stage': 1}
|
||||
# preview
|
||||
self.client.post(self.edit_chair_url, test_data)
|
||||
|
||||
hash = EditChairFormPreview(EditChairForm).security_hash(None, EditChairForm(test_data))
|
||||
test_data.update({'hash': hash, 'stage': 2})
|
||||
|
||||
# submit
|
||||
self.client.post(self.edit_chair_url, test_data)
|
||||
|
||||
def test_edit_chair_view(self):
|
||||
self.access_secretariat_url(self.edit_chair_url)
|
||||
self.change_chair(COMMUNITY_USER)
|
||||
|
||||
# check chair actions
|
||||
self.client.login(username=COMMUNITY_USER,password=COMMUNITY_USER+"+password")
|
||||
self.check_url_status(self.edit_members_url, 200)
|
||||
self.check_url_status(self.edit_nomcom_url, 200)
|
||||
self.client.logout()
|
||||
|
||||
# revert edit nomcom chair
|
||||
login_testing_unauthorized(self, SECRETARIAT_USER, self.edit_chair_url)
|
||||
self.change_chair(CHAIR_USER)
|
||||
self.client.logout()
|
||||
|
||||
def test_edit_nomcom_view(self):
|
||||
r = self.access_chair_url(self.edit_nomcom_url)
|
||||
q = PyQuery(r.content)
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
from django.conf.urls import patterns, url
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from ietf.nomcom.forms import ( EditChairForm, EditChairFormPreview,
|
||||
EditMembersForm, EditMembersFormPreview )
|
||||
from ietf.nomcom.forms import EditMembersForm, EditMembersFormPreview
|
||||
|
||||
urlpatterns = patterns('ietf.nomcom.views',
|
||||
url(r'^$', 'index'),
|
||||
|
@ -22,7 +21,6 @@ urlpatterns = patterns('ietf.nomcom.views',
|
|||
# url(r'^(?P<year>\d{4})/private/send-reminder-mail/$', RedirectView.as_view(url=reverse_lazy('nomcom_send_reminder_mail',kwargs={'year':year,'type':'accept'}))),
|
||||
url(r'^(?P<year>\d{4})/private/send-reminder-mail/(?P<type>\w+)/$', 'send_reminder_mail', name='nomcom_send_reminder_mail'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='nomcom_edit_members'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-chair/$', EditChairFormPreview(EditChairForm), name='nomcom_edit_chair'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-nomcom/$', 'edit_nomcom', name='nomcom_edit_nomcom'),
|
||||
url(r'^(?P<year>\d{4})/private/delete-nomcom/$', 'delete_nomcom', name='nomcom_delete_nomcom'),
|
||||
url(r'^deleted/$', TemplateView.as_view(template_name='nomcom/deleted.html'), name='nomcom_deleted'),
|
||||
|
|
|
@ -361,17 +361,19 @@ def feedback(request, year, public):
|
|||
positions = Position.objects.get_by_nomcom(nomcom=nomcom).opened()
|
||||
|
||||
if public:
|
||||
template = 'nomcom/public_feedback.html'
|
||||
base_template = "nomcom/nomcom_public_base.html"
|
||||
else:
|
||||
template = 'nomcom/private_feedback.html'
|
||||
base_template = "nomcom/nomcom_private_base.html"
|
||||
|
||||
if not has_publickey:
|
||||
message = ('warning', "This Nomcom is not yet accepting comments")
|
||||
return render_to_response(template,
|
||||
{'message': message,
|
||||
'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'feedback'}, RequestContext(request))
|
||||
return render(request, 'nomcom/feedback.html', {
|
||||
'message': message,
|
||||
'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'feedback',
|
||||
'base_template': base_template
|
||||
})
|
||||
|
||||
message = None
|
||||
if request.method == 'POST':
|
||||
|
@ -385,14 +387,16 @@ def feedback(request, year, public):
|
|||
form = FeedbackForm(nomcom=nomcom, user=request.user, public=public,
|
||||
position=position, nominee=nominee)
|
||||
|
||||
return render_to_response(template,
|
||||
{'form': form,
|
||||
'message': message,
|
||||
'nomcom': nomcom,
|
||||
'year': year,
|
||||
'positions': positions,
|
||||
'submit_disabled': submit_disabled,
|
||||
'selected': 'feedback'}, RequestContext(request))
|
||||
return render(request, 'nomcom/feedback.html', {
|
||||
'form': form,
|
||||
'message': message,
|
||||
'nomcom': nomcom,
|
||||
'year': year,
|
||||
'positions': positions,
|
||||
'submit_disabled': submit_disabled,
|
||||
'selected': 'feedback',
|
||||
'base_template': base_template
|
||||
})
|
||||
|
||||
|
||||
@role_required("Nomcom Chair", "Nomcom Advisor")
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
{% extends "nomcom/nomcom_base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}NomCom deleted{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>NomCom deleted</h1>
|
||||
|
||||
<p class="alert alert-success">All data about the NomCom has been removed.</p>
|
||||
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Edit {{ state.group.acronym }} chair{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Edit {{ state.group.acronym }} chair</h1>
|
||||
|
||||
{% if form.errors %}<div class="alert alert-danger">Please correct the following errors</div>{% endif %}
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form }}
|
||||
</table>
|
||||
<input type="hidden" name="{{ stage_field }}" value="1">
|
||||
<p><input type="submit" value="Preview"></p>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
|
@ -1,44 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Edit {{ state.group.acronym }} chair{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Edit {{ state.group.acronym }} chair</h1>
|
||||
|
||||
<h2>Chair info </h2>
|
||||
<p>
|
||||
{% if state.chair_info.person %}
|
||||
<ul>
|
||||
<li><strong>Email:</strong> {{ state.chair_info.email }}</li>
|
||||
<li><strong>Person name:</strong> {{ state.chair_info.person.name }}</li>
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>Person with {{ state.chair_info.email }} not exists. {% if state.rolodex_url %} Please go to <a href="{{ state.rolodex_url }}">{{ state.rolodex_url }}</a> to add this person.{% endif %}</p>
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
{% if state.chair_info.person %}
|
||||
<table>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
{% for field in form %}{{ field.as_hidden }}
|
||||
{% endfor %}
|
||||
<input type="hidden" name="{{ stage_field }}" value="2">
|
||||
<input type="hidden" name="{{ hash_field }}" value="{{ hash_value }}">
|
||||
<p><input type="submit" value="Submit"></p>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<h1>Edit it again</h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form }}
|
||||
</table>
|
||||
<input type="hidden" name="{{ stage_field }}" value="1">
|
||||
<p><input type="submit" value="Preview"></p>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "nomcom/nomcom_public_base.html" %}
|
||||
{% extends base_template %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
{% load nomcom_tags %}
|
||||
|
@ -26,9 +26,9 @@
|
|||
{% for p in positions %}
|
||||
{% if p.nomineeposition_set.accepted.not_duplicated %}
|
||||
<h4>{{ p.name }}</h4>
|
||||
<div class="btn-group-vertical btn-group-justified form-group">
|
||||
<div class="btn-group-vertical form-group">
|
||||
{% for np in p.nomineeposition_set.accepted.not_duplicated %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "nomcom_public_feedback" year %}?nominee={{np.nominee.id}}&position={{ np.position.id}}">
|
||||
<a class="btn btn-default btn-xs" href="?nominee={{np.nominee.id}}&position={{ np.position.id}}">
|
||||
{{ np.nominee }}
|
||||
{% add_num_nominations user np.position np.nominee %}
|
||||
</a>
|
|
@ -1,3 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}NomCom {{ year }}{% block subtitle %}{% endblock %}{% endblock %}
|
|
@ -1,63 +0,0 @@
|
|||
{% extends "nomcom/nomcom_private_base.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
{% load nomcom_tags %}
|
||||
|
||||
{% block subtitle %} - Feedback{% endblock %}
|
||||
|
||||
{% block nomcom_content %}
|
||||
|
||||
<p class="alert alert-info">
|
||||
First select a nominee from the list of nominees to provide input about that nominee.
|
||||
This will fill in the non-editable fields in the form.
|
||||
</p>
|
||||
|
||||
{% if message %}
|
||||
<p class="alert alert-{{ message.0 }}">{{ message.1 }}</p>
|
||||
{% endif %}
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
{% if nomcom|has_publickey %}
|
||||
<div class="row">
|
||||
<div class="col-sm-4 col-sm-push-8">
|
||||
<h3>Nominees</h3>
|
||||
|
||||
{% for p in positions %}
|
||||
{% if p.nomineeposition_set.accepted.not_duplicated %}
|
||||
<h4>{{ p.name }}</h4>
|
||||
<div class="btn-group-vertical btn-group-justified form-group">
|
||||
{% for np in p.nomineeposition_set.accepted.not_duplicated %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "nomcom_private_feedback" year %}?nominee={{np.nominee.id}}&position={{ np.position.id}}">
|
||||
{{ np.nominee }}
|
||||
{% add_num_nominations user np.position np.nominee %}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<p>
|
||||
An number after a name indicates
|
||||
that you have given comments on this nominee
|
||||
earlier. If you position the mouse pointer over
|
||||
it, you should see how many comments
|
||||
exist from you for this nominee.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-8 col-sm-pull-4">
|
||||
<h3>Provide feedback</h3>
|
||||
|
||||
<form id="feedbackform" role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<input class="btn btn-primary" type="submit" value="Save" name="save" {% if submit_disabled %}disabled="disabled"{% endif %}>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,6 +1,7 @@
|
|||
{% extends "nomcom/nomcom_private_base.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
{% load nomcom_tags %}
|
||||
|
||||
{% block subtitle %} - Provide feedback email{% endblock %}
|
||||
|
||||
|
|
Loading…
Reference in a new issue