Add navigation bar for nomcom pages.
Add views and template skel for nomcom pages. Modify nomcom templates fixtures Modify initialize functions for nomcom templates Add view tests for nomcom pages. Add navset styles for horizontal items See #919 - Legacy-Id: 5152
This commit is contained in:
parent
53cde2730a
commit
e42b5015e7
|
@ -55,8 +55,8 @@ $position: Nomination position</field>
|
|||
<field to="name.dbtemplatetypename" name="type" rel="ManyToOneRel">plain</field>
|
||||
<field type="TextField" name="content">A new nomination have been received.
|
||||
|
||||
Nominator: $nominator <$nominator_email>
|
||||
Nominee: $nominee <$nominee_email>
|
||||
Nominator: $nominator ($nominator_email)
|
||||
Nominee: $nominee ($nominee_email)
|
||||
Position: $position</field>
|
||||
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
|
|
|
@ -14,13 +14,10 @@ from ietf.name.models import RoleName, FeedbackType
|
|||
from ietf.person.models import Email, Person
|
||||
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
|
||||
|
||||
ROLODEX_URL = getattr(settings, 'ROLODEX_URL', None)
|
||||
INEXISTENT_PERSON_TEMPLATE = "email/inexistent_person.txt"
|
||||
NOMINEE_TEMPLATE = "email/new_nominee.txt"
|
||||
NOMINATION_TEMPLATE = "email/new_nomination.txt"
|
||||
QUESTIONNAIRE_TEMPLATE = "position/questionnaire.txt"
|
||||
|
||||
|
||||
def get_group_or_404(year):
|
||||
|
@ -227,7 +224,7 @@ class NominateForm(forms.ModelForm):
|
|||
to_email = email.address
|
||||
context = {'nominee': email.person.name,
|
||||
'position': position}
|
||||
path = nomcom_template_path + NOMINEE_TEMPLATE
|
||||
path = nomcom_template_path + NOMINEE_EMAIL_TEMPLATE
|
||||
send_mail(None, to_email, from_email, subject, path, context)
|
||||
|
||||
# send email to nominee with questionnaire
|
||||
|
@ -251,7 +248,7 @@ class NominateForm(forms.ModelForm):
|
|||
if author:
|
||||
context.update({'nominator': author.person.name,
|
||||
'nominator_email': author.address})
|
||||
path = nomcom_template_path + NOMINATION_TEMPLATE
|
||||
path = nomcom_template_path + NOMINATION_EMAIL_TEMPLATE
|
||||
send_mail(None, to_email, from_email, subject, path, context)
|
||||
|
||||
return nomination
|
||||
|
|
|
@ -22,11 +22,11 @@ POSITIONS = {
|
|||
|
||||
def nomcom_test_data():
|
||||
group, created = Group.objects.get_or_create(name='IAB/IESG Nominating Committee 2013/2014',
|
||||
state=GroupStateName.objects.get(='active'),
|
||||
state=GroupStateName.objects.get(slug='active'),
|
||||
type=GroupTypeName.objects.get(slug='nomcom'),
|
||||
acronym='nomcom2013')
|
||||
nomcom, created = NomCom.objects.get_or_create(group=group)
|
||||
u, created = User.objects.get_or_create(username="plain")
|
||||
u, created = User.objects.get_or_create(username="plain", password="plain")
|
||||
plainman, created = Person.objects.get_or_create(
|
||||
name="Plain Man",
|
||||
ascii="Plain Man",
|
||||
|
|
|
@ -1,10 +1,52 @@
|
|||
from django.test import TestCase
|
||||
from django.db import IntegrityError
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from ietf.utils.test_utils import login_testing_unauthorized
|
||||
from ietf.nomcom.test_data import nomcom_test_data
|
||||
from ietf.nomcom.models import NomineePosition, Position, Nominee, NomineePositionState
|
||||
|
||||
|
||||
class NomcomTest(TestCase):
|
||||
"""Tests to create a new nomcom"""
|
||||
fixtures = ['names', 'nomcom_templates']
|
||||
|
||||
def check_url_status(self, url, status):
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, status)
|
||||
|
||||
def setUp(self):
|
||||
nomcom_test_data()
|
||||
self.year = 2013
|
||||
|
||||
def test_home_view(self):
|
||||
"""Verify home view"""
|
||||
url = reverse('nomcom_index', kwargs={'year': self.year})
|
||||
self.check_url_status(url, 200)
|
||||
|
||||
def test_nominate_view(self):
|
||||
"""Verify nominate view"""
|
||||
url = reverse('nomcom_nominate', kwargs={'year': self.year})
|
||||
login_testing_unauthorized(self, 'kaligula', url)
|
||||
self.check_url_status(url, 200)
|
||||
|
||||
def test_requirements_view(self):
|
||||
"""Verify requirements view"""
|
||||
url = reverse('nomcom_requirements', kwargs={'year': self.year})
|
||||
self.check_url_status(url, 200)
|
||||
|
||||
def test_questionnaires_view(self):
|
||||
"""Verify questionnaires view"""
|
||||
url = reverse('nomcom_questionnaires', kwargs={'year': self.year})
|
||||
self.check_url_status(url, 200)
|
||||
|
||||
def test_comments_view(self):
|
||||
"""Verify comments view"""
|
||||
url = reverse('nomcom_comments', kwargs={'year': self.year})
|
||||
login_testing_unauthorized(self, 'plain', url)
|
||||
self.check_url_status(url, 200)
|
||||
|
||||
|
||||
class NomineePositionStateSaveTest(TestCase):
|
||||
"""Tests for the NomineePosition save override method"""
|
||||
fixtures = ['names', 'nomcom_templates']
|
||||
|
|
|
@ -3,8 +3,14 @@ from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \
|
|||
EditMembersForm, EditMembersFormPreview
|
||||
|
||||
urlpatterns = patterns('ietf.nomcom.views',
|
||||
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})/requirement/(?P<name>[^/]+)/$', 'requirement_detail', name='nomcom_requirement_detail'),
|
||||
url(r'^(?P<year>\d{4})/questionnaire/(?P<name>[^/]+)/$', 'questionnaire_detail', name='nomcom_questionnaire_detail'),
|
||||
url(r'^(?P<year>\d{4})/comments/$', 'comments', name='nomcom_comments'),
|
||||
url(r'^(?P<year>\d{4})/nominate/$', 'nominate', name='nomcom_nominate'),
|
||||
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'),
|
||||
url(r'^(?P<year>\d{4})/nominate/$', 'nominate', name='nominate'),
|
||||
)
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from ietf.dbtemplate.models import DBTemplate
|
||||
|
||||
MAIN_NOMCOM_TEMPLATE_PATH = '/nomcom/defaults/'
|
||||
DEFAULT_NOMCOM_TEMPLATES = 'home.rst', 'email/inexistent_person.txt', 'email/new_nomination.txt', 'email/new_nominee.txt'
|
||||
DEFAULT_QUESTIONNAIRE_TEMPLATE = 'position/questionnaire.txt'
|
||||
DEFAULT_REQUIREMENTS_TEMPLATE = 'position/requirements.txt'
|
||||
QUESTIONNAIRE_TEMPLATE = 'position/questionnaire.txt'
|
||||
REQUIREMENTS_TEMPLATE = 'position/requirements.txt'
|
||||
HOME_TEMPLATE = 'home.rst'
|
||||
INEXISTENT_PERSON_TEMPLATE = 'email/inexistent_person.txt'
|
||||
NOMINEE_EMAIL_TEMPLATE = 'email/new_nominee.txt'
|
||||
NOMINATION_EMAIL_TEMPLATE = 'email/new_nomination.txt'
|
||||
DEFAULT_NOMCOM_TEMPLATES = [HOME_TEMPLATE, INEXISTENT_PERSON_TEMPLATE, NOMINATION_EMAIL_TEMPLATE, NOMINEE_EMAIL_TEMPLATE]
|
||||
|
||||
|
||||
def initialize_templates_for_group(group):
|
||||
|
@ -20,24 +26,31 @@ def initialize_templates_for_group(group):
|
|||
|
||||
|
||||
def initialize_questionnaire_for_position(position):
|
||||
questionnaire_path = MAIN_NOMCOM_TEMPLATE_PATH + DEFAULT_QUESTIONNAIRE_TEMPLATE
|
||||
questionnaire_path = MAIN_NOMCOM_TEMPLATE_PATH + QUESTIONNAIRE_TEMPLATE
|
||||
template = DBTemplate.objects.get(path=questionnaire_path)
|
||||
return DBTemplate.objects.create(
|
||||
group=position.nomcom.group,
|
||||
title=template.title + '[%s]' % position.name,
|
||||
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + DEFAULT_QUESTIONNAIRE_TEMPLATE,
|
||||
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + QUESTIONNAIRE_TEMPLATE,
|
||||
variables=template.variables,
|
||||
type_id=template.type_id,
|
||||
content=template.content)
|
||||
|
||||
|
||||
def initialize_requirements_for_position(position):
|
||||
requirements_path = MAIN_NOMCOM_TEMPLATE_PATH + DEFAULT_REQUIREMENTS_TEMPLATE
|
||||
requirements_path = MAIN_NOMCOM_TEMPLATE_PATH + REQUIREMENTS_TEMPLATE
|
||||
template = DBTemplate.objects.get(path=requirements_path)
|
||||
return DBTemplate.objects.create(
|
||||
group=position.nomcom.group,
|
||||
title=template.title + '[%s]' % position.name,
|
||||
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + DEFAULT_REQUIREMENTS_TEMPLATE,
|
||||
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + REQUIREMENTS_TEMPLATE,
|
||||
variables=template.variables,
|
||||
type_id=template.type_id,
|
||||
content=template.content)
|
||||
|
||||
|
||||
def get_nomcom_by_year(year):
|
||||
from ietf.nomcom.models import NomCom
|
||||
return get_object_or_404(NomCom,
|
||||
group__acronym__icontains=year,
|
||||
group__state__slug='active')
|
||||
|
|
|
@ -1,17 +1,88 @@
|
|||
from django.shortcuts import get_object_or_404, render_to_response
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import RequestContext
|
||||
from django.http import HttpResponseForbidden
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.template.loader import render_to_string
|
||||
|
||||
from ietf.nomcom.utils import get_nomcom_by_year, HOME_TEMPLATE
|
||||
from ietf.nomcom.forms import EditPublicKeyForm, NominateForm
|
||||
from ietf.nomcom.models import NomCom
|
||||
|
||||
|
||||
def index(request, year):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
home_template = '/nomcom/%s/%s' % (nomcom.group.acronym, HOME_TEMPLATE)
|
||||
template = render_to_string(home_template, {})
|
||||
return render_to_response('nomcom/index.html',
|
||||
{'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'index',
|
||||
'template': template}, RequestContext(request))
|
||||
|
||||
|
||||
def requirements(request, year):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
return render_to_response('nomcom/requirements.html',
|
||||
{'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'requirements'}, RequestContext(request))
|
||||
|
||||
|
||||
def questionnaires(request, year):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
return render_to_response('nomcom/questionnaires.html',
|
||||
{'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'questionnaires'}, RequestContext(request))
|
||||
|
||||
|
||||
def questionnaire_detail(request, year, name):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
return render_to_response('nomcom/questionnaire_detail.html',
|
||||
{'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'questionnaires'}, RequestContext(request))
|
||||
|
||||
|
||||
def requirement_detail(request, year, name):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
return render_to_response('nomcom/requirement_detail.html',
|
||||
{'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'requirements'}, RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def nominate(request, year):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
message = None
|
||||
if request.method == 'POST':
|
||||
form = NominateForm(data=request.POST, nomcom=nomcom, user=request.user)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
message = ('success', 'Your nomination has been registered. Thank you for the nomination.')
|
||||
else:
|
||||
form = NominateForm(nomcom=nomcom, user=request.user)
|
||||
|
||||
return render_to_response('nomcom/nominate.html',
|
||||
{'form': form,
|
||||
'message': message,
|
||||
'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'nominate'}, RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def comments(request, year):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
return render_to_response('nomcom/comments.html',
|
||||
{'nomcom': nomcom,
|
||||
'year': year,
|
||||
'selected': 'comments'}, RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def edit_publickey(request, year):
|
||||
nomcom = get_object_or_404(NomCom,
|
||||
group__acronym__icontains=year,
|
||||
group__state__slug='active')
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
is_group_chair = nomcom.group.is_chair(request.user)
|
||||
if not is_group_chair:
|
||||
return HttpResponseForbidden("Must be group chair")
|
||||
|
@ -32,22 +103,3 @@ def edit_publickey(request, year):
|
|||
{'form': form,
|
||||
'group': nomcom.group,
|
||||
'message': message}, RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def nominate(request, year):
|
||||
nomcom = get_object_or_404(NomCom,
|
||||
group__acronym__icontains=year,
|
||||
group__state__slug='active')
|
||||
message = None
|
||||
if request.method == 'POST':
|
||||
form = NominateForm(data=request.POST, nomcom=nomcom, user=request.user)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
message = ('success', 'Your nomination has been registered. Thank you for the nomination.')
|
||||
else:
|
||||
form = NominateForm(nomcom=nomcom, user=request.user)
|
||||
|
||||
return render_to_response('nomcom/nominate.html',
|
||||
{'form': form,
|
||||
'message': message}, RequestContext(request))
|
||||
|
|
3
ietf/templates/nomcom/comments.html
Normal file
3
ietf/templates/nomcom/comments.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
{% extends "nomcom/nomcom_base.html" %}
|
||||
|
||||
{% block title %} {{ nomcom }} - Provide comments{% endblock %}
|
7
ietf/templates/nomcom/index.html
Normal file
7
ietf/templates/nomcom/index.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
{% extends "nomcom/nomcom_base.html" %}
|
||||
|
||||
{% block subtitle %} - Home {% endblock %}
|
||||
|
||||
{% block nomcom_content %}
|
||||
{{ template|safe }}
|
||||
{% endblock %}
|
19
ietf/templates/nomcom/nomcom_base.html
Normal file
19
ietf/templates/nomcom/nomcom_base.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Nomcom {{ year }}{% block subtitle %}{% endblock %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>Nomcom {{ year }} Pages</h1>
|
||||
|
||||
<div class="ietf-navset">
|
||||
{% if selected == "index" %}<span class="selected">Home</span>{% else %}<a href="{% url nomcom_index year %}">Home</a>{% endif %} |
|
||||
{% if selected == "nominate" %}<span class="selected">Nominate</span>{% else %}<a href="{% url nomcom_nominate year %}">Nominate</a>{% endif %} |
|
||||
{% if selected == "requirements" %}<span class="selected">Requirements</span>{% else %}<a href="{% url nomcom_requirements year %}">Requirements</a>{% endif %} |
|
||||
{% if selected == "questionnaires" %}<span class="selected">Questionnaires</span>{% else %}<a href="{% url nomcom_questionnaires year %}">Questionnaires</a>{% endif %} |
|
||||
{% if selected == "comments" %}<span class="selected">Provide Comments</span>{% else %}<a href="{% url nomcom_comments year %}">Provide Comments</a>{% endif %}
|
||||
</div>
|
||||
|
||||
{% block nomcom_content %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -1,9 +1,9 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "nomcom/nomcom_base.html" %}
|
||||
|
||||
{% block title %}Nominate{% endblock %}
|
||||
{% block subtitle %} - Nominate{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Nominate</h1>
|
||||
{% block nomcom_content %}
|
||||
<h2>Nominate</h2>
|
||||
|
||||
{% if message %}
|
||||
<div class="info-message-{{ message.0 }}">{{ message.1 }}</div>
|
||||
|
|
6
ietf/templates/nomcom/questionnaires.html
Normal file
6
ietf/templates/nomcom/questionnaires.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% extends "nomcom/nomcom_base.html" %}
|
||||
|
||||
{% block subtitle %} - Questionnaires {% endblock %}
|
||||
|
||||
{% block nomcom_content %}
|
||||
{% endblock %}
|
6
ietf/templates/nomcom/requirements.html
Normal file
6
ietf/templates/nomcom/requirements.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% extends "nomcom/nomcom_base.html" %}
|
||||
|
||||
{% block subtitle %} - Requirements {% endblock %}
|
||||
|
||||
{% block nomcom_content %}
|
||||
{% endblock %}
|
|
@ -64,6 +64,16 @@ body { margin: 0; }
|
|||
.ietf-navbar #wgs .bd { background-color: #edf5ff; }
|
||||
.ietf-navbar #wgs > .bd { border: 0;}
|
||||
|
||||
.ietf-navset {
|
||||
background:#214197 url(/images/yui/sprite.png) repeat-x left -1400px;
|
||||
color:white;
|
||||
border:1px solid black;
|
||||
padding:4px;
|
||||
}
|
||||
.ietf-navset .selected { font-weight:bold; padding: 0 3px; }
|
||||
.ietf-navset a, .ietf-navset a:visited { color: white; padding:0 3px; }
|
||||
|
||||
|
||||
.ietf-ballot .left { background: #edf5ff; width:160px; padding-left: 10px; }
|
||||
.ietf-ballot .right { padding-left: 15px; padding-right:15px; width:610px;padding-top:0px;}
|
||||
.ietf-ballot h2.ballot_ad { background: #2647A0; color:white; padding: 2px 4px; font-size: 108%; margin-top: 0;}
|
||||
|
|
Loading…
Reference in a new issue