Skip to content

Commit 976d0b9

Browse files
committed
Turn charter page for non-chartering groups into about page, fix a bunch of potentially broken links due to the split between group-type prefixed URLs and /group/ ones
- Legacy-Id: 7805
1 parent 544cd70 commit 976d0b9

19 files changed

Lines changed: 60 additions & 49 deletions

ietf/group/edit.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77

88
from django import forms
99
from django.shortcuts import render, get_object_or_404, redirect
10-
from django.http import HttpResponseForbidden, Http404
10+
from django.http import HttpResponse, HttpResponseForbidden, Http404, HttpResponseRedirect
1111
from django.utils.html import mark_safe
1212
from django.utils.text import slugify
13-
from django.http import Http404, HttpResponse
1413
from django.contrib.auth.decorators import login_required
1514

1615
import debug # pyflakes:ignore
@@ -304,7 +303,7 @@ def diff(attr, name):
304303
if action=="charter":
305304
return redirect('charter_submit', name=group.charter.name, option="initcharter")
306305

307-
return redirect('group_charter', group_type=group.type_id, acronym=group.acronym)
306+
return HttpResponseRedirect(group.about_url())
308307
else: # form.is_valid()
309308
if not new_group:
310309
init = dict(name=group.name,
@@ -337,11 +336,11 @@ class ConcludeForm(forms.Form):
337336
instructions = forms.CharField(widget=forms.Textarea(attrs={'rows': 30}), required=True)
338337

339338
@login_required
340-
def conclude(request, group_type, acronym):
339+
def conclude(request, acronym, group_type=None):
341340
"""Request the closing of group, prompting for instructions."""
342341
group = get_group_or_404(acronym, group_type)
343342

344-
if not can_manage_group_type(request.user, group_type):
343+
if not can_manage_group_type(request.user, group.type_id):
345344
return HttpResponseForbidden("You don't have permission to access this view")
346345

347346
if request.method == 'POST':
@@ -356,13 +355,15 @@ def conclude(request, group_type, acronym):
356355
e.desc = "Requested closing group"
357356
e.save()
358357

359-
return redirect('group_charter', group_type=group.type_id, acronym=group.acronym)
358+
return redirect(group.features.about_page, group_type=group_type, acronym=group.acronym)
360359
else:
361360
form = ConcludeForm()
362361

363-
return render(request, 'group/conclude.html',
364-
dict(form=form, group=group))
365-
362+
return render(request, 'group/conclude.html', {
363+
'form': form,
364+
'group': group,
365+
'group_type': group_type,
366+
})
366367

367368
@login_required
368369
def customize_workflow(request, group_type, acronym):

ietf/group/features.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ class GroupFeatures(object):
77
has_documents = False # i.e. drafts/RFCs
88
has_materials = False
99
customize_workflow = False
10-
default_tab = "group_charter"
10+
about_page = "group_about"
11+
default_tab = about_page
1112
material_types = ["slides"]
1213

1314
def __init__(self, group):
@@ -19,3 +20,6 @@ def __init__(self, group):
1920
self.default_tab = "group_docs"
2021
elif group.type_id in ("team",):
2122
self.has_materials = True
23+
24+
if self.has_chartering_process:
25+
about_page = "group_charter"

ietf/group/feeds.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def title(self, obj):
2222
def link(self, obj):
2323
if not obj:
2424
raise FeedDoesNotExist
25-
return urlreverse('group_charter', kwargs=dict(group_type=obj.type_id, acronym=obj.acronym))
25+
return group.about_url()
2626

2727
def description(self, obj):
2828
return self.title(obj)
@@ -40,7 +40,7 @@ def item_link(self, obj):
4040
if isinstance(obj, DocEvent):
4141
return urlreverse("doc_view", kwargs={'name': obj.doc_id })
4242
elif isinstance(obj, GroupEvent):
43-
return urlreverse('group_charter', kwargs=dict(group_type=obj.group.type_id, acronym=obj.group.acronym))
43+
return group.about_url()
4444

4545
def item_pubdate(self, obj):
4646
return obj.time

ietf/group/info.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,10 @@ def construct_group_menu_context(request, group, selected, group_type, others):
272272
entries = []
273273
if group.features.has_documents:
274274
entries.append(("Documents", urlreverse("ietf.group.info.group_documents", kwargs=kwargs)))
275-
entries.append(("Charter", urlreverse("ietf.group.info.group_charter", kwargs=kwargs)))
275+
if group.features.has_chartering_process:
276+
entries.append(("Charter", urlreverse("group_charter", kwargs=kwargs)))
277+
else:
278+
entries.append(("About", urlreverse("group_about", kwargs=kwargs)))
276279
if group.features.has_materials and get_group_materials(group).exists():
277280
entries.append(("Materials", urlreverse("ietf.group.info.materials", kwargs=kwargs)))
278281
entries.append(("History", urlreverse("ietf.group.info.history", kwargs=kwargs)))
@@ -400,35 +403,22 @@ def group_documents_txt(request, acronym, group_type=None):
400403

401404
return HttpResponse(u"\n".join(rows), content_type='text/plain; charset=UTF-8')
402405

403-
def group_charter(request, acronym, group_type=None):
406+
def group_about(request, acronym, group_type=None):
404407
group = get_group_or_404(acronym, group_type)
405408

406409
fill_in_charter_info(group)
407410

408411
e = group.latest_event(type__in=("changed_state", "requested_close",))
409412
requested_close = group.state_id != "conclude" and e and e.type == "requested_close"
410413

411-
verbose_group_types = {
412-
"wg": "Working Group",
413-
"rg": "Research Group",
414-
"team": "Team",
415-
}
416-
417414
can_manage = can_manage_group_type(request.user, group.type_id)
418415

419-
if group.features.has_chartering_process:
420-
description = group.charter_text
421-
else:
422-
description = group.description or "No description yet."
423-
424-
return render(request, 'group/group_charter.html',
425-
construct_group_menu_context(request, group, "charter", group_type, {
416+
return render(request, 'group/group_about.html',
417+
construct_group_menu_context(request, group, "charter" if group.features.has_chartering_process else "about", group_type, {
426418
"milestones_in_review": group.groupmilestone_set.filter(state="review"),
427419
"milestone_reviewer": milestone_reviewer_for_group_type(group_type),
428420
"requested_close": requested_close,
429-
"verbose_group_type": verbose_group_types.get(group.type_id, "Group"),
430421
"can_manage": can_manage,
431-
"description": description,
432422
}))
433423

434424

ietf/group/mails.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def email_secretariat(request, group, subject, text):
2222
"group/email_secretariat.txt",
2323
dict(text=text,
2424
group=group,
25-
group_url=settings.IDTRACKER_BASE_URL + urlreverse('group_charter', kwargs=dict(group_type=group.type_id, acronym=group.acronym)),
25+
group_url=settings.IDTRACKER_BASE_URL + group.about_url(),
2626
charter_url=settings.IDTRACKER_BASE_URL + urlreverse('doc_view', kwargs=dict(name=group.charter.name)),
2727
)
2828
)
@@ -31,7 +31,7 @@ def email_milestones_changed(request, group, changes):
3131
def wrap_up_email(to, text):
3232
text = wrap(strip_tags(text), 70)
3333
text += "\n\n"
34-
text += u"URL: %s" % (settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(group_type=group.type_id, acronym=group.acronym)))
34+
text += u"URL: %s" % (settings.IDTRACKER_BASE_URL + group.about_url())
3535

3636
send_mail_text(request, to, None,
3737
u"Milestones changed for %s %s" % (group.acronym, group.type.name),
@@ -121,7 +121,7 @@ def email_milestones_due(group, early_warning_days):
121121
milestones=milestones,
122122
today=today,
123123
early_warning_days=early_warning_days,
124-
url=settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(group_type=group.type_id, acronym=group.acronym))
124+
url=settings.IDTRACKER_BASE_URL + group.about_url(),
125125
))
126126

