Date: Tue, 26 Apr 2011 14:43:08 +0000
Subject: [PATCH 3/9] Do not assume that the two_pages_field field is not None.
Fixes #651 - Legacy-Id: 3063
---
ietf/submit/templatetags/submit_tags.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ietf/submit/templatetags/submit_tags.py b/ietf/submit/templatetags/submit_tags.py
index f406660c9..ce2da673c 100644
--- a/ietf/submit/templatetags/submit_tags.py
+++ b/ietf/submit/templatetags/submit_tags.py
@@ -23,7 +23,7 @@ def show_two_pages(context, two_pages, validation):
@register.filter
def two_pages_decorated_with_validation(value, validation):
- pages = value.first_two_pages
+ pages = value.first_two_pages or ''
if not 'revision' in validation.warnings.keys():
return mark_safe('%s
' % pages)
result = '\n'
From fe466900e1d9a3d6519b471c48ee70aacaba5433 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?=
Date: Tue, 26 Apr 2011 14:54:16 +0000
Subject: [PATCH 4/9] Insert a button to perform the last step of autopost via
POST request. Fixes #650 - Legacy-Id: 3064
---
ietf/submit/views.py | 9 +++++++--
ietf/templates/submit/last_confirmation_step.html | 15 +++++++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
create mode 100644 ietf/templates/submit/last_confirmation_step.html
diff --git a/ietf/submit/views.py b/ietf/submit/views.py
index 497f39724..8e85a4841 100644
--- a/ietf/submit/views.py
+++ b/ietf/submit/views.py
@@ -214,8 +214,13 @@ def draft_confirm(request, submission_id, auth_key):
elif detail.status_id != WAITING_AUTHENTICATION:
message = ('error', 'The submission can not be autoposted because it is in state: %s' % detail.status.status_value)
else:
- message = ('success', 'Authorization key accepted. Auto-Post complete')
- perform_post(detail)
+ if request.method=='POST':
+ message = ('success', 'Authorization key accepted. Auto-Post complete')
+ perform_post(detail)
+ else:
+ return render_to_response('submit/last_confirmation_step.html',
+ {'detail': detail, },
+ context_instance=RequestContext(request))
return draft_status(request, submission_id, message=message)
diff --git a/ietf/templates/submit/last_confirmation_step.html b/ietf/templates/submit/last_confirmation_step.html
new file mode 100644
index 000000000..5dfe5f686
--- /dev/null
+++ b/ietf/templates/submit/last_confirmation_step.html
@@ -0,0 +1,15 @@
+{% extends "submit/submit_base.html" %}
+
+{% block title %}Confirm Auto-Post{% endblock %}
+
+
+{% block submit_content %}
+
+Confirm auto-post
+
+Authorization key accepted. Please the button below to finish Auto-Post of {{ detail.filename }}-{{ detail.revision }}
+
+
+{% endblock %}
From be0f5e4962fc212412b53c5b5827aea63f69f7ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?=
Date: Tue, 26 Apr 2011 15:10:48 +0000
Subject: [PATCH 5/9] Allow creation dates that are 3 days after or 3 days
before the current date. Fixes #652 - Legacy-Id: 3065
---
ietf/submit/forms.py | 5 ++---
ietf/submit/utils.py | 5 ++---
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py
index c380fd77a..7e4f6fb8f 100644
--- a/ietf/submit/forms.py
+++ b/ietf/submit/forms.py
@@ -392,9 +392,8 @@ class MetaDataForm(AutoPostForm):
if not creation_date:
return None
submit_date = self.draft.submission_date
- if creation_date > submit_date:
- raise forms.ValidationError('Creation Date must not be set after submission date')
- if creation_date + datetime.timedelta(days=3) < submit_date:
+ if (creation_date + datetime.timedelta(days=3) < submit_date or
+ creation_date - datetime.timedelta(days=3) > submit_date):
raise forms.ValidationError('Creation Date must be within 3 days of submission date')
return creation_date
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 075c88d8c..c81ba8cfc 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -233,9 +233,8 @@ class DraftValidation(object):
self.add_warning('creation_date', 'Creation Date field is empty or the creation date is not in a proper format')
return
submit_date = self.draft.submission_date
- if date > submit_date:
- self.add_warning('creation_date', 'Creation Date must not be set after submission date')
- if date + datetime.timedelta(days=3) < submit_date:
+ if (date + datetime.timedelta(days=3) < submit_date or
+ date - datetime.timedelta(days=3) > submit_date):
self.add_warning('creation_date', 'Creation Date must be within 3 days of submission date')
def get_authors(self):
From e0f4185c543ed5a7a66c8b4542cafbe32e675be3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?=
Date: Sun, 1 May 2011 23:49:13 +0000
Subject: [PATCH 6/9] Change substate if needed. Fixes #654 - Legacy-Id: 3075
---
ietf/submit/utils.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index c81ba8cfc..3e95449dc 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -6,8 +6,9 @@ from django.conf import settings
from django.contrib.sites.models import Site
from ietf.idtracker.models import (InternetDraft, PersonOrOrgInfo, IETFWG,
- IDAuthor, EmailAddress)
+ IDAuthor, EmailAddress, IDState)
from ietf.utils.mail import send_mail
+from ietf.idrfc.utils import add_document_comment
# Some usefull states
@@ -47,6 +48,11 @@ def perform_post(submission):
draft.last_modified_date = datetime.date.today()
draft.abstract = submission.abstract
draft.save()
+ if draft.idinternal.cur_sub_state_id == 5 and draft.idinternal.rfc_flag == 0: # Substate 5 Revised ID Needed
+ draft.idinternal.prev_sub_state_id = draft.idinternal.cur_sub_state_id
+ draft.idinternal.cur_sub_state_id = 2 # Substate 2 AD Followup
+ draft.idinternal.save()
+ add_document_comment(None, draft, "Sub state has been changed to AD Follow up from New Id Needed")
except InternetDraft.DoesNotExist:
draft = InternetDraft.objects.create(
title=submission.id_document_name,
From ccfd8b5eedd04ec3081b66dc7d2fc4572078a046 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?=
Date: Mon, 2 May 2011 00:21:21 +0000
Subject: [PATCH 7/9] Check if idinternal exists. See #654 - Legacy-Id: 3076
---
ietf/submit/utils.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 3e95449dc..bf8c63981 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -47,8 +47,10 @@ def perform_post(submission):
draft.txt_page_count = submission.txt_page_count
draft.last_modified_date = datetime.date.today()
draft.abstract = submission.abstract
+ draft.status_id=1 # Active
+ draft.expired_tombstone=0
draft.save()
- if draft.idinternal.cur_sub_state_id == 5 and draft.idinternal.rfc_flag == 0: # Substate 5 Revised ID Needed
+ if draft.idinternal and draft.idinternal.cur_sub_state_id == 5 and draft.idinternal.rfc_flag == 0: # Substate 5 Revised ID Needed
draft.idinternal.prev_sub_state_id = draft.idinternal.cur_sub_state_id
draft.idinternal.cur_sub_state_id = 2 # Substate 2 AD Followup
draft.idinternal.save()
From fe699f7062ee0a63e0f9c1f17a6272587ae1ad0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?=
Date: Tue, 3 May 2011 07:32:25 +0000
Subject: [PATCH 8/9] Fix expected revision for expired drafts. Fixes #656 -
Legacy-Id: 3078
---
ietf/submit/forms.py | 2 +-
ietf/submit/utils.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py
index 7e4f6fb8f..b428593ae 100644
--- a/ietf/submit/forms.py
+++ b/ietf/submit/forms.py
@@ -409,7 +409,7 @@ class MetaDataForm(AutoPostForm):
raise forms.ValidationError('Version field is not in NN format')
if version_int > 99 or version_int < 0:
raise forms.ValidationError('Version must be set between 00 and 99')
- existing_revisions = [int(i.revision) for i in InternetDraft.objects.filter(filename=self.draft.filename)]
+ existing_revisions = [int(i.revision_display()) for i in InternetDraft.objects.filter(filename=self.draft.filename)]
expected = 0
if existing_revisions:
expected = max(existing_revisions) + 1
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index bf8c63981..757b3a5f7 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -220,7 +220,7 @@ class DraftValidation(object):
if self.draft.status_id in [POSTED, POSTED_BY_SECRETARIAT]:
return
revision = self.draft.revision
- existing_revisions = [int(i.revision) for i in InternetDraft.objects.filter(filename=self.draft.filename)]
+ existing_revisions = [int(i.revision_display()) for i in InternetDraft.objects.filter(filename=self.draft.filename)]
expected = 0
if existing_revisions:
expected = max(existing_revisions) + 1
From 7fb27754f70115aaaa00dfc91283b8b14df460ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?=
Date: Tue, 3 May 2011 16:08:40 +0000
Subject: [PATCH 9/9] Send announcements when posting new version of a draft.
Fixes #649 - Legacy-Id: 3085
---
ietf/settings.py | 2 +
ietf/submit/utils.py | 76 +++++++++++++++++--
.../templates/submit/announce_new_version.txt | 8 ++
ietf/templates/submit/announce_to_authors.txt | 15 ++++
ietf/templates/submit/announce_to_lists.txt | 19 +++++
5 files changed, 114 insertions(+), 6 deletions(-)
create mode 100644 ietf/templates/submit/announce_new_version.txt
create mode 100644 ietf/templates/submit/announce_to_authors.txt
create mode 100644 ietf/templates/submit/announce_to_lists.txt
diff --git a/ietf/settings.py b/ietf/settings.py
index 2caf8d3f6..09f582d66 100644
--- a/ietf/settings.py
+++ b/ietf/settings.py
@@ -191,6 +191,8 @@ LIAISON_ATTACH_URL = '/documents/LIAISON/'
# ID Submission Tool settings
IDST_FROM_EMAIL = 'IETF I-D Submission Tool '
IDST_TO_EMAIL = 'internet-drafts@ietf.org'
+IDST_ID_EMAIL = 'Internet-Drafts@ietf.org'
+IDST_ID_ANNOUNCE_LIST = 'i-d-announce@ietf.org'
# Days from meeting to cut off dates on submit
FIRST_CUTOFF_DAYS = 5
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 757b3a5f7..af522d5e9 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -6,7 +6,7 @@ from django.conf import settings
from django.contrib.sites.models import Site
from ietf.idtracker.models import (InternetDraft, PersonOrOrgInfo, IETFWG,
- IDAuthor, EmailAddress, IDState)
+ IDAuthor, EmailAddress, IESGLogin)
from ietf.utils.mail import send_mail
from ietf.idrfc.utils import add_document_comment
@@ -36,32 +36,34 @@ def request_full_url(request, submission):
def perform_post(submission):
group_id = submission.group_acronym and submission.group_acronym.pk or NONE_WG
+ state_change_msg = ''
try:
draft = InternetDraft.objects.get(filename=submission.filename)
draft.title = submission.id_document_name
draft.group_id = group_id
draft.filename = submission.filename
draft.revision = submission.revision
- draft.revision_date = submission.creation_date
+ draft.revision_date = submission.submission_date
draft.file_type = submission.file_type
draft.txt_page_count = submission.txt_page_count
draft.last_modified_date = datetime.date.today()
draft.abstract = submission.abstract
- draft.status_id=1 # Active
- draft.expired_tombstone=0
+ draft.status_id = 1 # Active
+ draft.expired_tombstone = 0
draft.save()
if draft.idinternal and draft.idinternal.cur_sub_state_id == 5 and draft.idinternal.rfc_flag == 0: # Substate 5 Revised ID Needed
draft.idinternal.prev_sub_state_id = draft.idinternal.cur_sub_state_id
draft.idinternal.cur_sub_state_id = 2 # Substate 2 AD Followup
draft.idinternal.save()
- add_document_comment(None, draft, "Sub state has been changed to AD Follow up from New Id Needed")
+ state_change_msg = "Sub state has been changed to AD Follow up from New Id Needed"
+ add_document_comment(None, draft, state_change_msg)
except InternetDraft.DoesNotExist:
draft = InternetDraft.objects.create(
title=submission.id_document_name,
group_id=group_id,
filename=submission.filename,
revision=submission.revision,
- revision_date=submission.creation_date,
+ revision_date=submission.submission_date,
file_type=submission.file_type,
txt_page_count=submission.txt_page_count,
start_date=datetime.date.today(),
@@ -71,11 +73,73 @@ def perform_post(submission):
intended_status_id=8, # None
)
update_authors(draft, submission)
+ add_document_comment(None, draft, "New version available")
move_docs(submission)
submission.status_id = POSTED
+ send_announcements(submission, draft, state_change_msg)
submission.save()
+def send_announcements(submission, draft, state_change_msg):
+ announce_to_lists(submission)
+ if draft.idinternal and not draft.idinternal.rfc_flag:
+ announce_new_version(submission, draft, state_change_msg)
+ announce_to_authors(submission)
+
+
+def announce_to_lists(submission):
+ subject = 'I-D Action: %s-%s.txt' % (submission.filename, submission.revision)
+ from_email = settings.IDST_ID_EMAIL
+ to_email = [settings.IDST_ID_ANNOUNCE_LIST]
+ authors = []
+ for i in submission.tempidauthors_set.order_by('author_order'):
+ if not i.author_order:
+ continue
+ authors.append(i.get_full_name())
+ if submission.group_acronym:
+ cc = [submission.group_acronym.email_address]
+ else:
+ cc = None
+ send_mail(None, to_email, from_email, subject, 'submit/announce_to_lists.txt',
+ {'submission': submission,
+ 'authors': authors}, cc=cc)
+
+
+def announce_new_version(submission, draft, state_change_msg):
+ to_email = []
+ if draft.idinternal.state_change_notice_to:
+ to_email.append(draft.idinternal.state_change_notice_to)
+ if draft.idinternal.job_owner:
+ to_email.append(draft.idinternal.job_owner.person.email()[1])
+ if draft.idinternal.ballot:
+ for p in draft.idinternal.ballot.positions.all():
+ if p.discuss == 1 and p.ad.user_level == IESGLogin.AD_LEVEL:
+ to_email.append(p.ad.person.email()[1])
+ subject = 'New Version Notification - %s-%s.txt' % (submission.filename, submission.revision)
+ from_email = settings.IDST_ID_EMAIL
+ send_mail(None, to_email, from_email, subject, 'submit/announce_new_version.txt',
+ {'submission': submission,
+ 'msg': state_change_msg})
+
+
+def announce_to_authors(submission):
+ authors = submission.tempidauthors_set.order_by('author_order')
+ cc = list(set([i.email()[1] for i in authors]))
+ to_email = [authors[0].email()[1]] # First TempIdAuthor is submitter
+ from_email = settings.IDST_ID_EMAIL
+ subject = 'New Version Notification for %s-%s.txt' % (submission.filename, submission.revision)
+ if submission.group_acronym:
+ wg = submission.group_acronym.group_acronym.acronym
+ elif submission.filename.startswith('draft-iesg'):
+ wg = 'IESG'
+ else:
+ wg = 'Individual Submission'
+ send_mail(None, to_email, from_email, subject, 'submit/announce_to_authors.txt',
+ {'submission': submission,
+ 'submitter': authors[0].get_full_name(),
+ 'wg': wg}, cc=cc)
+
+
def find_person(first_name, last_name, middle_initial, name_suffix, email):
person_list = None
if email:
diff --git a/ietf/templates/submit/announce_new_version.txt b/ietf/templates/submit/announce_new_version.txt
new file mode 100644
index 000000000..5ea098a2c
--- /dev/null
+++ b/ietf/templates/submit/announce_new_version.txt
@@ -0,0 +1,8 @@
+New version (-{{ submission.revision }}) has been submitted for {{ submission.filename }}-{{ submission.revision }}.txt.
+http://www.ietf.org/internet-drafts/{{ submission.filename }}-{{ submission.revision }}.txt
+{{ msg }}
+
+Diff from previous version:
+http://tools.ietf.org/rfcdiff?url2={{ submission.filename }}-{{ submission.revision }}
+
+IETF Secretariat.
diff --git a/ietf/templates/submit/announce_to_authors.txt b/ietf/templates/submit/announce_to_authors.txt
new file mode 100644
index 000000000..b6f4c8878
--- /dev/null
+++ b/ietf/templates/submit/announce_to_authors.txt
@@ -0,0 +1,15 @@
+A new version of I-D, {{ submission.filename }}-{{ submission.revision }}.txt has been successfully submitted by {{ submitter }} and posted to the IETF repository.
+
+Filename: {{ submission.filename }}
+Revision: {{ submission.revision }}
+Title: {{ submission.id_document_name }}
+Creation date: {{ submission.creation_date|date:"Y-m-d" }}
+WG ID: {{ wg }}
+Number of pages: {{ submission.txt_page_count }}
+
+Abstract:
+{{ submission.abstract }}
+
+{{ submission.comment_to_sec|default:"" }}
+
+The IETF Secretariat
diff --git a/ietf/templates/submit/announce_to_lists.txt b/ietf/templates/submit/announce_to_lists.txt
new file mode 100644
index 000000000..6b4dca129
--- /dev/null
+++ b/ietf/templates/submit/announce_to_lists.txt
@@ -0,0 +1,19 @@
+A New Internet-Draft is available from the on-line Internet-Drafts directories.{% if submission.group_acronym %} This draft is a work item of the {{ submission.group_acronym.group_acronym.name }} Working Group of the IETF.{% endif %}
+
+ Title : {{ submission.id_document_name }}
+ Author(s) : {% for author in authors %}{{ author }}{% if not forloop.last %}
+ {% endif %}{% endfor %}
+ Filename : {{ submission.filename }}-{{ submission.revision }}.txt
+ Pages : {{ submission.txt_page_count }}
+ Date : {{ submission.submission_date|date:"Y-m-d" }}
+
+{{ submission.abstract }}
+
+A URL for this Internet-Draft is:
+http://www.ietf.org/internet-drafts/{{ submission.filename }}-{{ submission.revision }}.txt
+
+Internet-Drafts are also available by anonymous FTP at:
+ftp://ftp.ietf.org/internet-drafts/
+
+This Internet-Draft can be retrieved at:
+ftp://ftp.ietf.org/internet-drafts/{{ submission.filename }}-{{ submission.revision }}.txt