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 %}