Skip to content

Commit dc95462

Browse files
author
Sasha Romijn
committed
Fix ietf-tools#2061 - Improve "complete review" workflow for secretaries.
When a secretary completes a review, "link to a review message" is automatically selected, and the first non-reply mail is used to fill in the review details. The secretary can still modify all details. The order of fields for secretaries is also modified to fit this workflow. All cases where "link to review message" is used, by reviewers or secretaries, now attempt to fill in the "reviewed version" if found in the email subject. Commit ready for merge. - Legacy-Id: 17070
1 parent 65d8415 commit dc95462

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

ietf/doc/tests_review.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,13 +596,15 @@ def test_search_mail_archive(self):
596596
self.assertEqual(messages[0]["url"], "https://www.example.com/testmessage")
597597
self.assertTrue("John Doe" in messages[0]["content"])
598598
self.assertEqual(messages[0]["subject"], "Review of {}-01".format(review_req.doc.name))
599+
self.assertEqual(messages[0]["revision_guess"], "01")
599600
self.assertEqual(messages[0]["splitfrom"], ["John Doe", "johndoe@example.com"])
600601
self.assertEqual(messages[0]["utcdate"][0], today.isoformat())
601602

602603
self.assertEqual(messages[1]["url"], "https://www.example.com/testmessage2")
603604
self.assertTrue("Looks OK" in messages[1]["content"])
604605
self.assertTrue("<html>" not in messages[1]["content"])
605606
self.assertEqual(messages[1]["subject"], "Review of {}".format(review_req.doc.name))
607+
self.assertFalse('revision_guess' in messages[1])
606608
self.assertEqual(messages[1]["splitfrom"], ["John Doe II", "johndoe2@example.com"])
607609
self.assertEqual(messages[1]["utcdate"][0], "")
608610

ietf/doc/views_review.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,11 @@ def __init__(self, assignment, doc, team, is_reviewer, *args, **kwargs):
531531

532532
revising_review = assignment.state_id not in ["assigned", "accepted"] if assignment else False
533533

534+
if not is_reviewer:
535+
new_field_order = ['review_submission', 'review_url', 'review_file', 'review_content']
536+
new_field_order += [f for f in self.fields.keys() if f not in new_field_order]
537+
self.order_fields(new_field_order)
538+
534539
if not revising_review:
535540
self.fields["state"].choices = [
536541
(slug, "{} - extra reviewer is to be assigned".format(label)) if slug == "part-completed" else (slug, label)
@@ -556,6 +561,7 @@ def __init__(self, assignment, doc, team, is_reviewer, *args, **kwargs):
556561
# If it is users own review, then default to latest version
557562
if is_reviewer:
558563
kwargs["initial"]["reviewed_rev"] = last_version
564+
559565

560566
self.fields["reviewed_rev"].help_text = mark_safe(
561567
" ".join("<a class=\"rev label label-default {0}\" title=\"{2:%Y-%m-%d}\">{1}</a>".format(reviewed_rev_class[i], *r)
@@ -887,6 +893,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
887893
'revising_review': revising_review,
888894
'review_to': to,
889895
'review_cc': cc,
896+
'is_reviewer': is_reviewer,
890897
})
891898

892899
def search_mail_archive(request, name, acronym=None, assignment_id=None):
@@ -912,6 +919,12 @@ def search_mail_archive(request, name, acronym=None, assignment_id=None):
912919

913920
try:
914921
res["messages"] = mailarch.retrieve_messages(res["query_data_url"])[:MAX_RESULTS]
922+
for message in res["messages"]:
923+
try:
924+
revision_guess = message["subject"].split(name)[1].split('-')[1]
925+
message["revision_guess"] = revision_guess if revision_guess.isnumeric() else None
926+
except IndexError:
927+
pass
915928
except KeyError as e:
916929
res["error"] = "No results found (%s)" % str(e)
917930
except Exception as e:

ietf/static/ietf/js/complete-review.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ $(document).ready(function () {
4747
if (!err && (!data.messages || !data.messages.length))
4848
err = "No messages matching document name found in archive";
4949

50+
var non_reply_row = null;
5051
if (err) {
5152
var errorDiv = mailArchiveSearch.find(".error");
5253
errorDiv.removeClass("hidden");
@@ -74,7 +75,15 @@ $(document).ready(function () {
7475
row.data("content", msg.content);
7576
row.data("date", msg.utcdate[0]);
7677
row.data("time", msg.utcdate[1]);
78+
row.data("revision_guess", msg.revision_guess);
7779
results.append(row);
80+
if (msg.subject.toUpperCase().substr(0, 3) !== 'RE:') {
81+
non_reply_row = row;
82+
}
83+
}
84+
if (!isReviewer && non_reply_row) {
85+
// Automatically select the first non-reply.
86+
non_reply_row.click();
7887
}
7988
}
8089
}, function () {
@@ -103,6 +112,7 @@ $(document).ready(function () {
103112
form.find("[name=review_content]").val(row.data("content")).prop("scrollTop", 0);
104113
form.find("[name=completion_date]").val(row.data("date"));
105114
form.find("[name=completion_time]").val(row.data("time"));
115+
form.find("[name=reviewed_rev]").val(row.data("revision_guess"));
106116
});
107117

108118

@@ -133,4 +143,9 @@ $(document).ready(function () {
133143
if (val == "link")
134144
searchMailArchive();
135145
}).trigger("change");
146+
147+
if (!isReviewer) {
148+
// Select mail search by default for secretary completions.
149+
form.find("[name=review_submission][value=link]").click()
150+
}
136151
});

ietf/templates/doc/review/complete_review.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ <h1>{% if revising_review %}Revise{% elif assignment %}Complete{% else %}Submit
115115
{% else %}
116116
var searchMailArchiveUrl = "{% url "ietf.doc.views_review.search_mail_archive" name=doc.name acronym=team.acronym %}";
117117
{% endif %}
118+
var isReviewer = {{ is_reviewer|yesno:'true,false' }};
118119
</script>
119120
<script src="{% static 'ietf/js/complete-review.js' %}"></script>
120121
{% endblock %}

0 commit comments

Comments
 (0)