diff --git a/ietf/idrfc/templatetags/ballot_icon.py b/ietf/idrfc/templatetags/ballot_icon.py
index 388eadb4d..3161ab897 100644
--- a/ietf/idrfc/templatetags/ballot_icon.py
+++ b/ietf/idrfc/templatetags/ballot_icon.py
@@ -101,7 +101,7 @@ def render_ballot_icon(user, doc):
c = "position-%s" % (pos.pos.slug if pos else "norecord")
- if hasattr(user, "get_profile") and ad == user.get_profile():
+ if ad.user_id == user.id:
c += " my"
res.append('
' % c)
diff --git a/ietf/idrfc/urls.py b/ietf/idrfc/urls.py
index 52f4739d8..8681ea805 100644
--- a/ietf/idrfc/urls.py
+++ b/ietf/idrfc/urls.py
@@ -42,33 +42,33 @@ urlpatterns = patterns('',
(r'^in-last-call/$', views_search.in_last_call),
url(r'^ad/(?P[A-Za-z0-9.-]+)/$', views_search.by_ad, name="doc_search_by_ad"),
- url(r'^(?P[A-Za-z0-9.-]+)/((?P[0-9-]+)/)?$', views_doc.document_main, name="doc_view"),
- url(r'^(?P[A-Za-z0-9.-]+)/history/$', views_doc.document_history, name="doc_history"),
- url(r'^(?P[A-Za-z0-9.-]+)/writeup/$', views_doc.document_writeup, name="doc_writeup"),
- url(r'^(?P[A-Za-z0-9.-]+)/ballot/(?P[A-Za-z0-9.-]+)/position/$', views_ballot.edit_position, name='doc_edit_position'),
- url(r'^(?P[A-Za-z0-9.-]+)/ballot/(?P[A-Za-z0-9.-]+)/emailposition/$', views_ballot.send_ballot_comment, name='doc_send_ballot_comment'),
- url(r'^(?P[A-Za-z0-9.-]+)/ballot/(?P[A-Za-z0-9.-]+)/$', views_doc.document_ballot, name="doc_ballot"),
- url(r'^(?P[A-Za-z0-9.-]+)/ballot/$', views_doc.document_ballot, name="doc_ballot"),
- (r'^(?P[A-Za-z0-9.-]+)/doc.json$', views_doc.document_debug),
- (r'^(?P[A-Za-z0-9.-]+)/_ballot.data$', views_doc.ballot_html), # why is this url so weird instead of just ballot.html?
- (r'^(?P[A-Za-z0-9.-]+)/ballot.tsv$', views_doc.ballot_tsv),
- (r'^(?P[A-Za-z0-9.-]+)/ballot.json$', views_doc.ballot_json),
+ url(r'^(?P[A-Za-z0-9._-]+)/((?P[0-9-]+)/)?$', views_doc.document_main, name="doc_view"),
+ url(r'^(?P[A-Za-z0-9._-]+)/history/$', views_doc.document_history, name="doc_history"),
+ url(r'^(?P[A-Za-z0-9._-]+)/writeup/$', views_doc.document_writeup, name="doc_writeup"),
+ url(r'^(?P[A-Za-z0-9._-]+)/ballot/(?P[A-Za-z0-9.-]+)/position/$', views_ballot.edit_position, name='doc_edit_position'),
+ url(r'^(?P[A-Za-z0-9._-]+)/ballot/(?P[A-Za-z0-9.-]+)/emailposition/$', views_ballot.send_ballot_comment, name='doc_send_ballot_comment'),
+ url(r'^(?P[A-Za-z0-9._-]+)/ballot/(?P[A-Za-z0-9.-]+)/$', views_doc.document_ballot, name="doc_ballot"),
+ url(r'^(?P[A-Za-z0-9._-]+)/ballot/$', views_doc.document_ballot, name="doc_ballot"),
+ (r'^(?P[A-Za-z0-9._-]+)/doc.json$', views_doc.document_debug),
+ (r'^(?P[A-Za-z0-9._-]+)/_ballot.data$', views_doc.ballot_html), # why is this url so weird instead of just ballot.html?
+ (r'^(?P[A-Za-z0-9._-]+)/ballot.tsv$', views_doc.ballot_tsv),
+ (r'^(?P[A-Za-z0-9._-]+)/ballot.json$', views_doc.ballot_json),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/state/$', views_edit.change_state, name='doc_change_state'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/info/$', views_edit.edit_info, name='doc_edit_info'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/requestresurrect/$', views_edit.request_resurrect, name='doc_request_resurrect'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/resurrect/$', views_edit.resurrect, name='doc_resurrect'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/addcomment/$', views_edit.add_comment, name='doc_add_comment'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/clearballot/$', views_ballot.clear_ballot, name='doc_clear_ballot'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/deferballot/$', views_ballot.defer_ballot, name='doc_defer_ballot'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/undeferballot/$', views_ballot.undefer_ballot, name='doc_undefer_ballot'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/lastcalltext/$', views_ballot.lastcalltext, name='doc_ballot_lastcall'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/ballotwriteupnotes/$', views_ballot.ballot_writeupnotes, name='doc_ballot_writeupnotes'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/approvaltext/$', views_ballot.ballot_approvaltext, name='doc_ballot_approvaltext'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/approveballot/$', views_ballot.approve_ballot, name='doc_approve_ballot'),
- url(r'^(?P[A-Za-z0-9.-]+)/edit/makelastcall/$', views_ballot.make_last_call, name='doc_make_last_call'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/state/$', views_edit.change_state, name='doc_change_state'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/info/$', views_edit.edit_info, name='doc_edit_info'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/requestresurrect/$', views_edit.request_resurrect, name='doc_request_resurrect'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/resurrect/$', views_edit.resurrect, name='doc_resurrect'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/addcomment/$', views_edit.add_comment, name='doc_add_comment'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/clearballot/$', views_ballot.clear_ballot, name='doc_clear_ballot'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/deferballot/$', views_ballot.defer_ballot, name='doc_defer_ballot'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/undeferballot/$', views_ballot.undefer_ballot, name='doc_undefer_ballot'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/lastcalltext/$', views_ballot.lastcalltext, name='doc_ballot_lastcall'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/ballotwriteupnotes/$', views_ballot.ballot_writeupnotes, name='doc_ballot_writeupnotes'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/approvaltext/$', views_ballot.ballot_approvaltext, name='doc_ballot_approvaltext'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/approveballot/$', views_ballot.approve_ballot, name='doc_approve_ballot'),
+ url(r'^(?P[A-Za-z0-9._-]+)/edit/makelastcall/$', views_ballot.make_last_call, name='doc_make_last_call'),
- (r'^(?P[A-Za-z0-9.-]+)/charter/', include('ietf.wgcharter.urls')),
+ (r'^(?P[A-Za-z0-9._-]+)/charter/', include('ietf.wgcharter.urls')),
)
urlpatterns += patterns('django.views.generic.simple',
diff --git a/ietf/idrfc/views_doc.py b/ietf/idrfc/views_doc.py
index a3ad547bc..9641c62bd 100644
--- a/ietf/idrfc/views_doc.py
+++ b/ietf/idrfc/views_doc.py
@@ -55,20 +55,20 @@ from ietf.utils.history import find_history_active_at
from ietf.ietfauth.decorators import has_role
-def render_document_top(request, doc, tab):
+def render_document_top(request, doc, tab, name):
tabs = []
- tabs.append(("Document", "document", urlreverse("ietf.idrfc.views_doc.document_main", kwargs=dict(name=doc.name)), True))
+ tabs.append(("Document", "document", urlreverse("ietf.idrfc.views_doc.document_main", kwargs=dict(name=name)), True))
ballot = doc.latest_event(BallotDocEvent, type="created_ballot")
if doc.type_id == "draft":
# if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot:
- tabs.append(("IESG Evaluation Record", "ballot", urlreverse("ietf.idrfc.views_doc.document_ballot", kwargs=dict(name=doc.name)), ballot))
+ tabs.append(("IESG Evaluation Record", "ballot", urlreverse("ietf.idrfc.views_doc.document_ballot", kwargs=dict(name=name)), ballot))
elif doc.type_id == "charter":
- tabs.append(("IESG Review", "ballot", urlreverse("ietf.idrfc.views_doc.document_ballot", kwargs=dict(name=doc.name)), ballot))
+ tabs.append(("IESG Review", "ballot", urlreverse("ietf.idrfc.views_doc.document_ballot", kwargs=dict(name=name)), ballot))
# FIXME: if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot:
- tabs.append(("IESG Writeups", "writeup", urlreverse("ietf.idrfc.views_doc.document_writeup", kwargs=dict(name=doc.name)), True))
- tabs.append(("History", "history", urlreverse("ietf.idrfc.views_doc.document_history", kwargs=dict(name=doc.name)), True))
+ tabs.append(("IESG Writeups", "writeup", urlreverse("ietf.idrfc.views_doc.document_writeup", kwargs=dict(name=name)), True))
+ tabs.append(("History", "history", urlreverse("ietf.idrfc.views_doc.document_history", kwargs=dict(name=name)), True))
name = doc.canonical_name()
if name.startswith("rfc"):
@@ -120,7 +120,7 @@ def document_main(request, name, rev=None):
if gh:
group = gh
- top = render_document_top(request, doc, "document")
+ top = render_document_top(request, doc, "document", name)
telechat = doc.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
@@ -159,9 +159,8 @@ def document_history(request, name):
if name.lower().startswith("draft") or name.lower().startswith("rfc"):
return document_main_idrfc(request, name, "history")
-
doc = get_object_or_404(Document, docalias__name=name)
- top = render_document_top(request, doc, "history")
+ top = render_document_top(request, doc, "history", name)
diff_documents = [ doc ]
diff_documents.extend(Document.objects.filter(docalias__relateddocument__source=doc, docalias__relateddocument__relationship="replaces"))
@@ -206,7 +205,7 @@ def document_writeup(request, name):
return document_main_idrfc(request, name, "writeup")
doc = get_object_or_404(Document, docalias__name=name)
- top = render_document_top(request, doc, "writeup")
+ top = render_document_top(request, doc, "writeup", name)
writeups = []
if doc.type_id == "charter":
@@ -328,7 +327,7 @@ def document_ballot_content(request, doc, ballot_id, editable=True):
def document_ballot(request, name, ballot_id=None):
doc = get_object_or_404(Document, docalias__name=name)
- top = render_document_top(request, doc, "ballot")
+ top = render_document_top(request, doc, "ballot", name)
c = document_ballot_content(request, doc, ballot_id, editable=True)
diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py
index 42a4deade..5c36660a5 100644
--- a/ietf/iesg/views.py
+++ b/ietf/iesg/views.py
@@ -221,11 +221,13 @@ def agenda_docs(date, next_agenda):
def agenda_wg_actions(date):
res = dict(("s%s%s%s" % (i, j, k), []) for i in range(2, 5) for j in range (1, 4) for k in range(1, 4))
- charters = Document.objects.filter(type="charter", docevent__telechatdocevent__telechat_date=date).distinct()
+ charters = Document.objects.filter(type="charter", docevent__telechatdocevent__telechat_date=date).select_related("group").distinct()
for c in charters:
if c.latest_event(TelechatDocEvent, type="scheduled_for_telechat").telechat_date != date:
continue
+ c.group.txt_link = settings.CHARTER_TXT_URL + "%s-%s.txt" % (c.canonical_name(), c.rev)
+
section_key = "s" + get_wg_section(c.group)
if section_key not in res:
res[section_key] = []
diff --git a/ietf/settings.py b/ietf/settings.py
index 08a78f678..3454250fb 100644
--- a/ietf/settings.py
+++ b/ietf/settings.py
@@ -193,7 +193,7 @@ INTERNET_DRAFT_PATH = '/a/www/ietf-ftp/internet-drafts/'
INTERNET_DRAFT_PDF_PATH = '/a/www/ietf-datatracker/pdf/'
RFC_PATH = '/a/www/ietf-ftp/rfc/'
CHARTER_PATH = '/a/www/ietf-ftp/charters/'
-CHARTER_TXT_URL = 'http://www.ietf.org/charters/'
+CHARTER_TXT_URL = 'http://www.ietf.org/charter/'
AGENDA_PATH = '/a/www/www6s/proceedings/'
AGENDA_PATH_PATTERN = '/a/www/www6s/proceedings/%(meeting)s/agenda/%(wg)s.%(ext)s'
MINUTES_PATH_PATTERN = '/a/www/www6s/proceedings/%(meeting)s/minutes/%(wg)s.%(ext)s'
diff --git a/ietf/templates/iesg/agenda_wg.html b/ietf/templates/iesg/agenda_wg.html
index 00ab643dd..f4a0bceb3 100644
--- a/ietf/templates/iesg/agenda_wg.html
+++ b/ietf/templates/iesg/agenda_wg.html
@@ -46,7 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{{ wg.obj.parent.acronym|upper }}
{{ wg.obj.time|date:"M d"}}
-
+
{{ wg.obj.name|escape }} ({{wg.obj.acronym}})
diff --git a/ietf/templates/wgcharter/action_text.txt b/ietf/templates/wgcharter/action_text.txt
index c12f58323..30f7435de 100644
--- a/ietf/templates/wgcharter/action_text.txt
+++ b/ietf/templates/wgcharter/action_text.txt
@@ -1,10 +1,8 @@
{% load ietf_filters %}{% autoescape off %}From: The IESG
-To: IETF-Announce
+To: IETF-Announce {% if wg.list_email %}
+Cc: {{ wg.acronym }} WG <{{ wg.list_email }}> {% endif %}
Subject: WG Action: {{ action_type }} {{ wg.name }} ({{ wg.acronym }})
{% filter wordwrap:73 %}{% ifequal action_type "Formed" %}A new IETF working group has been formed in the {{ wg.parent.name }}.{% endifequal %}{% ifequal action_type "Rechartered" %}The {{ wg.name }} ({{ wg.acronym }}) working group in the {{ wg.parent.name }} of the IETF has been rechartered.{% endifequal %} For additional information please contact the Area Directors or the WG Chair{{ chairs|pluralize}}.
-{% include "wgcharter/wg_info.txt" %}
-
-{% endfilter %}
-{% endautoescape %}
+{% include "wgcharter/wg_info.txt" %}{% endfilter %}{% endautoescape %}
diff --git a/ietf/templates/wgcharter/announcement_text.html b/ietf/templates/wgcharter/announcement_text.html
index 168d23c64..38113ef51 100644
--- a/ietf/templates/wgcharter/announcement_text.html
+++ b/ietf/templates/wgcharter/announcement_text.html
@@ -18,14 +18,20 @@ form #id_announcement_text {
{% load ietf_filters %}
{% if user|has_role:"Secretariat" %}
+ Secretariat actions
+
{% endif %}
diff --git a/ietf/templates/wgcharter/approve.html b/ietf/templates/wgcharter/approve.html
index 1fba5eed5..5287aec47 100644
--- a/ietf/templates/wgcharter/approve.html
+++ b/ietf/templates/wgcharter/approve.html
@@ -19,7 +19,7 @@ form.approve .announcement {
{% endblock %}
{% block content %}
-Approve {{ charter.canonical_name }}
+Approve {{ charter.canonical_name }}-{{ charter.rev }}
IETF announcement:
@@ -31,6 +31,7 @@ form.approve .announcement {
diff --git a/ietf/templates/wgcharter/review_text.txt b/ietf/templates/wgcharter/review_text.txt
index f56bbc4b2..a683516e9 100644
--- a/ietf/templates/wgcharter/review_text.txt
+++ b/ietf/templates/wgcharter/review_text.txt
@@ -1,10 +1,8 @@
{% load ietf_filters %}{% autoescape off %}From: The IESG
-To: IETF-Announce
+To: IETF-Announce {% if wg.list_email %}
+Cc: {{ wg.acronym }} WG <{{ wg.list_email }}> {% endif %}
Subject: WG Review: {{ wg.name }} ({{ wg.acronym }})
{% filter wordwrap:73 %}{% ifequal review_type "new" %}A new IETF working group has been proposed in the {{ wg.parent.name }}.{% endifequal %}{% ifequal review_type "recharter" %}The {{ wg.name }} ({{wg.acronym}}) working group in the {{ wg.parent.name }} of the IETF is undergoing rechartering.{% endifequal %} The IESG has not made any determination yet. The following draft charter was submitted, and is provided for informational purposes only. Please send your comments to the IESG mailing list (iesg at ietf.org) by {{ review_date }}.
-{% include "wgcharter/wg_info.txt" %}
-
-{% endfilter %}
-{% endautoescape %}
+{% include "wgcharter/wg_info.txt" %}{% endfilter %}{% endautoescape %}
diff --git a/ietf/templates/wgcharter/wg_info.txt b/ietf/templates/wgcharter/wg_info.txt
index 8c0597df3..209768f97 100644
--- a/ietf/templates/wgcharter/wg_info.txt
+++ b/ietf/templates/wgcharter/wg_info.txt
@@ -22,3 +22,7 @@ Current Status: {{ wg.state.name }} Working Group
Charter of Working Group:
{{ charter_text }}
+
+Milestones:
+{% for milestone in milestones %} {% if milestone.done %}Done {% else %}{{ milestone.expected_due_date|date:"M Y" }}{% endif %} - {{ milestone.desc|safe }}
+{% endfor %}
diff --git a/ietf/wgcharter/mails.py b/ietf/wgcharter/mails.py
index 834c583e4..e59da36cc 100644
--- a/ietf/wgcharter/mails.py
+++ b/ietf/wgcharter/mails.py
@@ -79,6 +79,7 @@ def default_action_text(wg, charter, user):
chairs=wg.role_set.filter(name="chair"),
secr=wg.role_set.filter(name="secr"),
techadv=wg.role_set.filter(name="techadv"),
+ milestones=wg.groupmilestone_set.all(),
ad_email=wg.ad.role_email("ad") if wg.ad else None,
action_type=action,
))
@@ -98,6 +99,7 @@ def default_review_text(wg, charter, user):
chairs=wg.role_set.filter(name="chair"),
secr=wg.role_set.filter(name="secr"),
techadv=wg.role_set.filter(name="techadv"),
+ milestones=wg.groupmilestone_set.all(),
ad_email=wg.ad.role_email("ad") if wg.ad else None,
review_date=(datetime.date.today() + datetime.timedelta(weeks=1)).isoformat(),
review_type="new" if wg.state_id == "proposed" else "recharter",
diff --git a/ietf/wgcharter/urls.py b/ietf/wgcharter/urls.py
index 2aa4c955f..e9b04b5ec 100644
--- a/ietf/wgcharter/urls.py
+++ b/ietf/wgcharter/urls.py
@@ -7,7 +7,7 @@ urlpatterns = patterns('',
url(r'^(?Pinitcharter|recharter|abandon)/$', "ietf.wgcharter.views.change_state", name='charter_startstop_process'),
url(r'^telechat/$', "ietf.wgcharter.views.telechat_date", name='charter_telechat_date'),
url(r'^notify/$', "ietf.wgcharter.views.edit_notify", name='charter_edit_notify'),
- url(r'^(?Paction|review)/$', "ietf.wgcharter.views.announcement_text"),
+ url(r'^(?Paction|review)/$', "ietf.wgcharter.views.announcement_text", name="charter_edit_announcement"),
url(r'^ballotwriteupnotes/$', "ietf.wgcharter.views.ballot_writeupnotes"),
url(r'^approve/$', "ietf.wgcharter.views.approve", name='charter_approve'),
url(r'^submit/$', "ietf.wgcharter.views.submit", name='charter_submit'),
diff --git a/ietf/wgcharter/views.py b/ietf/wgcharter/views.py
index e6d301cda..2ec85cd40 100644
--- a/ietf/wgcharter/views.py
+++ b/ietf/wgcharter/views.py
@@ -397,7 +397,11 @@ def announcement_text(request, name, ann):
charter.time = e.time
charter.save()
- return redirect('doc_writeup', name=charter.name)
+
+ if request.GET.get("next", "") == "approve":
+ return redirect('charter_approve', name=charter.canonical_name())
+
+ return redirect('doc_writeup', name=charter.canonical_name())
if "regenerate_text" in request.POST:
if ann == "action":