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:
parent
8ed5f785a1
commit
8c7a400683
|
@ -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)
|
||||
|
|
57
ietf/mailtrigger/migrations/0009_review_sent.py
Normal file
57
ietf/mailtrigger/migrations/0009_review_sent.py
Normal 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)
|
||||
]
|
|
@ -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.
Loading…
Reference in a new issue