Add simple overview page with links to concluded groups, use that instead of the tools page for the left menu link

- Legacy-Id: 7567
This commit is contained in:
Ole Laursen 2014-04-03 11:49:05 +00:00
parent dbead00fcc
commit 357f88c0d6
6 changed files with 92 additions and 17 deletions

View file

@ -48,7 +48,7 @@ from ietf.doc.views_search import SearchForm, retrieve_search_results
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.group.models import Group, Role, ChangeStateGroupEvent
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
@ -185,7 +185,7 @@ def chartering_groups(request):
group_types = GroupTypeName.objects.filter(slug__in=("wg", "rg"))
for t in group_types:
t.chartering_groups = Group.objects.filter(type=t, charter__states__in=charter_states).select_related("state", "charter")
t.chartering_groups = Group.objects.filter(type=t, charter__states__in=charter_states).select_related("state", "charter").order_by("acronym")
t.can_manage = can_manage_group_type(request.user, t.slug)
for g in t.chartering_groups:
@ -195,6 +195,26 @@ def chartering_groups(request):
dict(charter_states=charter_states,
group_types=group_types))
def concluded_groups(request):
group_types = GroupTypeName.objects.filter(slug__in=("wg", "rg"))
for t in group_types:
t.concluded_groups = Group.objects.filter(type=t, state__in=("conclude", "bof-conc")).select_related("state", "charter").order_by("acronym")
# add start/conclusion date
d = dict((g.pk, g) for g in t.concluded_groups)
for g in t.concluded_groups:
g.start_date = g.conclude_date = None
for e in ChangeStateGroupEvent.objects.filter(group__in=t.concluded_groups, state="active").order_by("-time"):
d[e.group_id].start_date = e.time
for e in ChangeStateGroupEvent.objects.filter(group__in=t.concluded_groups, state="conclude").order_by("time"):
d[e.group_id].conclude_date = e.time
return render(request, 'group/concluded_groups.html',
dict(group_types=group_types))
def construct_group_menu_context(request, group, selected, others):
"""Return context with info for the group menu filled in."""

View file

@ -101,6 +101,18 @@ class GroupPagesTests(TestCase):
q = PyQuery(r.content)
self.assertEqual(len(q('table.ietf-doctable td.acronym a:contains("%s")' % group.acronym)), 1)
def test_concluded_groups(self):
draft = make_test_data()
group = draft.group
group.state = GroupStateName.objects.get(used=True, slug="conclude")
group.save()
url = urlreverse('ietf.group.info.concluded_groups')
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertEqual(len(q('table.concluded-groups a:contains("%s")' % group.acronym)), 1)
def test_bofs(self):
draft = make_test_data()
group = draft.group

View file

@ -6,6 +6,7 @@ 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"),
(r'^concluded/$', 'ietf.group.info.concluded_groups'),
)

View file

@ -18,18 +18,18 @@ urlpatterns = patterns('',
(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/$', 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/$', 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"),
(r'^(?P<acronym>[a-zA-Z0-9-]+)/milestones/charter/$', milestones.edit_milestones, {'milestone_set': "charter"}, "group_edit_charter_milestones"),
(r'^(?P<acronym>[a-zA-Z0-9-]+)/milestones/charter/reset/$', milestones.reset_charter_milestones, None, "group_reset_charter_milestones"),
(r'^(?P<acronym>[a-zA-Z0-9-]+)/ajax/searchdocs/$', milestones.ajax_search_docs, None, "group_ajax_search_docs"),
(r'^(?P<acronym>[a-zA-Z0-9-]+)/workflow/$', edit.customize_workflow),
(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-._]+)/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-._]+)/init-charter/', edit.submit_initial_charter),
(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"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/milestones/charter/$', milestones.edit_milestones, {'milestone_set': "charter"}, "group_edit_charter_milestones"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/milestones/charter/reset/$', milestones.reset_charter_milestones, None, "group_reset_charter_milestones"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/ajax/searchdocs/$', milestones.ajax_search_docs, None, "group_ajax_search_docs"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/workflow/$', edit.customize_workflow),
)

View file

@ -76,7 +76,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<li style="padding-top:0;"><a href="{% url "ietf.group.info.active_groups" group_type="rg" %}">Active RGs</a></li>
<li><a href="{% url "ietf.group.info.chartering_groups" %}">Chartering</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="{% url "ietf.group.info.concluded_groups" %}">Concluded</a></li>
<li><a href="http://www.ietf.org/list/nonwg.html">Non-WG Lists</a></li>

View file

@ -0,0 +1,42 @@
{% extends "base.html" %}
{% block title %}Concluded Groups{% endblock %}
{% block morecss %}
.concluded-groups .active-period { display: inline-block; margin-left: 0.5em; font-style: italic; }
.note { font-style: italic; }
{% endblock %}
{% block content %}
<h1>Concluded Groups</h1>
<p>Note that the information on historical groups may be inaccurate.</p>
{% for t in group_types %}
<h2>{{ t.name }}s</h2>
{% if t.slug == "wg" %}<p class="note">Some additional concluded WGs may
be present at <a href="http://tools.ietf.org/wg/concluded">tools.ietf.org/wg/concluded/</a></p>{% endif %}
{% if not t.concluded_groups %}
<p><b>No groups found.</b></p>
{% else %}
<table class="concluded-groups">
{% for g in t.concluded_groups %}
<tr>
<td>
<a href="{% url "group_charter" group_type=g.type_id acronym=g.acronym %}">{{ g.acronym }}</a>
</td>
<td>{{ g.name }}
<span class="active-period">({% if g.start_date %}{{ g.start_date|date:"M. Y" }}{% else %}?{% endif %}
-
{% if g.conclude_date %}{{ g.conclude_date|date:"M. Y" }}{% else %}?{% endif %})</span>
</td>
</tr>
{% endfor %}
</table>
{% endif %}
{% endfor %}
{% endblock %}