Skip to content

Commit 2bc5606

Browse files
committed
Merged in [17070] from sasha@dashcare.nl:
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. - Legacy-Id: 17105 Note: SVN reference [17070] has been migrated to Git commit dc95462
2 parents 7ec0955 + dc95462 commit 2bc5606

4 files changed

Lines changed: 30 additions & 0 deletions

File tree

ietf/doc/tests_review.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,13 +621,15 @@ def test_search_mail_archive(self):
621621
self.assertEqual(messages[0]["url"], "https://www.example.com/testmessage")
622622
self.assertTrue("John Doe" in messages[0]["content"])
623623
self.assertEqual(messages[0]["subject"], "Review of {}-01".format(review_req.doc.name))
624+
self.assertEqual(messages[0]["revision_guess"], "01")
624625
self.assertEqual(messages[0]["splitfrom"], ["John Doe", "johndoe@example.com"])
625626
self.assertEqual(messages[0]["utcdate"][0], today.isoformat())
626627

627628
self.assertEqual(messages[1]["url"], "https://www.example.com/testmessage2")
628629
self.assertTrue("Looks OK" in messages[1]["content"])
629630
self.assertTrue("<html>" not in messages[1]["content"])
630631
self.assertEqual(messages[1]["subject"], "Review of {}".format(review_req.doc.name))
632+
self.assertFalse('revision_guess' in messages[1])
631633
self.assertEqual(messages[1]["splitfrom"], ["John Doe II", "johndoe2@example.com"])
632634
self.assertEqual(messages[1]["utcdate"][0], "")
633635

ietf/doc/views_review.py

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

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

538+
if not is_reviewer:
539+
new_field_order = ['review_submission', 'review_url', 'review_file', 'review_content']
540+
new_field_order += [f for f in self.fields.keys() if f not in new_field_order]
541+
self.order_fields(new_field_order)
542+
538543
if not revising_review:
539544
self.fields["state"].choices = [
540545
(slug, "{} - extra reviewer is to be assigned".format(label)) if slug == "part-completed" else (slug, label)
@@ -891,6 +896,7 @@ def complete_review(request, name, assignment_id=None, acronym=None):
891896
'revising_review': revising_review,
892897
'review_to': to,
893898
'review_cc': cc,
899+
'is_reviewer': is_reviewer,
894900
})
895901

896902
def search_mail_archive(request, name, acronym=None, assignment_id=None):
@@ -916,6 +922,12 @@ def search_mail_archive(request, name, acronym=None, assignment_id=None):
916922

917923
try:
918924
res["messages"] = mailarch.retrieve_messages(res["query_data_url"])[:MAX_RESULTS]
925+
for message in res["messages"]:
926+
try:
927+
revision_guess = message["subject"].split(name)[1].split('-')[1]
928+
message["revision_guess"] = revision_guess if revision_guess.isnumeric() else None
929+
except IndexError:
930+
pass
919931
except KeyError as e:
920932
res["error"] = "No results found (%s)" % str(e)
921933
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)