Skip to content

Commit 49117c1

Browse files
committed
Nominations are processed first and then the rest of feedback.
Select multiple resizable when selecting a nominee. Fixed command that gets the feedback from email to retrieve the full address on the from header. Added a "feedback pending" link in the top bar. Fixed escaped html tags when displaying comments from feedback. See ietf-tools#975 - Legacy-Id: 5781
1 parent c124006 commit 49117c1

8 files changed

Lines changed: 71 additions & 21 deletions

File tree

ietf/nomcom/forms.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,9 @@ def set_nomcom(self, nomcom, user, instances=None):
785785
if i.id == self.instance.id:
786786
self.feedback_type = i.type
787787
break
788+
a = self.fields['type']
789+
b = self.data
790+
c = self.add_prefix('type')
788791
self.feedback_type = self.feedback_type or self.fields['type'].clean(self.fields['type'].widget.value_from_datadict(self.data, self.files, self.add_prefix('type')))
789792

790793
self.initial['type'] = self.feedback_type

ietf/nomcom/templatetags/nomcom_tags.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from django import template
55
from django.conf import settings
6-
from django.template.defaultfilters import linebreaksbr
6+
from django.template.defaultfilters import linebreaksbr, force_escape
77

88
from ietf.utils.pipe import pipe
99
from ietf.ietfauth.decorators import has_role
@@ -80,5 +80,5 @@ def decrypt(string, request, year, plain=False):
8080
return '<-Encripted text [Your private key is invalid]->'
8181

8282
if not plain:
83-
return linebreaksbr(out)
84-
return out
83+
return force_escape(linebreaksbr(out))
84+
return force_escape(out)

ietf/nomcom/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,10 @@ def parse_email(text):
385385
def create_feedback_email(nomcom, msg):
386386
from ietf.nomcom.models import Feedback
387387
by, subject, body = parse_email(msg)
388-
name, addr = parseaddr(by)
388+
#name, addr = parseaddr(by)
389389

390390
feedback = Feedback(nomcom=nomcom,
391-
author=addr,
391+
author=by,
392392
subject=subject or '',
393393
comments=body)
394394
feedback.save()

ietf/nomcom/views.py

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from django.template import RequestContext
1313
from django.template.loader import render_to_string
1414
from django.utils import simplejson
15+
from django.utils.datastructures import SortedDict
1516
from django.db.models import Count
1617
from django.forms.models import modelformset_factory, inlineformset_factory
1718

@@ -327,6 +328,7 @@ def private_feedback_email(request, year):
327328
nomcom=nomcom)
328329
if form.is_valid():
329330
form.save()
331+
form = FeedbackEmailForm(nomcom=nomcom)
330332
message = ('success', 'The feedback email has been registered.')
331333

332334
return render_to_response(template,
@@ -442,6 +444,7 @@ def view_feedback(request, year):
442444
@nomcom_private_key_required
443445
def view_feedback_pending(request, year):
444446
nomcom = get_nomcom_by_year(year)
447+
extra_ids = None
445448
message = None
446449
for message in get_messages(request):
447450
message = ('success', message.message)
@@ -468,33 +471,56 @@ def view_feedback_pending(request, year):
468471
success(request, 'Feedback saved')
469472
return HttpResponseRedirect(reverse('nomcom_view_feedback_pending', None, args=(year, )))
470473
elif request.method == 'POST' and request.POST.get('end'):
474+
extra_ids = request.POST.get('extra_ids', None)
471475
extra_step = True
472476
formset = FullFeedbackFormSet(request.POST)
473477
for form in formset.forms:
474478
form.set_nomcom(nomcom, request.user)
475479
if formset.is_valid():
476480
formset.save()
477-
success(request, 'Feedback saved')
478-
return HttpResponseRedirect(reverse('nomcom_view_feedback_pending', None, args=(year, )))
481+
if extra_ids:
482+
extra = []
483+
for key in extra_ids.split(','):
484+
id, pk_type = key.split(':')
485+
feedback = Feedback.objects.get(id=id)
486+
feedback.type_id = pk_type
487+
extra.append(feedback)
488+
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in extra]))
489+
for form in formset.forms:
490+
form.set_nomcom(nomcom, request.user, extra)
491+
extra_ids = None
492+
else:
493+
success(request, 'Feedback saved')
494+
return HttpResponseRedirect(reverse('nomcom_view_feedback_pending', None, args=(year, )))
479495
elif request.method == 'POST':
480496
formset = FeedbackFormSet(request.POST)
481497
for form in formset.forms:
482498
form.set_nomcom(nomcom, request.user)
483499
if formset.is_valid():
484500
extra = []
501+
nominations = []
485502
moved = 0
486503
for form in formset.forms:
487504
if form.instance.type and form.instance.type.slug in settings.NOMINEE_FEEDBACK_TYPES:
488-
extra.append(form.instance)
505+
if form.instance.type.slug == 'nomina':
506+
nominations.append(form.instance)
507+
else:
508+
extra.append(form.instance)
489509
else:
490510
if form.instance.type:
491511
moved += 1
492512
form.save()
493-
if extra:
513+
if extra or nominations:
494514
extra_step = True
495-
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in extra]))
496-
for form in formset.forms:
497-
form.set_nomcom(nomcom, request.user, extra)
515+
if nominations:
516+
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in nominations]))
517+
for form in formset.forms:
518+
form.set_nomcom(nomcom, request.user, nominations)
519+
extra_ids = ','.join(['%s:%s' % (i.id, i.type.pk) for i in extra])
520+
else:
521+
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in extra]))
522+
for form in formset.forms:
523+
form.set_nomcom(nomcom, request.user, extra)
498524
if moved:
499525
message = ('success', '%s messages classified. You must enter more information for the following feedback.' % moved)
500526
else:
@@ -504,13 +530,24 @@ def view_feedback_pending(request, year):
504530
formset = FeedbackFormSet(queryset=feedbacks)
505531
for form in formset.forms:
506532
form.set_nomcom(nomcom, request.user)
533+
type_dict = SortedDict({})
534+
for t in FeedbackType.objects.all().order_by('pk'):
535+
rest = t.name
536+
slug = rest[0]
537+
rest = rest[1:]
538+
while slug in type_dict and rest:
539+
slug = rest[0]
540+
rest = rest[1]
541+
type_dict[slug] = t
507542
return render_to_response('nomcom/view_feedback_pending.html',
508543
{'year': year,
509-
'selected': 'view_feedback',
544+
'selected': 'feedback_pending',
510545
'formset': formset,
511546
'message': message,
512547
'extra_step': extra_step,
513548
'default_type': default_type,
549+
'type_dict': type_dict,
550+
'extra_ids': extra_ids,
514551
'types': FeedbackType.objects.all().order_by('pk'),
515552
'nomcom': nomcom}, RequestContext(request))
516553

