From 357f88c0d6bea1d629b9868784f1cfd1b5a5840f Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Thu, 3 Apr 2014 11:49:05 +0000 Subject: [PATCH] Add simple overview page with links to concluded groups, use that instead of the tools page for the left menu link - Legacy-Id: 7567 --- ietf/group/info.py | 24 +++++++++++-- ietf/group/tests_info.py | 12 +++++++ ietf/group/urls.py | 1 + ietf/group/urls_info.py | 28 +++++++-------- ietf/templates/base/left_menu.html | 2 +- ietf/templates/group/concluded_groups.html | 42 ++++++++++++++++++++++ 6 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 ietf/templates/group/concluded_groups.html diff --git a/ietf/group/info.py b/ietf/group/info.py index bca48bfc5..4068873f4 100644 --- a/ietf/group/info.py +++ b/ietf/group/info.py @@ -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.""" diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 59acd2e41..4e1b26b3f 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -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 diff --git a/ietf/group/urls.py b/ietf/group/urls.py index c7a58ce98..ea049c7e5 100644 --- a/ietf/group/urls.py +++ b/ietf/group/urls.py @@ -6,6 +6,7 @@ urlpatterns = patterns('', (r'^(?P[a-z0-9]+).json$', 'ietf.group.ajax.group_json'), (r'^chartering/$', 'ietf.group.info.chartering_groups'), (r'^chartering/create/(?P(wg|rg))/$', 'ietf.group.edit.edit', {'action': "charter"}, "group_create"), + (r'^concluded/$', 'ietf.group.info.concluded_groups'), ) diff --git a/ietf/group/urls_info.py b/ietf/group/urls_info.py index 979732492..0039047b5 100644 --- a/ietf/group/urls_info.py +++ b/ietf/group/urls_info.py @@ -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[a-zA-Z0-9-]+)/documents/txt/$', info.group_documents_txt), - (r'^(?P[a-zA-Z0-9-]+)/$', info.group_documents, None, "group_docs"), - (r'^(?P[a-zA-Z0-9-]+)/charter/$', info.group_charter, None, 'group_charter'), - (r'^(?P[a-zA-Z0-9-]+)/init-charter/', edit.submit_initial_charter), - (r'^(?P[a-zA-Z0-9-]+)/history/$', info.history), - (r'^(?P[a-zA-Z0-9-]+)/deps/dot/$', info.dependencies_dot), - (r'^(?P[a-zA-Z0-9-]+)/deps/pdf/$', info.dependencies_pdf), - (r'^(?P[a-zA-Z0-9-]+)/edit/$', edit.edit, {'action': "edit"}, "group_edit"), - (r'^(?P[a-zA-Z0-9-]+)/conclude/$', edit.conclude), - (r'^(?P[a-zA-Z0-9-]+)/milestones/$', milestones.edit_milestones, {'milestone_set': "current"}, "group_edit_milestones"), - (r'^(?P[a-zA-Z0-9-]+)/milestones/charter/$', milestones.edit_milestones, {'milestone_set': "charter"}, "group_edit_charter_milestones"), - (r'^(?P[a-zA-Z0-9-]+)/milestones/charter/reset/$', milestones.reset_charter_milestones, None, "group_reset_charter_milestones"), - (r'^(?P[a-zA-Z0-9-]+)/ajax/searchdocs/$', milestones.ajax_search_docs, None, "group_ajax_search_docs"), - (r'^(?P[a-zA-Z0-9-]+)/workflow/$', edit.customize_workflow), + (r'^(?P[a-zA-Z0-9-._]+)/documents/txt/$', info.group_documents_txt), + (r'^(?P[a-zA-Z0-9-._]+)/$', info.group_documents, None, "group_docs"), + (r'^(?P[a-zA-Z0-9-._]+)/charter/$', info.group_charter, None, 'group_charter'), + (r'^(?P[a-zA-Z0-9-._]+)/history/$', info.history), + (r'^(?P[a-zA-Z0-9-._]+)/deps/dot/$', info.dependencies_dot), + (r'^(?P[a-zA-Z0-9-._]+)/deps/pdf/$', info.dependencies_pdf), + (r'^(?P[a-zA-Z0-9-._]+)/init-charter/', edit.submit_initial_charter), + (r'^(?P[a-zA-Z0-9-._]+)/edit/$', edit.edit, {'action': "edit"}, "group_edit"), + (r'^(?P[a-zA-Z0-9-._]+)/conclude/$', edit.conclude), + (r'^(?P[a-zA-Z0-9-._]+)/milestones/$', milestones.edit_milestones, {'milestone_set': "current"}, "group_edit_milestones"), + (r'^(?P[a-zA-Z0-9-._]+)/milestones/charter/$', milestones.edit_milestones, {'milestone_set': "charter"}, "group_edit_charter_milestones"), + (r'^(?P[a-zA-Z0-9-._]+)/milestones/charter/reset/$', milestones.reset_charter_milestones, None, "group_reset_charter_milestones"), + (r'^(?P[a-zA-Z0-9-._]+)/ajax/searchdocs/$', milestones.ajax_search_docs, None, "group_ajax_search_docs"), + (r'^(?P[a-zA-Z0-9-._]+)/workflow/$', edit.customize_workflow), ) diff --git a/ietf/templates/base/left_menu.html b/ietf/templates/base/left_menu.html index 4e961669c..da92a0acd 100644 --- a/ietf/templates/base/left_menu.html +++ b/ietf/templates/base/left_menu.html @@ -76,7 +76,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • Active RGs
  • Chartering
  • BoFs
  • -
  • Concluded WGs
  • +
  • Concluded
  • Non-WG Lists
  • diff --git a/ietf/templates/group/concluded_groups.html b/ietf/templates/group/concluded_groups.html new file mode 100644 index 000000000..e309a388c --- /dev/null +++ b/ietf/templates/group/concluded_groups.html @@ -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 %} +

    Concluded Groups

    + +

    Note that the information on historical groups may be inaccurate.

    + +{% for t in group_types %} +

    {{ t.name }}s

    + + {% if t.slug == "wg" %}

    Some additional concluded WGs may + be present at tools.ietf.org/wg/concluded/

    {% endif %} + + {% if not t.concluded_groups %} +

    No groups found.

    + {% else %} + + {% for g in t.concluded_groups %} + + + + + {% endfor %} +
    + {{ g.acronym }} + {{ g.name }} + ({% if g.start_date %}{{ g.start_date|date:"M. Y" }}{% else %}?{% endif %} + - + {% if g.conclude_date %}{{ g.conclude_date|date:"M. Y" }}{% else %}?{% endif %}) +
    + {% endif %} + +{% endfor %} + +{% endblock %}