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 #975
 - Legacy-Id: 5781
This commit is contained in:
Emilio A. Sánchez López 2013-06-10 10:42:11 +00:00
parent c12400641a
commit 49117c1622
8 changed files with 71 additions and 21 deletions

View file

@ -785,6 +785,9 @@ class MutableFeedbackForm(forms.ModelForm):
if i.id == self.instance.id:
self.feedback_type = i.type
break
a = self.fields['type']
b = self.data
c = self.add_prefix('type')
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')))
self.initial['type'] = self.feedback_type

View file

@ -3,7 +3,7 @@ import tempfile
from django import template
from django.conf import settings
from django.template.defaultfilters import linebreaksbr
from django.template.defaultfilters import linebreaksbr, force_escape
from ietf.utils.pipe import pipe
from ietf.ietfauth.decorators import has_role
@ -80,5 +80,5 @@ def decrypt(string, request, year, plain=False):
return '<-Encripted text [Your private key is invalid]->'
if not plain:
return linebreaksbr(out)
return out
return force_escape(linebreaksbr(out))
return force_escape(out)

View file

@ -385,10 +385,10 @@ def parse_email(text):
def create_feedback_email(nomcom, msg):
from ietf.nomcom.models import Feedback
by, subject, body = parse_email(msg)
name, addr = parseaddr(by)
#name, addr = parseaddr(by)
feedback = Feedback(nomcom=nomcom,
author=addr,
author=by,
subject=subject or '',
comments=body)
feedback.save()

View file

@ -12,6 +12,7 @@ from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.template.loader import render_to_string
from django.utils import simplejson
from django.utils.datastructures import SortedDict
from django.db.models import Count
from django.forms.models import modelformset_factory, inlineformset_factory
@ -327,6 +328,7 @@ def private_feedback_email(request, year):
nomcom=nomcom)
if form.is_valid():
form.save()
form = FeedbackEmailForm(nomcom=nomcom)
message = ('success', 'The feedback email has been registered.')
return render_to_response(template,
@ -442,6 +444,7 @@ def view_feedback(request, year):
@nomcom_private_key_required
def view_feedback_pending(request, year):
nomcom = get_nomcom_by_year(year)
extra_ids = None
message = None
for message in get_messages(request):
message = ('success', message.message)
@ -468,33 +471,56 @@ def view_feedback_pending(request, year):
success(request, 'Feedback saved')
return HttpResponseRedirect(reverse('nomcom_view_feedback_pending', None, args=(year, )))
elif request.method == 'POST' and request.POST.get('end'):
extra_ids = request.POST.get('extra_ids', None)
extra_step = True
formset = FullFeedbackFormSet(request.POST)
for form in formset.forms:
form.set_nomcom(nomcom, request.user)
if formset.is_valid():
formset.save()
success(request, 'Feedback saved')
return HttpResponseRedirect(reverse('nomcom_view_feedback_pending', None, args=(year, )))
if extra_ids:
extra = []
for key in extra_ids.split(','):
id, pk_type = key.split(':')
feedback = Feedback.objects.get(id=id)
feedback.type_id = pk_type
extra.append(feedback)
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in extra]))
for form in formset.forms:
form.set_nomcom(nomcom, request.user, extra)
extra_ids = None
else:
success(request, 'Feedback saved')
return HttpResponseRedirect(reverse('nomcom_view_feedback_pending', None, args=(year, )))
elif request.method == 'POST':
formset = FeedbackFormSet(request.POST)
for form in formset.forms:
form.set_nomcom(nomcom, request.user)
if formset.is_valid():
extra = []
nominations = []
moved = 0
for form in formset.forms:
if form.instance.type and form.instance.type.slug in settings.NOMINEE_FEEDBACK_TYPES:
extra.append(form.instance)
if form.instance.type.slug == 'nomina':
nominations.append(form.instance)
else:
extra.append(form.instance)
else:
if form.instance.type:
moved += 1
form.save()
if extra:
if extra or nominations:
extra_step = True
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in extra]))
for form in formset.forms:
form.set_nomcom(nomcom, request.user, extra)
if nominations:
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in nominations]))
for form in formset.forms:
form.set_nomcom(nomcom, request.user, nominations)
extra_ids = ','.join(['%s:%s' % (i.id, i.type.pk) for i in extra])
else:
formset = FullFeedbackFormSet(queryset=Feedback.objects.filter(id__in=[i.id for i in extra]))
for form in formset.forms:
form.set_nomcom(nomcom, request.user, extra)
if moved:
message = ('success', '%s messages classified. You must enter more information for the following feedback.' % moved)
else:
@ -504,13 +530,24 @@ def view_feedback_pending(request, year):
formset = FeedbackFormSet(queryset=feedbacks)
for form in formset.forms:
form.set_nomcom(nomcom, request.user)
type_dict = SortedDict({})
for t in FeedbackType.objects.all().order_by('pk'):
rest = t.name
slug = rest[0]
rest = rest[1:]
while slug in type_dict and rest:
slug = rest[0]
rest = rest[1]
type_dict[slug] = t
return render_to_response('nomcom/view_feedback_pending.html',
{'year': year,
'selected': 'view_feedback',
'selected': 'feedback_pending',
'formset': formset,
'message': message,
'extra_step': extra_step,
'default_type': default_type,
'type_dict': type_dict,
'extra_ids': extra_ids,
'types': FeedbackType.objects.all().order_by('pk'),
'nomcom': nomcom}, RequestContext(request))

