diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index b154ae35b..d47447708 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -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 diff --git a/ietf/nomcom/templatetags/nomcom_tags.py b/ietf/nomcom/templatetags/nomcom_tags.py index 3e717b870..64126bc17 100644 --- a/ietf/nomcom/templatetags/nomcom_tags.py +++ b/ietf/nomcom/templatetags/nomcom_tags.py @@ -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) diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index 830f316d2..8f16c82c5 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -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() diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index 7ddcc7185..4ca0c5853 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -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)) diff --git a/ietf/templates/nomcom/inc.feedback_pending_header.html b/ietf/templates/nomcom/inc.feedback_pending_header.html index 64dda04d4..f9f58734f 100644 --- a/ietf/templates/nomcom/inc.feedback_pending_header.html +++ b/ietf/templates/nomcom/inc.feedback_pending_header.html @@ -4,7 +4,7 @@ {% if extra_step %} Type {% else %} - Unclassified{% for t in types %}{{ t }}{% endfor %} + U{% for t in type_dict.keys %}{{ t }}{% endfor %} {% endif %} Author Subject diff --git a/ietf/templates/nomcom/nomcom_private_base.html b/ietf/templates/nomcom/nomcom_private_base.html index c2c90cc23..cd3232ba2 100644 --- a/ietf/templates/nomcom/nomcom_private_base.html +++ b/ietf/templates/nomcom/nomcom_private_base.html @@ -16,6 +16,7 @@ {% if selected == "view_feedback" %}View comments{% else %}View comments{% endif %} | {% if selected == "private_key" %}Private key{% else %}Private key{% endif %} {% if user|is_chair:year %} | + {% if selected == "feedback_pending" %}Feedback Pending{% else %}Feedback Pending{% endif %} | {% if selected == "feedback_email" %}Provide Email Feedback{% else %}Provide Email Feedback{% endif %} | {% if selected == "merge" %}Merge nominee email addr{% else %}Merge nominee email addr{% endif %} | {% if selected == "send_reminder_mail" %}Send Reminder Mail{% else %}Send reminder mail{% endif %} | diff --git a/ietf/templates/nomcom/view_feedback.html b/ietf/templates/nomcom/view_feedback.html index 2cb15dfb4..7cafdcb4a 100644 --- a/ietf/templates/nomcom/view_feedback.html +++ b/ietf/templates/nomcom/view_feedback.html @@ -6,10 +6,6 @@ {% block nomcom_content %} -{% if user|is_chair:year %} -

Feedback pending

-{% endif %} -

Feedback related to Nominees

diff --git a/ietf/templates/nomcom/view_feedback_pending.html b/ietf/templates/nomcom/view_feedback_pending.html index c5af75899..ecf20d436 100644 --- a/ietf/templates/nomcom/view_feedback_pending.html +++ b/ietf/templates/nomcom/view_feedback_pending.html @@ -5,8 +5,14 @@ {% block subtitle %} - Feeback pending{% endblock %} -{% block scripts %} +{% block pagehead %} + +{% endblock %} + +{% block js %} {{ block.super }} + + {% endblock %} {% block nomcom_content %} -

Back to feedback index

-

Feedback pending from email list

{% if message %} @@ -40,6 +46,7 @@
{% csrf_token %} + {% if extra_ids %}{% endif %}
{% if extra_step %} @@ -49,6 +56,12 @@ {% if default_type %}{% endif %} {% endif %}
+ {% if not extra_step %} +
+

Feedback types

+ (U) Unclassified, {% for legend, t in type_dict.items %}({{ legend }}) {{ t.name }}{% if not forloop.last %},{% endif %} {% endfor %} +
+ {% endif %} {{ formset.management_form }}
{% include "nomcom/inc.feedback_pending_header.html" %}