127127
def groups_needing_milestones_due_reminder(early_warning_days):
@@ -146,7 +146,7 @@ def email_milestones_overdue(group):
146146
"group/reminder_milestones_overdue.txt",
147147
dict(group=group,
148148
milestones=milestones,
149-
url=settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(group_type=group.type_id, acronym=group.acronym))
149+
url=settings.IDTRACKER_BASE_URL + group.about_url(),
150150
))
151151

152152
def groups_needing_milestones_overdue_reminder(grace_period=30):

ietf/group/milestones.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import json
66

77
from django import forms
8-
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseBadRequest
8+
from django.http import HttpResponse, HttpResponseForbidden, HttpResponseBadRequest, HttpResponseRedirect
99
from django.shortcuts import render, get_object_or_404, redirect
1010
from django.contrib.auth.decorators import login_required
1111

@@ -311,7 +311,7 @@ def save_milestone_form(f):
311311
if milestone_set == "charter":
312312
return redirect('doc_view', name=group.charter.canonical_name())
313313
else:
314-
return redirect('group_charter', group_type=group.type_id, acronym=group.acronym)
314+
return HttpResponseRedirect(group.about_url())
315315
else:
316316
for m in milestones:
317317
forms.append(MilestoneForm(instance=m, needs_review=needs_review))