ietf/templates/nomcom/inc.feedback_pending_header.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
{% if extra_step %}
55
<th>Type</th>
66
{% else %}
7-
<th>Unclassified</th>{% for t in types %}<th>{{ t }}</th>{% endfor %}
7+
<th style="text-align: center;">U</th>{% for t in type_dict.keys %}<th style="text-align: center;">{{ t }}</th>{% endfor %}
88
{% endif %}
99
<th>Author</th>
1010
<th>Subject</th>

ietf/templates/nomcom/nomcom_private_base.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ <h1>Nomcom {{ year }} Private Area</h1>
1616
{% if selected == "view_feedback" %}<span class="selected">View comments</span>{% else %}<a href="{% url nomcom_view_feedback year %}">View comments</a>{% endif %} |
1717
{% if selected == "private_key" %}<span class="selected">Private key</span>{% else %}<a href="{% url nomcom_private_key year %}">Private key</a>{% endif %}
1818
{% if user|is_chair:year %} |
19+
{% if selected == "feedback_pending" %}<span class="selected">Feedback Pending</span>{% else %}<a href="{% url nomcom_view_feedback_pending year %}">Feedback Pending</a>{% endif %} |
1920
{% if selected == "feedback_email" %}<span class="selected">Provide Email Feedback</span>{% else %}<a href="{% url nomcom_private_feedback_email year %}">Provide Email Feedback</a>{% endif %} |
2021
{% if selected == "merge" %}<span class="selected">Merge nominee email addr</span>{% else %}<a href="{% url nomcom_private_merge year %}">Merge nominee email addr</a>{% endif %} |
2122
{% if selected == "send_reminder_mail" %}<span class="selected">Send Reminder Mail</span>{% else %}<a href="{% url nomcom_send_reminder_mail year %}">Send reminder mail</a>{% endif %} |

ietf/templates/nomcom/view_feedback.html

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66

77
{% block nomcom_content %}
88

9-
{% if user|is_chair:year %}
10-
<p><a href="{% url nomcom_view_feedback_pending year %}">Feedback pending</a></p>
11-
{% endif %}
12-
139
<h2>Feedback related to Nominees</h2>
1410

1511
<table class="ietf-table ietf-doctable">

ietf/templates/nomcom/view_feedback_pending.html

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,14 @@
55

66
{% block subtitle %} - Feeback pending{% endblock %}
77

8-
{% block scripts %}
8+
{% block pagehead %}
9+
<link rel="stylesheet" type="text/css" href="/css/jquery-ui-themes/jquery-ui-1.8.11.custom.css"></link>
10+
{% endblock %}
11+
12+
{% block js %}
913
{{ block.super }}
14+
<script type="text/javascript" src="/js/jquery-ui-1.8.11.custom.min.js"></script>
15+
<script type="text/javascript">
1016
(function($) {
1117
$(document).ready(function() {
1218
$('.toggle .trigger').click(function() {
@@ -19,14 +25,14 @@
1925
}
2026
return false;
2127
});
28+
$('#feedbackformset select[multiple=multiple]').resizable();
2229
});
2330
})(jQuery);
31+
</script>
2432
{% endblock %}
2533

2634
{% block nomcom_content %}
2735

28-
<p>Back to <a href="{% url nomcom_view_feedback year %}">feedback index</a></p>
29-
3036
<h2>Feedback pending from email list</h2>
3137

3238
{% if message %}
@@ -40,6 +46,7 @@ <h2>Feedback pending from email list</h2>
4046

4147
<div>
4248
<form id="feedbackformset" action="" method="post">{% csrf_token %}
49+
{% if extra_ids %}<input type="hidden" name="extra_ids" value="{{ extra_ids }}" />{% endif %}
4350
<div class="sumit-row">
4451
{% if extra_step %}
4552
<input type="submit" value="Save feedback" name="end" />
@@ -49,6 +56,12 @@ <h2>Feedback pending from email list</h2>
4956
{% if default_type %}<input type="submit" name="move_to_default" value="Move all unclassified feedback to {{ default_type }}" />{% endif %}
5057
{% endif %}
5158
</div>
59+
{% if not extra_step %}
60+
<div class="legend" style="margin-bottom: 1em;">
61+
<h4 style="margin-bottom: 0px;">Feedback types</h4>
62+
(U) Unclassified, {% for legend, t in type_dict.items %}({{ legend }}) {{ t.name }}{% if not forloop.last %},{% endif %} {% endfor %}
63+
</div>
64+
{% endif %}
5265
{{ formset.management_form }}
5366
<table class="ietf-table">
5467
{% include "nomcom/inc.feedback_pending_header.html" %}

0 commit comments

Comments
 (0)