Merged in [12486] from rjsparks@nostrum.com:

Fill in CC list defaults for review completion mail. Make the mail come from the reviewer instead of the default secretariat address. Fixes #2078 and #2054.
 - Legacy-Id: 12488
Note: SVN reference [12486] has been migrated to Git commit 062707f51b351e1fcd5d682b23af8c7feeb2442d
This commit is contained in:
Henrik Levkowetz 2016-12-08 23:44:50 +00:00
parent 8ed5f785a1
commit 8c7a400683
4 changed files with 115 additions and 3 deletions

View file

@ -1,5 +1,7 @@
import datetime, os, email.utils
import debug # pyflakes:ignore
from django.http import HttpResponseForbidden, JsonResponse
from django.shortcuts import render, get_object_or_404, redirect
from django import forms
@ -26,6 +28,8 @@ from ietf.utils.fields import DatepickerDateField
from ietf.utils.text import strip_prefix, xslugify
from ietf.utils.textupload import get_cleaned_text_file_content
from ietf.utils.mail import send_mail
from ietf.mailtrigger.utils import gather_address_lists
from ietf.utils.fields import MultiEmailField
def clean_doc_revision(doc, rev):
if rev:
@ -333,7 +337,7 @@ class CompleteReviewForm(forms.Form):
review_content = forms.CharField(widget=forms.Textarea, required=False)
completion_date = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={ "autoclose": "1" }, initial=datetime.date.today, help_text="Date of announcement of the results of this review")
completion_time = forms.TimeField(widget=forms.HiddenInput, initial=datetime.time.min)
cc = forms.CharField(required=False, help_text="Email addresses to send to in addition to the review team list")
cc = MultiEmailField(required=False, help_text="Email addresses to send to in addition to the review team list")
def __init__(self, review_req, *args, **kwargs):
self.review_req = review_req
@ -414,6 +418,8 @@ def complete_review(request, name, request_id):
if not (is_reviewer or can_manage_request):
return HttpResponseForbidden("You do not have permission to perform this action")
(to, cc) = gather_address_lists('review_completed',review_req = review_req)
if request.method == "POST":
form = CompleteReviewForm(review_req, request.POST, request.FILES)
if form.is_valid():
@ -531,7 +537,8 @@ def complete_review(request, name, request_id):
if need_to_email_review:
# email the review
subject = "{} of {}-{}".format("Partial review" if review_req.state_id == "part-completed" else "Review", review_req.doc.name, review_req.reviewed_rev)
msg = send_mail(request, [(review_req.team.name, review_req.team.list_email)], None,
msg = send_mail(request, to,
(request.user.person.plain_name(),request.user.person.email_address()),
subject,
"review/completed_review.txt", {
"review_req": review_req,
@ -548,7 +555,8 @@ def complete_review(request, name, request_id):
else:
form = CompleteReviewForm(review_req, initial={
"reviewed_rev": review_req.reviewed_rev,
"result": review_req.result_id
"result": review_req.result_id,
"cc": ", ".join(cc),
})
mail_archive_query_urls = mailarch.construct_query_urls(review_req)

View file

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
def forward(apps, schema_editor):
MailTrigger=apps.get_model('mailtrigger','MailTrigger')
Recipient=apps.get_model('mailtrigger','Recipient')
Recipient.objects.create(
slug='review_team_mail_list',
desc="The review team's email list",
template="{{review_req.team.list_email}}"
)
Recipient.objects.create(
slug='review_doc_group_mail_list',
desc="The working group list for the document being reviewed",
template="{{review_req.doc.group.list_email}}"
)
Recipient.objects.create(
slug='review_doc_all_parties',
desc="The .all alias for the document being reviewed",
template="{% if review_req.doc.type_id == 'draft' %}<{{review_req.doc.name}}.all@ietf.org>{% endif %}"
)
Recipient.objects.create(
slug='ietf_general',
desc="The IETF general discussion list",
template="ietf@ietf.org"
)
annc = MailTrigger.objects.create(
slug='review_completed',
desc='Recipients when an review is completed',
)
annc.to = Recipient.objects.filter(slug__in=['review_team_mail_list',])
annc.cc = Recipient.objects.filter(slug__in=['review_doc_all_parties','review_doc_group_mail_list','ietf_general'])
def reverse(apps, schema_editor):
MailTrigger=apps.get_model('mailtrigger','MailTrigger')
Recipient=apps.get_model('mailtrigger','Recipient')
MailTrigger.objects.filter(slug='review_completed').delete()
Recipient.objects.filter(slug__in=['review_team_mail_list','review_doc_group_mail_list','review_doc_all_parties','ietf_general']).delete()
class Migration(migrations.Migration):
dependencies = [
('mailtrigger', '0008_review_summary_triggers'),
]
operations = [
migrations.RunPython(forward, reverse)
]

View file

@ -5131,6 +5131,14 @@
"model": "mailtrigger.recipient",
"pk": "ietf_announce"
},
{
"fields": {
"template": "ietf@ietf.org",
"desc": "The IETF general discussion list"
},
"model": "mailtrigger.recipient",
"pk": "ietf_general"
},
{
"fields": {
"template": "<ietf-secretariat-reply@ietf.org>",
@ -5275,6 +5283,30 @@
"model": "mailtrigger.recipient",
"pk": "nominee"
},
{
"fields": {
"template": "{% if review_req.doc.type_id == 'draft' %}<{{review_req.doc.name}}.all@ietf.org>{% endif %}",
"desc": "The .all alias for the document being reviewed"
},
"model": "mailtrigger.recipient",
"pk": "review_doc_all_parties"
},
{
"fields": {
"template": "{{review_req.doc.group.list_email}}",
"desc": "The working group list for the document being reviewed"
},
"model": "mailtrigger.recipient",
"pk": "review_doc_group_mail_list"
},
{
"fields": {
"template": "{{review_req.team.list_email}}",
"desc": "The review team's email list"
},
"model": "mailtrigger.recipient",
"pk": "review_team_mail_list"
},
{
"fields": {
"template": "<rfc-editor@rfc-editor.org>",
@ -6230,6 +6262,21 @@
"model": "mailtrigger.mailtrigger",
"pk": "review_assignments_summarized"
},
{
"fields": {
"cc": [
"ietf_general",
"review_doc_all_parties",
"review_doc_group_mail_list"
],
"to": [
"review_team_mail_list"
],
"desc": "Recipients when an review is completed"
},
"model": "mailtrigger.mailtrigger",
"pk": "review_completed"
},
{
"fields": {
"cc": [

Binary file not shown.