ietf/group/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ def name_with_acronym(self):
3636
res += " %s (%s)" % (self.type, self.acronym)
3737
return res
3838

39+
def about_url(self):
40+
# bridge gap between group-type prefixed URLs and /group/ ones
41+
from django.core.urlresolvers import reverse as urlreverse
42+
kwargs = { 'acronym': self.acronym }
43+
if self.type_id in ("wg", "rg"):
44+
kwargs["group_type"] = self.type_id
45+
return urlreverse(self.features.about_page, kwargs=kwargs)
46+
3947
class Meta:
4048
abstract = True
4149

ietf/group/tests_info.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ def test_group_charter(self):
183183
due=datetime.date.today() + datetime.timedelta(days=100))
184184
milestone.docs.add(draft)
185185

186-
url = urlreverse('ietf.group.info.group_charter', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
186+
url = group.about_url()
187187
r = self.client.get(url)
188188
self.assertEqual(r.status_code, 200)
189189
self.assertTrue(group.name in r.content)

ietf/group/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
# FIXME: the things below are duplicated in urls_info.py, need to unify these at some point
1111
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/$', 'ietf.group.info.group_home', None, "group_home"),
1212
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/documents/$', 'ietf.group.info.group_documents', None, "group_docs"),
13-
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/charter/$', 'ietf.group.info.group_charter', None, 'group_charter'),
13+
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/charter/$', 'ietf.group.info.group_about', None, 'group_charter'),
1414
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/history/$', 'ietf.group.info.history'),
1515
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/deps/dot/$', 'ietf.group.info.dependencies_dot'),
1616
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/deps/pdf/$', 'ietf.group.info.dependencies_pdf'),
@@ -23,6 +23,7 @@
2323
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/ajax/searchdocs/$', 'ietf.group.milestones.ajax_search_docs', None, "group_ajax_search_docs"),
2424
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/workflow/$', 'ietf.group.edit.customize_workflow'),
2525

26+
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/about/(?P<group_type>.)?$', 'ietf.group.info.group_about', None, 'group_about'),
2627
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/materials/$', 'ietf.group.info.materials', None, "group_materials"),
2728
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/materials/new/$', 'ietf.group.edit.choose_material_type', None, "group_choose_material_type"),
2829
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/materials/new/(?P<doc_type>[\w-]+)/$', 'ietf.group.edit.edit_material', { 'action': "new" }, "group_new_material"),

ietf/group/urls_info.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/documents/txt/$', info.group_documents_txt),
2222
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/$', info.group_home, None, "group_home"),
2323
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/documents/$', info.group_documents, None, "group_docs"),
24-
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/charter/$', info.group_charter, None, 'group_charter'),
24+
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/charter/$', info.group_about, None, 'group_charter'),
2525
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/history/$', info.history),
2626
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/deps/dot/$', info.dependencies_dot),
2727
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/deps/pdf/$', info.dependencies_pdf),

0 commit comments

Comments
 (0)