View file

@ -4,7 +4,7 @@
{% if extra_step %}
<th>Type</th>
{% else %}
<th>Unclassified</th>{% for t in types %}<th>{{ t }}</th>{% endfor %}
<th style="text-align: center;">U</th>{% for t in type_dict.keys %}<th style="text-align: center;">{{ t }}</th>{% endfor %}
{% endif %}
<th>Author</th>
<th>Subject</th>

View file

@ -16,6 +16,7 @@
{% if selected == "view_feedback" %}<span class="selected">View comments</span>{% else %}<a href="{% url nomcom_view_feedback year %}">View comments</a>{% endif %} |
{% if selected == "private_key" %}<span class="selected">Private key</span>{% else %}<a href="{% url nomcom_private_key year %}">Private key</a>{% endif %}
{% if user|is_chair:year %} |
{% if selected == "feedback_pending" %}<span class="selected">Feedback Pending</span>{% else %}<a href="{% url nomcom_view_feedback_pending year %}">Feedback Pending</a>{% endif %} |
{% 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 %} |
{% 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 %} |
{% 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 %} |

View file

@ -6,10 +6,6 @@
{% block nomcom_content %}
{% if user|is_chair:year %}
<p><a href="{% url nomcom_view_feedback_pending year %}">Feedback pending</a></p>
{% endif %}
<h2>Feedback related to Nominees</h2>
<table class="ietf-table ietf-doctable">

View file

@ -5,8 +5,14 @@
{% block subtitle %} - Feeback pending{% endblock %}
{% block scripts %}
{% block pagehead %}
<link rel="stylesheet" type="text/css" href="/css/jquery-ui-themes/jquery-ui-1.8.11.custom.css"></link>
{% endblock %}
{% block js %}
{{ block.super }}
<script type="text/javascript" src="/js/jquery-ui-1.8.11.custom.min.js"></script>
<script type="text/javascript">
(function($) {
$(document).ready(function() {
$('.toggle .trigger').click(function() {
@ -19,14 +25,14 @@
}
return false;
});
$('#feedbackformset select[multiple=multiple]').resizable();
});
})(jQuery);
</script>
{% endblock %}
{% block nomcom_content %}
<p>Back to <a href="{% url nomcom_view_feedback year %}">feedback index</a></p>
<h2>Feedback pending from email list</h2>
{% if message %}
@ -40,6 +46,7 @@
<div>
<form id="feedbackformset" action="" method="post">{% csrf_token %}
{% if extra_ids %}<input type="hidden" name="extra_ids" value="{{ extra_ids }}" />{% endif %}
<div class="sumit-row">
{% if extra_step %}
<input type="submit" value="Save feedback" name="end" />
@ -49,6 +56,12 @@
{% if default_type %}<input type="submit" name="move_to_default" value="Move all unclassified feedback to {{ default_type }}" />{% endif %}
{% endif %}
</div>
{% if not extra_step %}
<div class="legend" style="margin-bottom: 1em;">
<h4 style="margin-bottom: 0px;">Feedback types</h4>
(U) Unclassified, {% for legend, t in type_dict.items %}({{ legend }}) {{ t.name }}{% if not forloop.last %},{% endif %} {% endfor %}
</div>
{% endif %}
{{ formset.management_form }}
<table class="ietf-table">
{% include "nomcom/inc.feedback_pending_header.html" %}