Move chartering groups to /group/chartering/ (with a redirect from the old location), list RGs there too, and amend the previous fix to the chartering process for non-WGs so they have internal and external review states instead of just approved. Also move the code in wginfo/ to group/ as it is no longer just about info for WGs.
- Legacy-Id: 7556
This commit is contained in:
parent
a38a53efd0
commit
f52e676793
|
@ -11,7 +11,7 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ietf.settings")
|
|||
|
||||
syslog.openlog(os.path.basename(__file__), syslog.LOG_PID, syslog.LOG_LOCAL0)
|
||||
|
||||
from ietf.wginfo.mails import *
|
||||
from ietf.group.mails import *
|
||||
|
||||
today = datetime.date.today()
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ from ietf.person.models import Person
|
|||
from ietf.utils.history import find_history_active_at
|
||||
from ietf.utils.mail import send_mail_preformatted
|
||||
from ietf.utils.textupload import get_cleaned_text_file_content
|
||||
from ietf.wginfo.mails import email_secretariat
|
||||
from ietf.group.mails import email_secretariat
|
||||
|
||||
|
||||
class ChangeStateForm(forms.Form):
|
||||
|
@ -46,7 +46,7 @@ class ChangeStateForm(forms.Form):
|
|||
if group.type_id == "wg":
|
||||
state_field.queryset = state_field.queryset.filter(slug__in=("infrev", "intrev", "extrev", "iesgrev"))
|
||||
else:
|
||||
state_field.queryset = state_field.queryset.filter(slug__in=("notrev", "approved"))
|
||||
state_field.queryset = state_field.queryset.filter(slug__in=("intrev", "extrev", "approved"))
|
||||
# hide requested fields
|
||||
if self.hide:
|
||||
for f in self.hide:
|
||||
|
@ -147,7 +147,7 @@ def change_state(request, name, option=None):
|
|||
|
||||
email_state_changed(request, charter, "State changed to %s." % charter_state)
|
||||
|
||||
if charter_state.slug == "intrev":
|
||||
if charter_state.slug == "intrev" and group.type_id == "wg":
|
||||
if request.POST.get("ballot_wo_extern"):
|
||||
create_ballot_if_not_open(charter, login, "r-wo-ext")
|
||||
else:
|
||||
|
@ -198,13 +198,15 @@ def change_state(request, name, option=None):
|
|||
def state_pk(slug):
|
||||
return State.objects.get(used=True, type="charter", slug=slug).pk
|
||||
|
||||
info_msg = {
|
||||
state_pk("infrev"): 'The %s "%s" (%s) has been set to Informal IESG review by %s.' % (group.type.name, group.name, group.acronym, login.plain_name()),
|
||||
state_pk("intrev"): 'The %s "%s" (%s) has been set to Internal review by %s.\nPlease place it on the next IESG telechat and inform the IAB.' % (group.type.name, group.name, group.acronym, login.plain_name()),
|
||||
state_pk("extrev"): 'The %s "%s" (%s) has been set to External review by %s.\nPlease send out the external review announcement to the appropriate lists.\n\nSend the announcement to other SDOs: Yes\nAdditional recipients of the announcement: ' % (group.type.name, group.name, group.acronym, login.plain_name()),
|
||||
}
|
||||
info_msg = {}
|
||||
if group.type_id == "wg":
|
||||
info_msg[state_pk("infrev")] = 'The %s "%s" (%s) has been set to Informal IESG review by %s.' % (group.type.name, group.name, group.acronym, login.plain_name())
|
||||
info_msg[state_pk("intrev")] = 'The %s "%s" (%s) has been set to Internal review by %s.\nPlease place it on the next IESG telechat and inform the IAB.' % (group.type.name, group.name, group.acronym, login.plain_name())
|
||||
info_msg[state_pk("extrev")] = 'The %s "%s" (%s) has been set to External review by %s.\nPlease send out the external review announcement to the appropriate lists.\n\nSend the announcement to other SDOs: Yes\nAdditional recipients of the announcement: ' % (group.type.name, group.name, group.acronym, login.plain_name())
|
||||
|
||||
states_for_ballot_wo_extern = State.objects.filter(used=True, type="charter", slug="intrev").values_list("pk", flat=True)
|
||||
states_for_ballot_wo_extern = State.objects.none()
|
||||
if group.type_id == "wg":
|
||||
states_for_ballot_wo_extern = State.objects.filter(used=True, type="charter", slug="intrev").values_list("pk", flat=True)
|
||||
|
||||
return render_to_response('doc/charter/change_state.html',
|
||||
dict(form=form,
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.conf.urls import patterns
|
|||
from django.views.generic import RedirectView
|
||||
|
||||
from ietf.doc.feeds import DocumentChangesFeed, InLastCallFeed
|
||||
from ietf.wginfo.feeds import GroupChangesFeed
|
||||
from ietf.group.feeds import GroupChangesFeed
|
||||
from ietf.iesg.feeds import IESGAgendaFeed
|
||||
from ietf.ipr.feeds import LatestIprDisclosuresFeed
|
||||
from ietf.liaisons.feeds import LiaisonStatementsFeed
|
||||
|
|
|
@ -22,7 +22,7 @@ from ietf.group.utils import save_group_in_history, can_manage_group_type
|
|||
from ietf.ietfauth.utils import has_role
|
||||
from ietf.person.forms import EmailsField
|
||||
from ietf.person.models import Person, Email
|
||||
from ietf.wginfo.mails import email_secretariat
|
||||
from ietf.group.mails import email_secretariat
|
||||
|
||||
MAX_GROUP_DELEGATES = 3
|
||||
|
||||
|
@ -170,7 +170,7 @@ def submit_initial_charter(request, group_type, acronym=None):
|
|||
return redirect('charter_submit', name=group.charter.name, option="initcharter")
|
||||
|
||||
@login_required
|
||||
def edit(request, group_type, acronym=None, action="edit"):
|
||||
def edit(request, group_type=None, acronym=None, action="edit"):
|
||||
"""Edit or create a group, notifying parties as
|
||||
necessary and logging changes as group events."""
|
||||
if not can_manage_group_type(request.user, group_type):
|
||||
|
@ -314,7 +314,7 @@ def edit(request, group_type, acronym=None, action="edit"):
|
|||
)
|
||||
form = GroupForm(initial=init, group=group, group_type=group_type)
|
||||
|
||||
return render(request, 'wginfo/edit.html',
|
||||
return render(request, 'group/edit.html',
|
||||
dict(group=group,
|
||||
form=form,
|
||||
action=action))
|
||||
|
@ -348,7 +348,7 @@ def conclude(request, group_type, acronym):
|
|||
else:
|
||||
form = ConcludeForm()
|
||||
|
||||
return render(request, 'wginfo/conclude.html',
|
||||
return render(request, 'group/conclude.html',
|
||||
dict(form=form, group=group))
|
||||
|
||||
|
||||
|
@ -382,7 +382,7 @@ def customize_workflow(request, group_type, acronym):
|
|||
|
||||
# redirect so the back button works correctly, otherwise
|
||||
# repeated POSTs fills up the history
|
||||
return redirect("ietf.wginfo.edit.customize_workflow", group_type=group.type_id, acronym=group.acronym)
|
||||
return redirect("ietf.group.edit.customize_workflow", group_type=group.type_id, acronym=group.acronym)
|
||||
|
||||
if action == "setnextstates":
|
||||
try:
|
||||
|
@ -399,7 +399,7 @@ def customize_workflow(request, group_type, acronym):
|
|||
transitions, _ = GroupStateTransitions.objects.get_or_create(group=group, state=state)
|
||||
transitions.next_states = next_states
|
||||
|
||||
return redirect("ietf.wginfo.edit.customize_workflow", group_type=group.type_id, acronym=group.acronym)
|
||||
return redirect("ietf.group.edit.customize_workflow", group_type=group.type_id, acronym=group.acronym)
|
||||
|
||||
if action == "settagactive":
|
||||
active = request.POST.get("active") == "1"
|
||||
|
@ -413,7 +413,7 @@ def customize_workflow(request, group_type, acronym):
|
|||
else:
|
||||
group.unused_tags.add(tag)
|
||||
|
||||
return redirect("ietf.wginfo.edit.customize_workflow", group_type=group.type_id, acronym=group.acronym)
|
||||
return redirect("ietf.group.edit.customize_workflow", group_type=group.type_id, acronym=group.acronym)
|
||||
|
||||
# put some info for the template on tags and states
|
||||
unused_tags = group.unused_tags.all().values_list('slug', flat=True)
|
||||
|
@ -437,7 +437,7 @@ def customize_workflow(request, group_type, acronym):
|
|||
s.next_states_checkboxes = [(x in n, x in default_n, x) for x in states]
|
||||
s.used_next_states = [x for x in n if x.slug not in unused_states]
|
||||
|
||||
return render(request, 'wginfo/customize_workflow.html', {
|
||||
return render(request, 'group/customize_workflow.html', {
|
||||
'group': group,
|
||||
'states': states,
|
||||
'tags': tags,
|
|
@ -11,7 +11,7 @@ from ietf.doc.models import DocEvent
|
|||
|
||||
class GroupChangesFeed(Feed):
|
||||
feed_type = Atom1Feed
|
||||
description_template = "wginfo/feed_item_description.html"
|
||||
description_template = "group/feed_item_description.html"
|
||||
|
||||
def get_object(self, request, acronym):
|
||||
return Group.objects.get(acronym=acronym)
|
|
@ -49,6 +49,7 @@ from ietf.doc.models import State, DocAlias, RelatedDocument
|
|||
from ietf.doc.utils import get_chartering_type
|
||||
from ietf.doc.templatetags.ietf_filters import clean_whitespace
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.name.models import GroupTypeName
|
||||
from ietf.group.utils import get_charter_text, can_manage_group_type, milestone_reviewer_for_group_type
|
||||
from ietf.utils.pipe import pipe
|
||||
|
||||
|
@ -96,7 +97,7 @@ def wg_summary_area(request, group_type):
|
|||
|
||||
areas = [a for a in areas if a.groups]
|
||||
|
||||
return render(request, 'wginfo/1wg-summary.txt',
|
||||
return render(request, 'group/1wg-summary.txt',
|
||||
{ 'areas': areas },
|
||||
content_type='text/plain; charset=UTF-8')
|
||||
|
||||
|
@ -107,7 +108,7 @@ def wg_summary_acronym(request, group_type):
|
|||
groups = Group.objects.filter(type="wg", state="active").order_by("acronym").select_related("parent")
|
||||
for group in groups:
|
||||
group.chairs = sorted(roles(group, "chair"), key=extract_last_name)
|
||||
return render(request, 'wginfo/1wg-summary-by-acronym.txt',
|
||||
return render(request, 'group/1wg-summary-by-acronym.txt',
|
||||
{ 'areas': areas,
|
||||
'groups': groups },
|
||||
content_type='text/plain; charset=UTF-8')
|
||||
|
@ -122,7 +123,7 @@ def wg_charters(request, group_type):
|
|||
for group in area.groups:
|
||||
fill_in_charter_info(group, include_drafts=True)
|
||||
group.area = area
|
||||
return render(request, 'wginfo/1wg-charters.txt',
|
||||
return render(request, 'group/1wg-charters.txt',
|
||||
{ 'areas': areas },
|
||||
content_type='text/plain; charset=UTF-8')
|
||||
|
||||
|
@ -138,7 +139,7 @@ def wg_charters_by_acronym(request, group_type):
|
|||
for group in groups:
|
||||
fill_in_charter_info(group, include_drafts=True)
|
||||
group.area = areas.get(group.parent_id)
|
||||
return render(request, 'wginfo/1wg-charters-by-acronym.txt',
|
||||
return render(request, 'group/1wg-charters-by-acronym.txt',
|
||||
{ 'groups': groups },
|
||||
content_type='text/plain; charset=UTF-8')
|
||||
|
||||
|
@ -162,7 +163,7 @@ def active_wgs(request):
|
|||
for group in area.groups:
|
||||
group.chairs = sorted(roles(group, "chair"), key=extract_last_name)
|
||||
|
||||
return render(request, 'wginfo/active_wgs.html', { 'areas':areas })
|
||||
return render(request, 'group/active_wgs.html', { 'areas':areas })
|
||||
|
||||
def active_rgs(request):
|
||||
irtf = Group.objects.get(acronym="irtf")
|
||||
|
@ -172,25 +173,27 @@ def active_rgs(request):
|
|||
for group in groups:
|
||||
group.chairs = sorted(roles(group, "chair"), key=extract_last_name)
|
||||
|
||||
return render(request, 'wginfo/active_rgs.html', { 'irtf': irtf, 'groups': groups })
|
||||
return render(request, 'group/active_rgs.html', { 'irtf': irtf, 'groups': groups })
|
||||
|
||||
def bofs(request, group_type):
|
||||
groups = Group.objects.filter(type=group_type, state="bof")
|
||||
return render(request, 'wginfo/bofs.html',dict(groups=groups))
|
||||
|
||||
def chartering_groups(request, group_type):
|
||||
if group_type != "wg":
|
||||
raise Http404
|
||||
return render(request, 'group/bofs.html',dict(groups=groups))
|
||||
|
||||
def chartering_groups(request):
|
||||
charter_states = State.objects.filter(used=True, type="charter").exclude(slug__in=("approved", "notrev"))
|
||||
groups = Group.objects.filter(type=group_type, charter__states__in=charter_states).select_related("state", "charter")
|
||||
|
||||
for g in groups:
|
||||
g.chartering_type = get_chartering_type(g.charter)
|
||||
group_types = GroupTypeName.objects.filter(slug__in=("wg", "rg"))
|
||||
|
||||
return render(request, 'wginfo/chartering_groups.html',
|
||||
for t in group_types:
|
||||
t.chartering_groups = Group.objects.filter(type=t, charter__states__in=charter_states).select_related("state", "charter")
|
||||
t.can_manage = can_manage_group_type(request.user, t)
|
||||
|
||||
for g in t.chartering_groups:
|
||||
g.chartering_type = get_chartering_type(g.charter)
|
||||
|
||||
return render(request, 'group/chartering_groups.html',
|
||||
dict(charter_states=charter_states,
|
||||
groups=groups))
|
||||
group_types=group_types))
|
||||
|
||||
|
||||
def construct_group_menu_context(request, group, selected, others):
|
||||
|
@ -207,10 +210,10 @@ def construct_group_menu_context(request, group, selected, others):
|
|||
actions.append((u"Edit group", urlreverse("group_edit", kwargs=dict(group_type=group.type_id, acronym=group.acronym))))
|
||||
|
||||
if is_chair or can_manage:
|
||||
actions.append((u"Customize workflow", urlreverse("ietf.wginfo.edit.customize_workflow", kwargs=dict(group_type=group.type_id, acronym=group.acronym))))
|
||||
actions.append((u"Customize workflow", urlreverse("ietf.group.edit.customize_workflow", kwargs=dict(group_type=group.type_id, acronym=group.acronym))))
|
||||
|
||||
if group.state_id in ("active", "dormant") and can_manage:
|
||||
actions.append((u"Request closing group", urlreverse("ietf.wginfo.edit.conclude", kwargs=dict(group_type=group.type_id, acronym=group.acronym))))
|
||||
actions.append((u"Request closing group", urlreverse("ietf.group.edit.conclude", kwargs=dict(group_type=group.type_id, acronym=group.acronym))))
|
||||
|
||||
d = {
|
||||
"group": group,
|
||||
|
@ -260,7 +263,7 @@ def group_documents(request, group_type, acronym):
|
|||
|
||||
docs, meta, docs_related, meta_related = search_for_group_documents(group)
|
||||
|
||||
return render(request, 'wginfo/group_documents.html',
|
||||
return render(request, 'group/group_documents.html',
|
||||
construct_group_menu_context(request, group, "documents", {
|
||||
'docs': docs,
|
||||
'meta': meta,
|
||||
|
@ -309,7 +312,7 @@ def group_charter(request, group_type, acronym):
|
|||
|
||||
can_manage = can_manage_group_type(request.user, group.type_id)
|
||||
|
||||
return render(request, 'wginfo/group_charter.html',
|
||||
return render(request, 'group/group_charter.html',
|
||||
construct_group_menu_context(request, group, "charter", {
|
||||
"milestones_in_review": group.groupmilestone_set.filter(state="review"),
|
||||
"milestone_reviewer": milestone_reviewer_for_group_type(group_type),
|
||||
|
@ -324,7 +327,7 @@ def history(request, group_type, acronym):
|
|||
|
||||
events = group.groupevent_set.all().select_related('by').order_by('-time', '-id')
|
||||
|
||||
return render(request, 'wginfo/history.html',
|
||||
return render(request, 'group/history.html',
|
||||
construct_group_menu_context(request, group, "history", {
|
||||
"events": events,
|
||||
}))
|
||||
|
@ -443,7 +446,7 @@ def make_dot(group):
|
|||
node.nodename=nodename(node.name)
|
||||
node.styles = get_node_styles(node,group)
|
||||
|
||||
return render_to_string('wginfo/dot.txt',
|
||||
return render_to_string('group/dot.txt',
|
||||
dict( nodes=nodes, edges=edges )
|
||||
)
|
||||
|
|
@ -19,7 +19,7 @@ def email_secretariat(request, group, subject, text):
|
|||
text = strip_tags(text)
|
||||
|
||||
send_mail(request, to, None, full_subject,
|
||||
"wginfo/email_secretariat.txt",
|
||||
"group/email_secretariat.txt",
|
||||
dict(text=text,
|
||||
group=group,
|
||||
group_url=settings.IDTRACKER_BASE_URL + urlreverse('group_charter', kwargs=dict(group_type=group.type_id, acronym=group.acronym)),
|
||||
|
@ -89,7 +89,7 @@ def email_milestone_review_reminder(group, grace_period=7):
|
|||
|
||||
send_mail(None, to, None,
|
||||
subject,
|
||||
"wginfo/reminder_milestones_need_review.txt",
|
||||
"group/reminder_milestones_need_review.txt",
|
||||
dict(group=group,
|
||||
milestones=milestones,
|
||||
reviewer=milestone_reviewer_for_group_type(group.type_id),
|
||||
|
@ -116,7 +116,7 @@ def email_milestones_due(group, early_warning_days):
|
|||
|
||||
send_mail(None, to, None,
|
||||
subject,
|
||||
"wginfo/reminder_milestones_due.txt",
|
||||
"group/reminder_milestones_due.txt",
|
||||
dict(group=group,
|
||||
milestones=milestones,
|
||||
today=today,
|
||||
|
@ -143,7 +143,7 @@ def email_milestones_overdue(group):
|
|||
|
||||
send_mail(None, to, None,
|
||||
subject,
|
||||
"wginfo/reminder_milestones_overdue.txt",
|
||||
"group/reminder_milestones_overdue.txt",
|
||||
dict(group=group,
|
||||
milestones=milestones,
|
||||
url=settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
|
@ -14,7 +14,7 @@ from ietf.doc.utils import get_chartering_type
|
|||
from ietf.group.models import Group, GroupMilestone, MilestoneGroupEvent
|
||||
from ietf.group.utils import save_milestone_in_history, can_manage_group_type, milestone_reviewer_for_group_type
|
||||
from ietf.name.models import GroupMilestoneStateName
|
||||
from ietf.wginfo.mails import email_milestones_changed
|
||||
from ietf.group.mails import email_milestones_changed
|
||||
|
||||
def json_doc_names(docs):
|
||||
return json.dumps([{"id": doc.pk, "name": doc.name } for doc in docs])
|
||||
|
@ -317,7 +317,7 @@ def edit_milestones(request, group_type, acronym, milestone_set="current"):
|
|||
|
||||
forms.sort(key=lambda f: f.milestone.due if f.milestone else datetime.date.max)
|
||||
|
||||
return render(request, 'wginfo/edit_milestones.html',
|
||||
return render(request, 'group/edit_milestones.html',
|
||||
dict(group=group,
|
||||
title=title,
|
||||
forms=forms,
|
||||
|
@ -379,7 +379,7 @@ def reset_charter_milestones(request, group_type, acronym):
|
|||
|
||||
return redirect('group_edit_charter_milestones', group_type=group.type_id, acronym=group.acronym)
|
||||
|
||||
return render(request, 'wginfo/reset_charter_milestones.html',
|
||||
return render(request, 'group/reset_charter_milestones.html',
|
||||
dict(group=group,
|
||||
charter_milestones=charter_milestones,
|
||||
current_milestones=current_milestones,
|
|
@ -19,7 +19,7 @@ from ietf.utils.test_utils import TestCase
|
|||
from ietf.utils.mail import outbox
|
||||
from ietf.utils.test_data import make_test_data
|
||||
from ietf.utils.test_utils import login_testing_unauthorized
|
||||
from ietf.wginfo.mails import ( email_milestone_review_reminder, email_milestones_due,
|
||||
from ietf.group.mails import ( email_milestone_review_reminder, email_milestones_due,
|
||||
email_milestones_overdue, groups_needing_milestones_due_reminder,
|
||||
groups_needing_milestones_overdue_reminder, groups_with_milestones_needing_review )
|
||||
|
||||
|
@ -36,7 +36,7 @@ class GroupPagesTests(TestCase):
|
|||
draft = make_test_data()
|
||||
group = draft.group
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.active_groups', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.active_groups', kwargs=dict(group_type="wg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(group.parent.name in r.content)
|
||||
|
@ -44,7 +44,7 @@ class GroupPagesTests(TestCase):
|
|||
self.assertTrue(group.name in r.content)
|
||||
self.assertTrue(group.ad.plain_name() in r.content)
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.active_groups', kwargs=dict(group_type="rg"))
|
||||
url = urlreverse('ietf.group.info.active_groups', kwargs=dict(group_type="rg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
|
@ -57,7 +57,7 @@ class GroupPagesTests(TestCase):
|
|||
with open(os.path.join(self.charter_dir, "%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev)), "w") as f:
|
||||
f.write("This is a charter.")
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.wg_summary_area', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.wg_summary_area', kwargs=dict(group_type="wg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(group.parent.name in r.content)
|
||||
|
@ -65,14 +65,14 @@ class GroupPagesTests(TestCase):
|
|||
self.assertTrue(group.name in r.content)
|
||||
self.assertTrue(chair.address in r.content)
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.wg_summary_acronym', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.wg_summary_acronym', kwargs=dict(group_type="wg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(group.acronym in r.content)
|
||||
self.assertTrue(group.name in r.content)
|
||||
self.assertTrue(chair.address in r.content)
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.wg_charters', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.wg_charters', kwargs=dict(group_type="wg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(group.acronym in r.content)
|
||||
|
@ -81,7 +81,7 @@ class GroupPagesTests(TestCase):
|
|||
self.assertTrue(chair.address in r.content)
|
||||
self.assertTrue("This is a charter." in r.content)
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.wg_charters_by_acronym', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.wg_charters_by_acronym', kwargs=dict(group_type="wg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(group.acronym in r.content)
|
||||
|
@ -95,7 +95,7 @@ class GroupPagesTests(TestCase):
|
|||
group = draft.group
|
||||
group.charter.set_state(State.objects.get(used=True, type="charter", slug="intrev"))
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.chartering_groups', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.chartering_groups')
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
|
@ -107,7 +107,7 @@ class GroupPagesTests(TestCase):
|
|||
group.state_id = "bof"
|
||||
group.save()
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.bofs', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.info.bofs', kwargs=dict(group_type="wg"))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
|
@ -141,7 +141,7 @@ class GroupPagesTests(TestCase):
|
|||
name=draft2.name,
|
||||
)
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.group_documents', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.info.group_documents', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(draft.name in r.content)
|
||||
|
@ -151,7 +151,7 @@ class GroupPagesTests(TestCase):
|
|||
self.assertTrue(draft2.name in r.content)
|
||||
|
||||
# test the txt version too while we're at it
|
||||
url = urlreverse('ietf.wginfo.views.group_documents_txt', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.info.group_documents_txt', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(draft.name in r.content)
|
||||
|
@ -171,7 +171,7 @@ class GroupPagesTests(TestCase):
|
|||
due=datetime.date.today() + datetime.timedelta(days=100))
|
||||
milestone.docs.add(draft)
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.group_charter', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.info.group_charter', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(group.name in r.content)
|
||||
|
@ -190,7 +190,7 @@ class GroupPagesTests(TestCase):
|
|||
type="added_comment",
|
||||
by=Person.objects.get(name="(System)"))
|
||||
|
||||
url = urlreverse('ietf.wginfo.views.history', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.info.history', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(e.desc in r.content)
|
||||
|
@ -384,7 +384,7 @@ class GroupEditTests(TestCase):
|
|||
|
||||
group = Group.objects.get(acronym="mars")
|
||||
|
||||
url = urlreverse('ietf.wginfo.edit.conclude', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.edit.conclude', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
# normal get
|
||||
|
@ -825,7 +825,7 @@ class CustomizeWorkflowTests(TestCase):
|
|||
|
||||
group = Group.objects.get(acronym="mars")
|
||||
|
||||
url = urlreverse('ietf.wginfo.edit.customize_workflow', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.edit.customize_workflow', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
state = State.objects.get(used=True, type="draft-stream-ietf", slug="wg-lc")
|
|
@ -4,6 +4,8 @@ from django.conf.urls import patterns
|
|||
|
||||
urlpatterns = patterns('',
|
||||
(r'^(?P<acronym>[a-z0-9]+).json$', 'ietf.group.ajax.group_json'),
|
||||
(r'^chartering/$', 'ietf.group.info.chartering_groups'),
|
||||
(r'^chartering/create/(?P<group_type>(wg|rg))/$', 'ietf.group.edit.edit', {'action': "charter"}, "group_create"),
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -3,28 +3,28 @@
|
|||
from django.conf.urls import patterns
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
from ietf.wginfo import views, edit, milestones
|
||||
from ietf.group import info, edit, milestones
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^$', views.active_groups),
|
||||
(r'^$', info.active_groups),
|
||||
(r'^summary.txt', RedirectView.as_view(url='/wg/1wg-summary.txt')),
|
||||
(r'^summary-by-area.txt', RedirectView.as_view(url='/wg/1wg-summary.txt')),
|
||||
(r'^summary-by-acronym.txt', RedirectView.as_view(url='/wg/1wg-summary-by-acronym.txt')),
|
||||
(r'^1wg-summary.txt', views.wg_summary_area),
|
||||
(r'^1wg-summary-by-acronym.txt', views.wg_summary_acronym),
|
||||
(r'^1wg-charters.txt', views.wg_charters),
|
||||
(r'^1wg-charters-by-acronym.txt', views.wg_charters_by_acronym),
|
||||
(r'^chartering/$', views.chartering_groups),
|
||||
(r'^bofs/$', views.bofs),
|
||||
(r'^chartering/create/$', edit.edit, {'action': "charter"}, "group_create"),
|
||||
(r'^1wg-summary.txt', info.wg_summary_area),
|
||||
(r'^1wg-summary-by-acronym.txt', info.wg_summary_acronym),
|
||||
(r'^1wg-charters.txt', info.wg_charters),
|
||||
(r'^1wg-charters-by-acronym.txt', info.wg_charters_by_acronym),
|
||||
(r'^chartering/$', RedirectView.as_view(url='/group/chartering/')),
|
||||
(r'^chartering/create/$', RedirectView.as_view(url='/group/chartering/create/%(group_type)s/')),
|
||||
(r'^bofs/$', info.bofs),
|
||||
(r'^bofs/create/$', edit.edit, {'action': "create"}, "bof_create"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/documents/txt/$', views.group_documents_txt),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/$', views.group_documents, None, "group_docs"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/charter/$', views.group_charter, None, 'group_charter'),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/documents/txt/$', info.group_documents_txt),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/$', info.group_documents, None, "group_docs"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/charter/$', info.group_charter, None, 'group_charter'),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/init-charter/', edit.submit_initial_charter),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/history/$', views.history),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/deps/dot/$', views.dependencies_dot),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/deps/pdf/$', views.dependencies_pdf),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/history/$', info.history),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/deps/dot/$', info.dependencies_dot),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/deps/pdf/$', info.dependencies_pdf),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/edit/$', edit.edit, {'action': "edit"}, "group_edit"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/conclude/$', edit.conclude),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/milestones/$', milestones.edit_milestones, {'milestone_set': "current"}, "group_edit_milestones"),
|
|
@ -194,7 +194,6 @@ INSTALLED_APPS = (
|
|||
'ietf.meeting',
|
||||
'ietf.utils',
|
||||
'ietf.redirects',
|
||||
'ietf.wginfo',
|
||||
'ietf.submit',
|
||||
'ietf.sync',
|
||||
'ietf.community',
|
||||
|
|
|
@ -73,8 +73,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</div></div></li>
|
||||
|
||||
<li style="padding-top:0;"><a href="/wg/">Active WGs</a></li>
|
||||
<li><a href="{% url "ietf.wginfo.views.chartering_groups" group_type="wg" %}">Chartering WGs</a></li>
|
||||
<li><a href="{% url "ietf.wginfo.views.bofs" group_type="wg" %}">BoFs</a></li>
|
||||
<li><a href="{% url "ietf.group.info.chartering_groups" %}">Chartering WGs</a></li>
|
||||
<li><a href="{% url "ietf.group.info.bofs" group_type="wg" %}">BoFs</a></li>
|
||||
<li><a href="http://tools.ietf.org/wg/concluded">Concluded WGs</a></li>
|
||||
<li><a href="http://www.ietf.org/list/nonwg.html">Non-WG Lists</a></li>
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
{% if snapshot %}Snapshot of{% endif %}
|
||||
{% if doc.get_state_slug != "approved" %}Proposed{% endif %}
|
||||
Charter for "{{ group.name }}"
|
||||
(<a {% if group.type_id == "wg" or group.type_id == "rg" %}href="{% url "ietf.wginfo.views.group_charter" group_type=group.type_id acronym=group.acronym %}"{% endif %}>{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
(<a {% if group.type_id == "wg" or group.type_id == "rg" %}href="{% url "ietf.group.info.group_charter" group_type=group.type_id acronym=group.acronym %}"{% endif %}>{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
</div>
|
||||
|
||||
<table id="metatable" width="100%">
|
||||
|
@ -137,7 +137,7 @@
|
|||
</h3>
|
||||
|
||||
{% if milestones %}
|
||||
{% include "wginfo/milestones.html" %}
|
||||
{% include "group/milestones.html" %}
|
||||
{% else %}
|
||||
<p>No milestones for charter found.</p>
|
||||
{% endif %}
|
||||
|
|
4
ietf/templates/group/1wg-charters-by-acronym.txt
Normal file
4
ietf/templates/group/1wg-charters-by-acronym.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
{% autoescape off %}{% load ietf_filters %}{% for group in groups %}{{ group.acronym }}
|
||||
{% endfor %}
|
||||
|
||||
{% for group in groups %}{% include "group/group_entry_with_charter.txt" %}{% endfor %}{% endautoescape %}
|
|
@ -1,6 +1,6 @@
|
|||
{% autoescape off %}{% load ietf_filters %}{% for area in areas %}{% for group in area.groups %}{{ group.acronym }}
|
||||
{% endfor %}{% endfor %}
|
||||
|
||||
{% for area in areas %}{% for group in area.groups %}{% include "wginfo/group_entry_with_charter.txt" %}{% endfor %}{% endfor %}{% endautoescape %}
|
||||
{% for area in areas %}{% for group in area.groups %}{% include "group/group_entry_with_charter.txt" %}{% endfor %}{% endfor %}{% endautoescape %}
|
||||
|
||||
|
|
@ -7,4 +7,4 @@ The following Area Abbreviations are used in this document
|
|||
{{ area.acronym|upper }} - {{ area.name }}{% endfor %}
|
||||
{% for group in groups %}
|
||||
{{ group.name }} ({{ group.acronym }}) -- {{ group.parent.acronym|upper }}
|
||||
{% include "wginfo/group_entry.txt" %}{% endfor %}{% endautoescape %}
|
||||
{% include "group/group_entry.txt" %}{% endfor %}{% endautoescape %}
|
|
@ -7,5 +7,5 @@
|
|||
{{ ad.person.plain_name }} <{{ ad.email.address }}>{% endfor %}
|
||||
|
||||
{% for group in area.groups %}{{ group.name }} ({{ group.acronym }})
|
||||
{% include "wginfo/group_entry.txt" %}
|
||||
{% include "group/group_entry.txt" %}
|
||||
{% endfor %}{% endfor %}{% endautoescape %}
|
|
@ -22,7 +22,7 @@
|
|||
<table class="ietf-wg-table">
|
||||
{% for group in groups %}
|
||||
<tr>
|
||||
<td width="10%;"><a href="{% url "ietf.wginfo.views.group_documents" group_type=group.type_id acronym=group.acronym %}">{{ group.acronym }}</a></td>
|
||||
<td width="10%;"><a href="{% url "ietf.group.info.group_documents" group_type=group.type_id acronym=group.acronym %}">{{ group.acronym }}</a></td>
|
||||
<td width="50%">{{ group.name }}</td>
|
||||
<td width="40%">{% for chair in group.chairs %}<a href="mailto:{{ chair.email.address }}">{{ chair.person.plain_name }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}</td>
|
||||
</tr>
|
|
@ -80,7 +80,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<table class="ietf-wg-table">
|
||||
{% for group in area.groups %}
|
||||
<tr>
|
||||
<td width="10%;"><a href="{% url "ietf.wginfo.views.group_documents" group_type=group.type_id acronym=group.acronym %}">{{ group.acronym }}</a></td>
|
||||
<td width="10%;"><a href="{% url "ietf.group.info.group_documents" group_type=group.type_id acronym=group.acronym %}">{{ group.acronym }}</a></td>
|
||||
<td width="1%">{% for ad in area.ads %}{% if ad.person_id == group.ad_id %}<span title="AD for {{ group.acronym }}: {{ ad.person }}" class="square bgcolor{{forloop.counter}}"></span>{% endif %}{% endfor %}</td>
|
||||
<td width="50%">{{ group.name }}</td>
|
||||
<td width="39%">{% for chair in group.chairs %}<a href="mailto:{{ chair.email.address }}">{{ chair.person.plain_name }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}</td>
|
65
ietf/templates/group/chartering_groups.html
Normal file
65
ietf/templates/group/chartering_groups.html
Normal file
|
@ -0,0 +1,65 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Chartering or Re-Chartering Groups{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% load ietf_filters %}
|
||||
{% load ballot_icon %}
|
||||
|
||||
<h1>Chartering or Re-Chartering Groups</h1>
|
||||
|
||||
<p>Groups with a charter in state
|
||||
{% for s in charter_states %}{% if not forloop.first %}, {% if forloop.last %}or {% endif %}{% endif %}<i>{{ s.name }}</i>{% endfor %}.
|
||||
</p>
|
||||
|
||||
|
||||
{% for t in group_types %}
|
||||
<h2>{{ t.name }}s</h2>
|
||||
|
||||
{% if t.can_manage %}
|
||||
<p><a href="{% url "group_create" group_type=t.pk %}">Start chartering new {{ t.name }}</a></p>
|
||||
{% endif %}
|
||||
|
||||
{% if not t.chartering_groups %}
|
||||
<p><b>No groups found.</b></p>
|
||||
{% else %}
|
||||
<table class="ietf-table ietf-doctable">
|
||||
<tr>
|
||||
<th>Group</th>
|
||||
<th>Charter</th>
|
||||
<th>Date</th>
|
||||
<th colspan="2">Status</th>
|
||||
</tr>
|
||||
{% for g in t.chartering_groups %}
|
||||
<tr class="{{ forloop.counter|divisibleby:2|yesno:"oddrow,evenrow" }}">
|
||||
<td class="acronym">
|
||||
<a href="{% url "group_charter" group_type=g.type_id acronym=g.acronym %}">{{ g.acronym }}</a>
|
||||
</td>
|
||||
<td class="title">
|
||||
<a href="{% url "doc_view" name=g.charter.name %}">{{ g.name }}</a>
|
||||
</td>
|
||||
<td class="date">{{ g.charter.time|date:"Y-m-d" }}</td>
|
||||
<td class="status">
|
||||
{{ g.charter.get_state.name }}
|
||||
{% if g.chartering_type == "initial" %}(Initial Chartering){% endif %}
|
||||
{% if g.chartering_type == "recharter" %}(Rechartering){% endif %}
|
||||
{% if not g.chartering_type and g.state_id != "active" %}({{ g.state.name }}){% endif %}
|
||||
|
||||
{% if g.charter.telechat_date %}<br/>IESG Telechat: {{ g.charter.telechat_date|date:"Y-m-d" }}{% endif %}
|
||||
</td>
|
||||
<td class="ballot">
|
||||
{% ballot_icon g.charter %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
|
@ -83,10 +83,10 @@ this list</a> to the milestones currently in use for the {{ group.acronym }} {{
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="edit-milestone{% if form.changed %} changed{% endif %}"><td colspan="2">{% include "wginfo/milestone_form.html" %}</td></tr>
|
||||
<tr class="edit-milestone{% if form.changed %} changed{% endif %}"><td colspan="2">{% include "group/milestone_form.html" %}</td></tr>
|
||||
{% endfor %}
|
||||
<tr class="milestone add"><td></td><td>Add {% if milestone_set == "chartering" %}charter{% endif%} milestone {% if needs_review %}for {{ reviewer }} review{% endif %}</td></tr>
|
||||
<tr class="edit-milestone template"><td colspan="2">{% include "wginfo/milestone_form.html" with form=empty_form %}</td></tr>
|
||||
<tr class="edit-milestone template"><td colspan="2">{% include "group/milestone_form.html" with form=empty_form %}</td></tr>
|
||||
</table>
|
||||
|
||||
<div class="actions">
|
|
@ -66,10 +66,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
<div class="ietf-navset">
|
||||
<div>
|
||||
<a {% if selected == "documents" %}class="selected"{% else %}href="{% url "ietf.wginfo.views.group_documents" group_type=group.type_id acronym=group.acronym %}"{% endif %}>Documents</a> |
|
||||
<a {% if selected == "charter" %}class="selected"{% else %}href="{% url "ietf.wginfo.views.group_charter" group_type=group.type_id acronym=group.acronym %}"{% endif %}>Charter</a> |
|
||||
<a {% if selected == "history" %}class="selected"{% else %}href="{% url "ietf.wginfo.views.history" group_type=group.type_id acronym=group.acronym %}"{% endif %}>History</a>
|
||||
| <a href="{% url 'ietf.wginfo.views.dependencies_pdf' group_type=group.type_id acronym=group.acronym %}">Dependency Graph</a>
|
||||
<a {% if selected == "documents" %}class="selected"{% else %}href="{% url "ietf.group.info.group_documents" group_type=group.type_id acronym=group.acronym %}"{% endif %}>Documents</a> |
|
||||
<a {% if selected == "charter" %}class="selected"{% else %}href="{% url "ietf.group.info.group_charter" group_type=group.type_id acronym=group.acronym %}"{% endif %}>Charter</a> |
|
||||
<a {% if selected == "history" %}class="selected"{% else %}href="{% url "ietf.group.info.history" group_type=group.type_id acronym=group.acronym %}"{% endif %}>History</a>
|
||||
| <a href="{% url 'ietf.group.info.dependencies_pdf' group_type=group.type_id acronym=group.acronym %}">Dependency Graph</a>
|
||||
{% if group.list_archive|startswith:"http:" or group.list_archive|startswith:"https:" or group.list_archive|startswith:"ftp:" %}
|
||||
| <a href="{{ group.list_archive }}">List Archive »</a>
|
||||
{% endif %}
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "wginfo/group_base.html" %}
|
||||
{% extends "group/group_base.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% block group_subtitle %}Charter{% endblock %}
|
||||
|
@ -47,7 +47,7 @@ is occasionally incorrect.</span>
|
|||
{% else %}
|
||||
none
|
||||
{% if can_manage %}
|
||||
- <a href="{% url "ietf.wginfo.edit.submit_initial_charter" group_type=group.type_id acronym=group.acronym %}">Submit Charter</a>
|
||||
- <a href="{% url "ietf.group.edit.submit_initial_charter" group_type=group.type_id acronym=group.acronym %}">Submit Charter</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
|
@ -158,7 +158,7 @@ is occasionally incorrect.</span>
|
|||
|
||||
<h2>{% if group.state_id == "proposed" %}Proposed{% endif %} Milestones</h2>
|
||||
|
||||
{% include "wginfo/milestones.html" with milestones=group.milestones %}
|
||||
{% include "group/milestones.html" with milestones=group.milestones %}
|
||||
|
||||
{% if milestones_in_review %}
|
||||
<p>+ {{ milestones_in_review|length }} new milestone{{ milestones_in_review|pluralize }}
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "wginfo/group_base.html" %}
|
||||
{% extends "group/group_base.html" %}
|
||||
|
||||
{% block group_subtitle %}Documents{% endblock %}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "wginfo/group_base.html" %}
|
||||
{% extends "group/group_base.html" %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block group_subtitle %}History{% endblock %}
|
|
@ -17,7 +17,7 @@ div.milestones-for-group { margin: 0.5em 0; }
|
|||
|
||||
<div class="milestones-for-group">{{ g.name }} ({{ g.acronym }}) <a href="{% url "group_edit_milestones" group_type=g.type_id acronym=g.acronym %}">has new milestones</a>:</div>
|
||||
|
||||
{% include "wginfo/milestones.html" with milestones=g.milestones_needing_review %}
|
||||
{% include "group/milestones.html" with milestones=g.milestones_needing_review %}
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
{% autoescape off %}{% load ietf_filters %}{% for group in groups %}{{ group.acronym }}
|
||||
{% endfor %}
|
||||
|
||||
{% for group in groups %}{% include "wginfo/group_entry_with_charter.txt" %}{% endfor %}{% endautoescape %}
|
|
@ -1,58 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Chartering or Re-Chartering Groups{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% load ietf_filters %}
|
||||
{% load ballot_icon %}
|
||||
|
||||
<h1>Chartering or Re-Chartering Groups</h1>
|
||||
|
||||
<p>Groups with a charter in state
|
||||
{% for s in charter_states %}{% if not forloop.first %}, {% if forloop.last %}or {% endif %}{% endif %}<i>{{ s.name }}</i>{% endfor %}.</p>
|
||||
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
<p><a href="{% url "group_create" group_type="wg" %}">Start chartering new WG</a></p>
|
||||
{% endif %}
|
||||
|
||||
{% if not groups %}
|
||||
<p><b>No groups found.</b></p>
|
||||
{% else %}
|
||||
<table class="ietf-table ietf-doctable">
|
||||
<tr>
|
||||
<th>Group</th>
|
||||
<th>Charter</th>
|
||||
<th>Date</th>
|
||||
<th colspan="2">Status</th>
|
||||
</tr>
|
||||
{% for g in groups %}
|
||||
<tr class="{{ forloop.counter|divisibleby:2|yesno:"oddrow,evenrow" }}">
|
||||
<td class="acronym">
|
||||
<a href="{% url "group_charter" group_type=g.type_id acronym=g.acronym %}">{{ g.acronym }}</a>
|
||||
</td>
|
||||
<td class="title">
|
||||
<a href="{% url "doc_view" name=g.charter.name %}">{{ g.name }}</a>
|
||||
</td>
|
||||
<td class="date">{{ g.charter.time|date:"Y-m-d" }}</td>
|
||||
<td class="status">
|
||||
{{ g.charter.get_state.name }}
|
||||
{% if g.chartering_type == "initial" %}(Initial Chartering){% endif %}
|
||||
{% if g.chartering_type == "recharter" %}(Rechartering){% endif %}
|
||||
{% if not g.chartering_type and g.state_id != "active" %}({{ g.state.name }}){% endif %}
|
||||
|
||||
{% if g.charter.telechat_date %}<br/>IESG Telechat: {{ g.charter.telechat_date|date:"Y-m-d" }}{% endif %}
|
||||
</td>
|
||||
<td class="ballot">
|
||||
{% ballot_icon g.charter %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
|
@ -53,8 +53,8 @@ urlpatterns = patterns('',
|
|||
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', { 'sitemaps': sitemaps}),
|
||||
(r'^submit/', include('ietf.submit.urls')),
|
||||
(r'^sync/', include('ietf.sync.urls')),
|
||||
(r'^(?P<group_type>(wg|rg))/', include('ietf.wginfo.urls')),
|
||||
(r'^stream/', include('ietf.group.stream_urls')),
|
||||
(r'^(?P<group_type>(wg|rg))/', include('ietf.group.urls_info')),
|
||||
(r'^stream/', include('ietf.group.urls_stream')),
|
||||
(r'^nomcom/', include('ietf.nomcom.urls')),
|
||||
(r'^templates/', include('ietf.dbtemplate.urls')),
|
||||
|
||||
|
|
1
ietf/wginfo/.gitignore
vendored
1
ietf/wginfo/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
/*.pyc
|
|
@ -1,2 +0,0 @@
|
|||
# Copyright The IETF Trust 2008, All Rights Reserved
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
# Copyright The IETF Trust 2008, All Rights Reserved
|
||||
|
Loading…
Reference in a new issue