Port wginfo/ to new schema, delete some dead code. Missing tests and
still a little bit of cruft left from views in other modules. - Legacy-Id: 6084
This commit is contained in:
parent
9b65f3be79
commit
6d17ab8015
|
@ -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.slug == "wg" %}href="{% url ietf.wginfo.views.wg_charter acronym=group.acronym %}"{% endif %}>{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
(<a {% if group.type.slug == "wg" %}href="{% url ietf.wginfo.views.group_charter acronym=group.acronym %}"{% endif %}>{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
</div>
|
||||
|
||||
<table id="metatable" width="100%">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% load ietf_filters %}{% for wg in wg_list|dictsort:"group_acronym.acronym" %}{% if wg.area.area.status_id == 1 and wg.area.area.acronym != "iesg" %}{% if wg.start_date %}{{ wg }}
|
||||
{% endif %}{% endif %}{% endfor %}
|
||||
{% for wg in wg_list|dictsort:"group_acronym.acronym" %}{% if wg.area.area.status_id == 1 and wg.area.area.acronym != "iesg" %}{% if wg.start_date %}{% include "wginfo/wg-charter.txt" %}
|
||||
{% endif %}{% endif %}{% endfor %}
|
||||
{% 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,7 +1,6 @@
|
|||
{% load ietf_filters %}{% regroup wg_list|dictsort:"area_acronym.acronym" by area.area as wga_list %}{% for area in wga_list %}{% for wg in area.list|dictsort:"group_acronym.name" %}{% if wg.area.area.status_id == 1 and wg.area.area.acronym != "iesg" %}{% if wg.start_date %}{{ wg }}
|
||||
{% endif %}{% endif %}{% endfor %}{% endfor %}
|
||||
{% 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 %}
|
||||
|
||||
{% regroup wg_list|dictsort:"area_acronym.acronym" by area.area as wga_list %}{% for area in wga_list %}{% for wg in area.list|dictsort:"group_acronym.name" %}{% if wg.area.area.status_id == 1 and wg.area.area.acronym != "iesg" %}{% if wg.start_date %}
|
||||
{% include "wginfo/wg-charter.txt" %}
|
||||
{% endif %}{% endif %}{% endfor %}{% endfor %}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{% load ietf_filters %}
|
||||
{% autoescape off %}{% load ietf_filters %}
|
||||
IETF Working Group Summary (By Acronym)
|
||||
|
||||
|
||||
The following Area Abbreviations are used in this document
|
||||
{% for area in area_list %}
|
||||
{{ area|upper }} - {{ area.area_acronym.name }}{% endfor %}
|
||||
{% for wg in wg_list|dictsort:"group_acronym.acronym" %}{% if wg.start_date %}
|
||||
{{ wg.group_acronym.name|safe }} ({{ wg }}) -- {{ wg.area.area|upper }}
|
||||
{% include "wginfo/wg_summary.txt" %}{% endif %}{% endfor %}
|
||||
{% for area in areas %}
|
||||
{{ 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 %}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
{% load ietf_filters %} IETF Working Group Summary (By Area)
|
||||
{% regroup wg_list|dictsort:"area.area.area_acronym.acronym" by area.area as wga_list %}{% for area in wga_list %}{% for wg in area.list|dictsort:"group_acronym.acronym" %}{% ifequal wg.area.area.status_id 1 %}{% if forloop.first %}
|
||||
{{ wg.area_acronym.name }} ({{ wg.area_acronym }})
|
||||
{{ wg.area_acronym.name|dashify }}------{% for ad in wg.area_directors %}
|
||||
{{ ad.person }} <{{ ad.person.email.1 }}>{% endfor %}
|
||||
{% endif %}{% if wg.start_date %}
|
||||
{{ wg.group_acronym.name|safe }} ({{ wg }})
|
||||
{% include "wginfo/wg_summary.txt" %}{% endif %}{% endifequal %}{% endfor %}{% endfor %}
|
||||
{% autoescape off %}{% load ietf_filters %}
|
||||
IETF Working Group Summary (By Area)
|
||||
|
||||
|
||||
{% for area in areas %}{{ area.name }} ({{ area.acronym }})
|
||||
{{ area.name|dashify }}------{% for ad in area.ads %}
|
||||
{{ ad.person }} <{{ ad.address }}>{% endfor %}
|
||||
|
||||
{% for group in area.groups %}{{ group.name }} ({{ group.acronym }})
|
||||
{% include "wginfo/group_entry.txt" %}
|
||||
{% endfor %}{% endfor %}{% endautoescape %}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
{% for g in groups %}
|
||||
<tr class="{{ forloop.counter|divisibleby:2|yesno:"oddrow,evenrow" }}">
|
||||
<td class="acronym">
|
||||
<a href="{% url wg_charter acronym=g.acronym %}">{{ g.acronym }}</a>
|
||||
<a href="{% url group_charter acronym=g.acronym %}">{{ g.acronym }}</a>
|
||||
</td>
|
||||
<td class="title">
|
||||
<a {%comment%}href="{% url doc_view name=g.charter.name %}"{%endcomment%}>{{ g.name }}</a>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
{% for g in groups %}
|
||||
<tr class="{{ forloop.counter|divisibleby:2|yesno:"oddrow,evenrow" }}">
|
||||
<td class="acronym">
|
||||
<a href="{% url wg_charter acronym=g.acronym %}">{{ g.acronym }}</a>
|
||||
<a href="{% url group_charter acronym=g.acronym %}">{{ g.acronym }}</a>
|
||||
</td>
|
||||
<td class="title">
|
||||
<a href="{% url doc_view name=g.charter.name %}">{{ g.name }}</a>
|
||||
|
|
|
@ -28,7 +28,7 @@ form.conclude .actions {
|
|||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{% url wg_charter acronym=wg.acronym %}">Back</a>
|
||||
<a href="{% url group_charter acronym=wg.acronym %}">Back</a>
|
||||
<input type="submit" value="Send request"/>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -66,7 +66,7 @@ Create new WG or BoF
|
|||
<td></td>
|
||||
<td class="actions">
|
||||
{% ifequal action "edit" %}
|
||||
<a href="{% url wg_charter acronym=wg.acronym %}">Back</a>
|
||||
<a href="{% url group_charter acronym=wg.acronym %}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
{% else %}
|
||||
{% ifequal action "charter" %}
|
||||
|
|
|
@ -42,7 +42,7 @@ tr.milestone.add { font-style: italic; }
|
|||
<noscript>This page depends on Javascript being enabled to work properly.</noscript>
|
||||
|
||||
<p>Links:
|
||||
<a href="{% url wg_charter acronym=group.acronym %}">{{ group.acronym }} {{ group.type.name }}</a>
|
||||
<a href="{% url group_charter acronym=group.acronym %}">{{ group.acronym }} {{ group.type.name }}</a>
|
||||
- <a href="{% url doc_view name=group.charter.canonical_name %}">{{ group.charter.canonical_name }}</a>
|
||||
</p>
|
||||
|
||||
|
@ -91,7 +91,7 @@ this list</a> to the milestones currently in use for the {{ group.acronym }} {{
|
|||
</table>
|
||||
|
||||
<div class="actions">
|
||||
<a class="button" href="{% if milestone_set == "charter" %}{% url doc_view name=group.charter.canonical_name %}{% else %}{% url wg_charter acronym=group.acronym %}{% endif %}">Cancel</a>
|
||||
<a class="button" href="{% if milestone_set == "charter" %}{% url doc_view name=group.charter.canonical_name %}{% else %}{% url group_charter acronym=group.acronym %}{% endif %}">Cancel</a>
|
||||
<input class="button" type="submit" data-labelsave="Save" data-labelreview="Review changes" value="Save" style="display:none"/>
|
||||
<input type="hidden" name="action" value="save">
|
||||
</div>
|
||||
|
|
99
ietf/templates/wginfo/group_base.html
Normal file
99
ietf/templates/wginfo/group_base.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
{% extends "base.html" %}
|
||||
{% comment %}
|
||||
Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of the Nokia Corporation and/or its
|
||||
subsidiary(-ies) nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
{% endcomment %}
|
||||
{% load ietf_filters wgchairs_tags %}
|
||||
{% block title %}{{ group.name }} ({{ group.acronym }}) - {% block group_subtitle %}{% endblock %}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.ietf-navset {
|
||||
background:#214197 url(/images/yui/sprite.png) repeat-x left -1400px;
|
||||
color:white;
|
||||
border:1px solid black;
|
||||
padding:4px;
|
||||
}
|
||||
.ietf-navset .selected { font-weight:bold; padding: 0 3px; }
|
||||
.ietf-navset a, .ietf-navset a:visited { color: white; padding:0 3px; }
|
||||
|
||||
.ietf-group-details { float:right; padding: 4px;margin-top:16px; margin-left: 16px; }
|
||||
.ietf-group-details tr { vertical-align: top; }
|
||||
.ietf-concluded-bg {background-color: #F8F8D0; }
|
||||
.ietf-concluded-warning { background:red;color:white;padding:2px 2px;}
|
||||
.ietf-proposed-bg { }
|
||||
.ietf-proposed-warning { background:green;color:white;padding:2px 2px;}
|
||||
.ietf-box th {
|
||||
font-weight: bold;
|
||||
padding-top: 1em;
|
||||
text-align: left;
|
||||
}
|
||||
.ietf-box tr:first-child th {
|
||||
padding-top: 0;
|
||||
}
|
||||
{% endblock morecss %}
|
||||
|
||||
{% block content %}
|
||||
<div {% if group.state_id == "dormant" or group.state_id == "conclude" %}class="ietf-concluded-bg"{% endif %} {% if group.state_id == "proposed" %}class="ietf-proposed-bg"{% endif %}>
|
||||
|
||||
<h1>{{ group.name}} ({{ group.acronym }})
|
||||
{% if group.state_id == "dormant" or group.state_id == "conclude" %}<br/><span class="ietf-concluded-warning">(concluded {{ group.type.name }})</span>{% endif %}
|
||||
{% if group.state_id == "proposed" %}<br/><span class="ietf-proposed-warning">(proposed {{ group.type.name }})</span>{% endif %}
|
||||
</h1>
|
||||
|
||||
<div class="ietf-navset">
|
||||
<a {% if selected == "documents" %}class="selected"{% else %}href="{% url ietf.wginfo.views.group_documents acronym=group.acronym %}"{% endif %}>Documents</a> |
|
||||
<a {% if selected == "charter" %}class="selected"{% else %}href="{% url ietf.wginfo.views.group_charter acronym=group.acronym %}"{% endif %}>Charter</a> |
|
||||
|
||||
{% if can_manage_workflow %}
|
||||
<a {% if selected == "manage_workflow" %}class="selected"{% else %}href="{% url manage_workflow group.acronym %}"{% endif %}>Manage workflow</a> |
|
||||
{% endif %}
|
||||
|
||||
{% if can_manage_delegates %}
|
||||
<a {% if selected == "manage_delegates" %}class="selected"{% else %}href="{% url manage_delegates group..acronym %}"{% endif %}>Manage delegations</a> |
|
||||
{% endif %}
|
||||
|
||||
{% if can_manage_shepherds %}
|
||||
<a {% if selected == "manage_shepherds" %}class="selected"{% else %}href="{% url manage_shepherds group.acronym %}"{% endif %}>Manage shepherds</a> |
|
||||
{% endif %}
|
||||
|
||||
<a {% if selected == "history" %}class="selected"{% else %}href="{% url ietf.wginfo.views.history acronym=group.acronym %}"{% endif %}>History</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 %}
|
||||
<a href="http://tools.ietf.org/wg/{{ group.acronym }}/">Tools WG Page »</a>
|
||||
</div>
|
||||
|
||||
{% block group_content %}
|
||||
{% endblock group_content %}
|
||||
|
||||
</div>
|
||||
{% endblock content %}
|
171
ietf/templates/wginfo/group_charter.html
Normal file
171
ietf/templates/wginfo/group_charter.html
Normal file
|
@ -0,0 +1,171 @@
|
|||
{% extends "wginfo/group_base.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% block group_subtitle %}Charter{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
{{ block.super }}
|
||||
h2 a.button { margin-left: 0.5em; font-size: 13px; }
|
||||
{% endblock %}
|
||||
|
||||
{% block group_content %}
|
||||
<div class="ietf-box ietf-group-details">
|
||||
|
||||
{% if group.state_id == "conclude" %}
|
||||
<span class="ietf-concluded-warning">Note: The data for concluded WGs
|
||||
is occasionally incorrect.</span>
|
||||
{% endif %}
|
||||
|
||||
<table>
|
||||
<tr><th colspan="2">Group</th></tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td style="width:14ex;">Name:</td>
|
||||
<td>{{ group.name }}</td>
|
||||
</tr>
|
||||
|
||||
<tr><td>Acronym:</td><td>{{ group.acronym }}</td></tr>
|
||||
|
||||
{% if group.parent %}
|
||||
<tr><td>{{ group.parent.type.name }}:</td><td>{{ group.parent.name }} ({{ group.parent.acronym }})</td></tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>State:</td>
|
||||
<td>{{ group.state.name }}
|
||||
{% if requested_close %}
|
||||
(but in the process of being closed)
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Charter:</td>
|
||||
<td>
|
||||
{% if group.charter %}
|
||||
<a href="{% url doc_view name=group.charter.name %}">{{ group.charter.name }}-{{ group.charter.rev }}</a> ({{ group.charter.get_state.name }})
|
||||
{% else %}
|
||||
none
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
- <a href="{% url ietf.wginfo.edit.submit_initial_charter acronym=group.acronym %}">Submit Charter</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><th colspan="2">Personnel</th></tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td>Chair{{ group.chairs|pluralize }}:</td>
|
||||
<td>
|
||||
{% for chair in group.chairs %}
|
||||
<a href="mailto:{{ chair.address }}">{{ chair.person.plain_name }} <{{ chair.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><td>Area Director:</td>
|
||||
<td>
|
||||
{% if group.areadirector %}
|
||||
<a href="mailto:{{ group.areadirector.address }}">{{ group.areadirector.person.plain_name }} <{{ group.areadirector.address }}></a>
|
||||
{% else %}?{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if group.techadvisors %}
|
||||
<tr>
|
||||
<td>Tech Advisor{{ group.techadvisors|pluralize }}:</td>
|
||||
<td>
|
||||
{% for techadvisor in group.techadvisors %}
|
||||
<a href="mailto:{{ techadvisor.address }}">{{ techadvisor.person.plain_name }} <{{ techadvisor.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if group.editors %}
|
||||
<tr>
|
||||
<td>Editor{{ group.editors|pluralize }}:</td>
|
||||
<td>
|
||||
{% for editor in group.editors %}
|
||||
<a href="mailto:{{ editor.address }}">{{ editor.person.plain_name }} <{{ editor.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if group.secretaries %}
|
||||
<tr>
|
||||
<td>Secretar{{ group.secretaries|pluralize:"y,ies" }}:</td>
|
||||
<td>
|
||||
{% for secretary in group.secretaries %}
|
||||
<a href="mailto:{{ secretary.address }}">{{ secretary.person.plain_name }} <{{ secretary.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr><th colspan="2">Mailing List</th></tr>
|
||||
|
||||
<tr><td>Address:</td><td>{{ group.list_email|urlize }}</td></tr>
|
||||
<tr><td>To Subscribe:</td><td>{{ group.list_subscribe|urlize }}</td></tr>
|
||||
<tr><td>Archive:</td><td>{{ group.list_archive|urlize }}</td></tr>
|
||||
|
||||
{% if group.state_id != "conclude" %}
|
||||
<tr><th colspan="2">Jabber Chat</th></tr>
|
||||
|
||||
<tr>
|
||||
<td>Room Address:</td>
|
||||
<td><a href="xmpp:{{ group.acronym }}@jabber.ietf.org">xmpp:{{ group.acronym }}@jabber.ietf.org</a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Logs:</td>
|
||||
<td><a href="http://jabber.ietf.org/logs/{{ group.acronym }}/">http://jabber.ietf.org/logs/{{ group.acronym }}/</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
</table>
|
||||
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
<div style="margin: 2px; margin-top: 2em;">
|
||||
{% for name, url in actions %}
|
||||
<a class="button" href="{{ url }}">{{ name }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% with group.groupurl_set.all as urls %}
|
||||
{% if urls %}
|
||||
<p>In addition to the charter maintained by the IETF Secretariat, there is additional information about this working group on the Web at:
|
||||
{% for url in urls %}
|
||||
<a href="{{ url.url }}">{{ url.name }}</a>{% if not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
|
||||
<h2>Charter for {% if group.state_id == "proposed" %}Proposed{% endif %} Working Group</h2>
|
||||
|
||||
<p>{{ group.charter_text|escape|format_charter|safe }}</p>
|
||||
|
||||
<h2>{% if group.state_id == "proposed" %}Proposed{% endif %} Milestones
|
||||
|
||||
{% if group.state_id != "proposed" %}
|
||||
{% if user|has_role:"Area Director,Secretariat" or is_chair %}
|
||||
<a class="button" href="{% url wg_edit_milestones acronym=group.acronym %}">Add or edit milestones</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h2>
|
||||
|
||||
{% with group.milestones as milestones %}
|
||||
{% include "wginfo/milestones.html" %}
|
||||
{% endwith %}
|
||||
|
||||
{% if milestones_in_review %}
|
||||
<p>+ {{ milestones_in_review|length }} new milestone{{ milestones_in_review|pluralize }}
|
||||
currently in Area Director review.</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
18
ietf/templates/wginfo/group_documents.html
Normal file
18
ietf/templates/wginfo/group_documents.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
{% extends "wginfo/group_base.html" %}
|
||||
|
||||
{% block group_subtitle %}Documents{% endblock %}
|
||||
|
||||
{% block group_content %}
|
||||
<div class="group-documents">
|
||||
|
||||
{% include "doc/search/search_results.html" %}
|
||||
|
||||
{% with docs_related as docs %}{% with meta_related as meta %}{% include "doc/search/search_results.html" %}{% endwith %}{% endwith %}
|
||||
|
||||
</div>
|
||||
{% endblock group_content %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
4
ietf/templates/wginfo/group_entry.txt
Normal file
4
ietf/templates/wginfo/group_entry.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
{% for chair in group.chairs %}{% if forloop.first %} Chair{{ forloop.revcounter|pluralize:": ,s:" }} {% else %} {% endif %}{{ chair.person.plain_name }} <{{ chair.address }}>
|
||||
{% endfor %} WG Mail: {{ group.list_email }}
|
||||
To Join: {{ group.list_subscribe }}
|
||||
Archive: {{ group.list_archive }}
|
48
ietf/templates/wginfo/group_entry_with_charter.txt
Normal file
48
ietf/templates/wginfo/group_entry_with_charter.txt
Normal file
|
@ -0,0 +1,48 @@
|
|||
{% autoescape off %}{% load ietf_filters %}{{ group.name }} ({{group.acronym}})
|
||||
{{ group.name|dashify }}{{ group.acronym|dashify }}---
|
||||
|
||||
Charter
|
||||
Last Modified: {{ group.time.date|date }}
|
||||
|
||||
Current Status: {{ group.state.name }}
|
||||
|
||||
Chair{{ group.chairs|pluralize }}:
|
||||
{% for chair in group.chairs %} {{ chair.person.name }} <{{chair.address}}>
|
||||
{% endfor %}
|
||||
{{ group.area.name}} Directors:
|
||||
{% for ad in group.area.ads %} {{ ad.person.plain_name }} <{{ ad }}>
|
||||
{% endfor %}
|
||||
{% if group.areadirector %} {{ group.area.name }} Advisor:
|
||||
{{ group.areadirector.person.plain_name }} <{{ group.areadirector.address }}>
|
||||
{% endif %}{% if group.techadvisors %}
|
||||
Tech Advisor{{ group.techadvisors|pluralize }}:
|
||||
{% for techadvisor in group.techadvisors %} {{ techadvisor.person.plain_name }} <{{ techadvisor.address }}>
|
||||
{% endfor %}{% endif %}{% if group.editors %}
|
||||
Editor{{ group.editors|pluralize }}:
|
||||
{% for editor in group.editors %} {{ editor.person.plain_name }} <{{ editor.address}}>
|
||||
{% endfor %}{% endif %}{% if group.secretaries %}
|
||||
Secretar{{ group.secretaries|pluralize:"y,ies" }}:
|
||||
{% for secretary in group.secretaries %} {{ secretary.person.plain_name }} <{{ secretary.address }}>
|
||||
{% endfor %}{% endif %}
|
||||
Mailing Lists:
|
||||
General Discussion: {{ group.list_email }}
|
||||
To Subscribe: {{ group.list_subscribe }}
|
||||
Archive: {{ group.list_archive }}
|
||||
|
||||
Description of Working Group:
|
||||
|
||||
{{ group.charter_text|indent }}
|
||||
|
||||
Goals and Milestones:
|
||||
{% for milestone in group.milestones %} {% if milestone.resolved %}{{ milestone.resolved }} {% else %}{{ milestone.due|date:"M Y" }}{% endif %} - {{ milestone.desc }}
|
||||
{% endfor %}
|
||||
Internet-Drafts:
|
||||
{% for alias in group.drafts %} - {{ alias.document.title }} [{{ alias.name }}-{{ alias.document.rev }}] ({{ alias.document.pages }} pages)
|
||||
{% endfor %}
|
||||
{% if group.rfcs %}Requests for Comments:
|
||||
{% for alias in group.rfcs %} {{ alias.name.upper }}: {{ alias.document.title}} ({{ alias.document.pages }} pages){% for r in alias.rel %}
|
||||
* {{ r.action }} {{ r.target.name|upper }}{% endfor %}{% for r in alias.invrel %}
|
||||
* {% if r.relationsship == "obs" %}{{ r.inverse_action|upper }}{% else %}{{ r.action }}{% endif %} {{ r.source.canonical_name|upper }}{% endfor %}
|
||||
{% endfor %}
|
||||
{% else %}No Requests for Comments{% endif %}
|
||||
{% endautoescape %}
|
|
@ -1,15 +1,16 @@
|
|||
{% extends "wginfo/wg_base.html" %}
|
||||
{% extends "wginfo/group_base.html" %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block wg_titledetail %}History{% endblock %}
|
||||
{% block group_subtitle %}History{% endblock %}
|
||||
|
||||
{% block wg_content %}
|
||||
{% block group_content %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
<h2>WG History</h2>
|
||||
<h2>Group History</h2>
|
||||
|
||||
<table class="ietf-table history">
|
||||
<tr><th>Date</th><th>By</th><th>Text</th></tr>
|
||||
|
||||
{% for e in events %}
|
||||
<tr class="{% cycle oddrow,evenrow %}">
|
||||
<td>{{ e.time|date:"Y-m-d"}}</td>
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
{% if USE_DB_REDESIGN_PROXY_CLASSES %}{% include "wginfo/wg-charterREDESIGN.txt" %}{% else %}{% load ietf_filters %}{{wg.group_acronym.name|safe}} ({{wg}})
|
||||
{{ wg.group_acronym.name|dashify }}{{ wg.group_acronym.acronym|dashify }}---
|
||||
|
||||
Charter
|
||||
Last Modified: {{ wg.last_modified_date }}
|
||||
|
||||
Current Status: {{ wg.status }}
|
||||
|
||||
Chair{{ wg.chairs.count|pluralize:",s" }}:
|
||||
{% for chair in wg.chairs %} {{ chair.person|safe }} <{{chair.person.email.1}}>
|
||||
{% endfor %}
|
||||
{{wg.area.area.area_acronym.name}} Directors:
|
||||
{% for ad in wg.area_directors %} {{ ad.person|safe }} <{{ad.person.email.1}}>
|
||||
{% endfor %}
|
||||
{{wg.area.area.area_acronym.name}} Advisor:
|
||||
{{ wg.area_director.person|safe }} <{{wg.area_director.person.email.1}}>
|
||||
{% if wg.wgtechadvisor_set.count %}
|
||||
Tech Advisor{{ wg.wgtechadvisor_set.count|pluralize:",s" }}:
|
||||
{% for techadvisor in wg.wgtechadvisor_set.all %} {{ techadvisor.person|safe }} <{{techadvisor.person.email.1}}>
|
||||
{% endfor %}{% endif %}{% if wg.wgeditor_set.count %}
|
||||
Editor{{ wg.wgeditor_set.count|pluralize:",s" }}:
|
||||
{% for editor in wg.wgeditor_set.all %} {{ editor.person|safe }} <{{editor.person.email.1}}>
|
||||
{% endfor %}{% endif %}{% if wg.secretaries %}
|
||||
Secretar{{ wg.secretaries.count|pluralize:"y,ies" }}:
|
||||
{% for secretary in wg.secretaries %} {{ secretary.person|safe }} <{{secretary.person.email.1}}>
|
||||
{% endfor %}{% endif %}
|
||||
Mailing Lists:
|
||||
General Discussion: {{ wg.email_address }}
|
||||
To Subscribe: {{ wg.email_subscribe }}
|
||||
Archive: {{ wg.email_archive }}
|
||||
|
||||
Description of Working Group:
|
||||
|
||||
{{ wg.charter_text|indent|safe }}
|
||||
|
||||
Goals and Milestones:
|
||||
{% for milestone in wg.milestones %} {% ifequal milestone.done 'Done' %}Done {% else %}{%ifequal milestone.expected_due_date.month 1 %}Jan{% endifequal %}{%ifequal milestone.expected_due_date.month 2 %}Feb{% endifequal %}{%ifequal milestone.expected_due_date.month 3 %}Mar{% endifequal %}{%ifequal milestone.expected_due_date.month 4 %}Apr{% endifequal %}{%ifequal milestone.expected_due_date.month 5 %}May{% endifequal %}{%ifequal milestone.expected_due_date.month 6 %}Jun{% endifequal %}{%ifequal milestone.expected_due_date.month 7 %}Jul{% endifequal %}{%ifequal milestone.expected_due_date.month 8 %}Aug{% endifequal %}{%ifequal milestone.expected_due_date.month 9 %}Sep{% endifequal %}{%ifequal milestone.expected_due_date.month 10 %}Oct{% endifequal %}{%ifequal milestone.expected_due_date.month 11 %}Nov{% endifequal %}{%ifequal milestone.expected_due_date.month 12 %}Dec{% endifequal %} {{ milestone.expected_due_date.year }}{% endifequal %} - {{ milestone.description|safe }}
|
||||
{% endfor %}
|
||||
Internet-Drafts:
|
||||
{% for draft in wg.drafts %} - {{draft.title|safe}} [{{draft.filename}}-{{draft.revision}}] ({{ draft.txt_page_count }} pages)
|
||||
{% endfor %}
|
||||
{% if wg.rfcs %}Requests for Comments:
|
||||
{% for rfc in wg.rfcs %} {{rfc}}: {{rfc.title|safe}} ({{ rfc.txt_page_count }} pages){% for obs in rfc.obsoletes%}
|
||||
* {{obs.action}} RFC{{obs.rfc_acted_on_id}}{% endfor %}{% for obs in rfc.obsoleted_by%}
|
||||
* {%ifequal obs.action 'Obsoletes'%}OBSOLETED BY{%else%}Updated by{%endifequal%} RFC{{obs.rfc_id}}{% endfor %}
|
||||
{%endfor%}
|
||||
{%else%}No Requests for Comments{% endif %}{% endif %}
|
|
@ -1,47 +0,0 @@
|
|||
{% load ietf_filters %}{{wg.name|safe}} ({{wg.acronym}})
|
||||
{{ wg.name|dashify }}{{ wg.acronym|dashify }}---
|
||||
|
||||
Charter
|
||||
Last Modified: {{ wg.time.date }}
|
||||
|
||||
Current Status: {{ wg.state.name }}
|
||||
|
||||
Chair{{ wg.chairs|pluralize }}:
|
||||
{% for chair in wg.chairs %} {{ chair.person.name|safe }} <{{chair.address}}>
|
||||
{% endfor %}
|
||||
{{wg.area.area.area_acronym.name}} Directors:
|
||||
{% for ad in wg.area_directors %} {{ ad.person|safe }} <{{ad.person.email.1}}>
|
||||
{% endfor %}
|
||||
{{wg.area.area.area_acronym.name}} Advisor:
|
||||
{{ wg.areadirector.person.name|safe }} <{{wg.areadirector.address}}>
|
||||
{% if wg.techadvisors %}
|
||||
Tech Advisor{{ wg.techadvisors|pluralize }}:
|
||||
{% for techadvisor in wg.techadvisors %} {{ techadvisor.person.plain_name|safe }} <{{techadvisor.address}}>
|
||||
{% endfor %}{% endif %}{% if wg.editors %}
|
||||
Editor{{ wg.editors|pluralize }}:
|
||||
{% for editor in wg.editors %} {{ editor.person.plain_name|safe }} <{{editor.person.address}}>
|
||||
{% endfor %}{% endif %}{% if wg.secretaries %}
|
||||
Secretar{{ wg.secretaries|pluralize:"y,ies" }}:
|
||||
{% for secretary in wg.secretaries %} {{ secretary.person.plain_name|safe }} <{{secretary.person.address}}>
|
||||
{% endfor %}{% endif %}
|
||||
Mailing Lists:
|
||||
General Discussion: {{ wg.email_address }}
|
||||
To Subscribe: {{ wg.email_subscribe }}
|
||||
Archive: {{ wg.email_archive }}
|
||||
|
||||
Description of Working Group:
|
||||
|
||||
{{ wg.charter_text|indent|safe }}
|
||||
|
||||
Goals and Milestones:
|
||||
{% for milestone in wg.milestones %} {% if milestone.resolved %}{{ milestone.resolved }} {% else %}{{ milestone.due|date:"M Y" }}{% endif %} - {{ milestone.desc|safe }}
|
||||
{% endfor %}
|
||||
Internet-Drafts:
|
||||
{% for alias in wg.drafts %} - {{alias.document.title|safe}} [{{alias.name}}-{{alias.document.rev}}] ({{ alias.document.pages }} pages)
|
||||
{% endfor %}
|
||||
{% if wg.rfcs %}Requests for Comments:
|
||||
{% for alias in wg.rfcs %} {{ alias.name.upper }}: {{ alias.document.title|safe}} ({{ alias.document.pages }} pages){% for r in alias.rel %}
|
||||
* {{ r.action }} {{ r.target.name|upper }}{% endfor %}{% for r in alias.invrel %}
|
||||
* {% ifequal r.relationsship "obs" %}{{ r.inverse_action|upper }}{% else %}{{ r.action }}{% endifequal %} {{ r.source.canonical_name|upper }}{% endfor %}
|
||||
{%endfor%}
|
||||
{%else%}No Requests for Comments{% endif %}
|
|
@ -1,99 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2009, All Rights Reserved #}
|
||||
{% comment %}
|
||||
Portion Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of the Nokia Corporation and/or its
|
||||
subsidiary(-ies) nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
{% endcomment %}
|
||||
|
||||
{% block title %}Active IETF Working Groups{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.ietf-wg-table { width: 100%; max-width:50em; }
|
||||
.ietf-wg-table tr { vertical-align:top; }
|
||||
{% endblock morecss %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Active IETF Working Groups</h1>
|
||||
|
||||
<p>See also:
|
||||
<a href="http://www.ietf.org/wg/concluded/">Concluded Working Groups (www.ietf.org)</a>,
|
||||
<a href="http://tools.ietf.org/wg/concluded/">Concluded Working Groups (tools.ietf.org)</a>,
|
||||
<a href="http://www.ietf.org/dyn/wg/charter/history/">Historic Charters</a>.
|
||||
</p>
|
||||
|
||||
{% for area in areas|dictsort:"area_acronym.name" %}
|
||||
<h2 class="ietf-divider" id="{{area.area_acronym.name|cut:" "}}">{{ area.area_acronym.name }}</h2>
|
||||
|
||||
{% for ad in area.areadirector_set.all|dictsort:"person.last_name" %}
|
||||
{% if forloop.first %}
|
||||
<p>Area Director{{ forloop.revcounter|pluralize }}:</p>
|
||||
<table style="margin-left: 2em" class="ietf-wg-table">
|
||||
{% endif %}
|
||||
<tr><td><span class="square bgcolor{{forloop.counter}}"> </span></td> <td><a href="mailto:{{ ad.person.email.1 }}">{{ ad.person }} <{{ ad.person.email.1 }}></a></td></tr>
|
||||
{% if forloop.last %}
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% for url in area.additional_urls %}
|
||||
{% if forloop.first %}
|
||||
<p>Area Specific Web Page{{ forloop.revcounter|pluralize}}:</p>
|
||||
<p style="margin-left: 2em">
|
||||
{% endif %}
|
||||
<a href="{{url.url}}">{{ url.description }}</a>{% if not forloop.last %}<br/>{% endif %}
|
||||
{% if forloop.last %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% for wg in area.active_wgs %}
|
||||
{% if forloop.first %}
|
||||
<p>Active Working Groups:</p>
|
||||
<div style="margin-left:2em;">
|
||||
<table class="ietf-wg-table">
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td width="10%;"><a href="/wg/{{wg}}/">{{ wg }}</a></td>
|
||||
<td width="1%">{% for ad in area.areadirector_set.all|dictsort:"person.last_name" %}{% ifequal ad wg.area_director %}<span title="AD for {{wg}}: {{ad.person}}" class="square bgcolor{{forloop.counter}}"></span>{% endifequal %}{% endfor %}</td>
|
||||
<td width="50%">{{ wg.group_acronym.name }}</td>
|
||||
<td width="39%">{% for chair in wg.chairs %}<a href="mailto:{{chair.person.email.1}}">{{chair.person}}</a>{% if not forloop.last %}, {% endif %}{% endfor %}</td>
|
||||
</tr>
|
||||
{% if forloop.last %}
|
||||
</table>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<p>No Active Working Groups</p>
|
||||
{% endfor %}{# wg #}
|
||||
|
||||
{% endfor %}{# area #}
|
||||
{% endblock %}
|
|
@ -66,8 +66,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<h1>{{wg.group_acronym.name}} ({{wg.group_acronym.acronym}}){% if concluded %}<br/><span class="ietf-concluded-warning">(concluded WG)</span>{% endif %}{% if proposed %}<br/><span class="ietf-proposed-warning">(proposed WG)</span>{% endif %}</h1>
|
||||
|
||||
<div class="ietf-navset">
|
||||
{% ifequal selected "documents" %}<span class="selected">Documents</span>{% else %}<a href="{% url ietf.wginfo.views.wg_documents_html acronym=wg.group_acronym.acronym %}">Documents</a>{% endifequal %} |
|
||||
{% ifequal selected "charter" %}<span class="selected">Charter</span>{% else %}<a href="{% url ietf.wginfo.views.wg_charter acronym=wg.group_acronym.acronym %}">Charter</a>{% endifequal %} |
|
||||
{% ifequal selected "documents" %}<span class="selected">Documents</span>{% else %}<a href="{% url ietf.wginfo.views.group_documents acronym=wg.group_acronym.acronym %}">Documents</a>{% endifequal %} |
|
||||
{% ifequal selected "charter" %}<span class="selected">Charter</span>{% else %}<a href="{% url ietf.wginfo.views.group_charter acronym=wg.group_acronym.acronym %}">Charter</a>{% endifequal %} |
|
||||
{% wgchairs_admin_options wg %}
|
||||
<a {% if selected == "history" %}class="selected"{% else %}href="{% url ietf.wginfo.views.history acronym=wg.group_acronym.acronym %}"{% endif %}>History</a> |
|
||||
{% if wg.clean_email_archive|startswith:"http:" or wg.clean_email_archive|startswith:"https:" or wg.clean_email_archive|startswith:"ftp:" %}
|
||||
|
|
|
@ -1,182 +0,0 @@
|
|||
{% extends "wginfo/wg_base.html" %}
|
||||
{% comment %}
|
||||
Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of the Nokia Corporation and/or its
|
||||
subsidiary(-ies) nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
{% endcomment %}
|
||||
{% load ietf_filters %}
|
||||
{% block wg_titledetail %}Charter{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
{{ block.super }}
|
||||
h2 a.button { margin-left: 0.5em; font-size: 13px; }
|
||||
{% endblock %}
|
||||
|
||||
{% block wg_content %}
|
||||
<div class="ietf-box ietf-wg-details">
|
||||
{% if concluded %}
|
||||
<span class="ietf-concluded-warning">Note: The data for concluded WGs
|
||||
is occasionally incorrect.</span>
|
||||
{% endif %}
|
||||
<table>
|
||||
<tr><th colspan="2">Group</th></tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td style="width:14ex;">Name:</td>
|
||||
<td>{{ wg.name }}</td>
|
||||
</tr>
|
||||
|
||||
<tr><td>Acronym:</td><td>{{ wg.acronym }}</td></tr>
|
||||
|
||||
{% if wg.parent %}
|
||||
<tr><td>Area:</td><td>{{ wg.parent.name }} ({{ wg.parent.acronym }})</td></tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>State:</td>
|
||||
<td>{{ wg.state.name }}
|
||||
{% if requested_close %}
|
||||
(but in the process of being closed)
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Charter:</td>
|
||||
<td>
|
||||
{% if wg.charter %}
|
||||
<a href="{% url doc_view name=wg.charter.name %}">{{ wg.charter.name }}-{{ wg.charter.rev }}</a> ({{ wg.charter.get_state.name }})
|
||||
{% else %}
|
||||
none
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
- <a href="{% url ietf.wginfo.edit.submit_initial_charter acronym=wg.acronym %}">Submit Charter</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><th colspan="2">Personnel</th></tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td>Chair{{ wg.chairs|pluralize }}:</td>
|
||||
<td>
|
||||
{% for chair in wg.chairs %}
|
||||
<a href="mailto:{{ chair.address }}">{{ chair.person.plain_name }} <{{ chair.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><td>Area Director:</td>
|
||||
<td>
|
||||
{% if not wg.ad %}?{% else %}
|
||||
<a href="mailto:{{ wg.areadirector.address }}">{{ wg.ad.plain_name }} <{{ wg.areadirector.address }}></a>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% if wg.techadvisors %}
|
||||
<tr>
|
||||
<td>Tech Advisor{{ wg.techadvisors|pluralize }}:</td>
|
||||
<td>
|
||||
{% for techadvisor in wg.techadvisors %}
|
||||
<a href="mailto:{{ techadvisor.address }}">{{ techadvisor.person.plain_name }} <{{ techadvisor.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if wg.editors %}
|
||||
<td>Editor{{ wg.editors|pluralize }}:</td>
|
||||
<td>
|
||||
{% for editor in wg.editors %}
|
||||
<a href="mailto:{{ editor.address }}">{{ editor.person.plain_name }} <{{ editor.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td></tr>
|
||||
{% endif %}
|
||||
{% if wg.secretaries %}
|
||||
<tr>
|
||||
<td>Secretar{{ wg.secretaries|pluralize:"y,ies" }}:</td>
|
||||
<td>
|
||||
{% for secretary in wg.secretaries %}
|
||||
<a href="mailto:{{ secretary.address }}">{{ secretary.person.plain_name }} <{{ secretary.address }}></a><br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr><th colspan="2">Mailing List</th></tr>
|
||||
|
||||
<tr><td>Address:</td><td>{{ wg.email_address|urlize }}</td></tr>
|
||||
<tr><td>To Subscribe:</td><td>{{ wg.email_subscribe|urlize }}</td></tr>
|
||||
<tr><td>Archive:</td><td>{{ wg.clean_email_archive|urlize }}</td></tr>
|
||||
|
||||
{% if not concluded %}
|
||||
<tr><th colspan="2">Jabber Chat</th></tr>
|
||||
|
||||
<tr><td>Room Address:</td><td><a href="xmpp:{{ wg.acronym }}@jabber.ietf.org">xmpp:{{ wg.acronym }}@jabber.ietf.org</a></td></tr>
|
||||
<tr><td>Logs:</td><td><a href="http://jabber.ietf.org/logs/{{ wg.acronym }}/">http://jabber.ietf.org/logs/{{ wg.acronym }}/</a></td></tr>
|
||||
{% endif %}
|
||||
|
||||
</table>
|
||||
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
<div style="margin: 2px; margin-top: 2em;">
|
||||
{% for name, url in actions %}
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
{% if not forloop.last %}|{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if wg.additional_urls %}
|
||||
<p>In addition to the charter maintained by the IETF Secretariat, there is additional information about this working group on the Web at:
|
||||
{% for url in wg.additional_urls %}
|
||||
<a href="{{ url.url }}">{{ url.name }}</a>{% if not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<h2>Charter for {% if wg.state_id == "proposed" %}Proposed{% endif %} Working Group</h2>
|
||||
<p>{{ wg.charter_text|escape|format_charter|safe }}</p>
|
||||
|
||||
<h2>{% if wg.state_id == "proposed" %}Proposed{% endif %} Milestones
|
||||
{% if wg.state_id != "proposed" %}
|
||||
{% if user|has_role:"Area Director,Secretariat" or is_chair %}
|
||||
<a class="button" href="{% url wg_edit_milestones acronym=wg.acronym %}">Add or edit milestones</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h2>
|
||||
|
||||
{% with wg.milestones as milestones %}{% include "wginfo/milestones.html" %}{% endwith %}
|
||||
|
||||
{% if milestones_in_review %}
|
||||
<p>+ {{ milestones_in_review|length }} new milestone{{ milestones_in_review|pluralize }}
|
||||
currently in Area Director review.</p>
|
||||
{% endif %}
|
||||
{% endblock wg_content %}
|
|
@ -1,50 +0,0 @@
|
|||
{% extends "wginfo/wg_base.html" %}
|
||||
{% comment %}
|
||||
Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of the Nokia Corporation and/or its
|
||||
subsidiary(-ies) nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
{% endcomment %}
|
||||
{% block wg_titledetail %}Documents{% endblock %}
|
||||
|
||||
{% block wg_content %}
|
||||
<div class="group-documents">
|
||||
|
||||
{% include "doc/search/search_results.html" %}
|
||||
|
||||
{% with docs_related as docs %}{% include "doc/search/search_results.html" %}{% endwith %}
|
||||
|
||||
</div>
|
||||
{% endblock wg_content %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
|
@ -1,2 +0,0 @@
|
|||
{% load ietf_filters %}{% regroup docs by view_sort_group as grouped_docs %}{% for doc_group in grouped_docs %}{% for doc in doc_group.list %}{% include "wginfo/wg_documents_entry.txt" %}{% endfor %}{% endfor %}{% regroup docs_related by view_sort_group as grouped_docs_related %}{% for doc_group in grouped_docs_related %}{% for doc in doc_group.list %}Related {% include "wginfo/wg_documents_entry.txt" %}{% endfor %}{% endfor %}
|
||||
|
|
@ -1 +0,0 @@
|
|||
{% load ietf_filters %}{{doc_group.grouper}} {% if doc.rfc %}{{doc.rfc.rfc_number}} {{doc.rfc.title|clean_whitespace}}{% else %}{{doc.id.draft_name_and_revision}} {{doc.id.title|clean_whitespace}}{% endif %}
|
|
@ -1,5 +0,0 @@
|
|||
{% for chair in wg.wgchair_set.all %}{% if forloop.first %} Chair{{ forloop.revcounter|pluralize:": ,s:" }} {% else %} {% endif %}{{ chair.person|safe }} <{{ chair.person.email.1 }}>
|
||||
{% endfor %} WG Mail: {{ wg.email_address }}
|
||||
To Join: {{ wg.email_subscribe }}{%if wg.email_keyword %}
|
||||
In Body: {{ wg.email_keyword|safe }}{% endif %}
|
||||
Archive: {{ wg.email_archive }}
|
|
@ -26,7 +26,7 @@ class GroupChanges(Feed):
|
|||
def link(self, obj):
|
||||
if not obj:
|
||||
raise FeedDoesNotExist
|
||||
return urlreverse('wg_charter', kwargs={'acronym': obj.acronym})
|
||||
return urlreverse('group_charter', kwargs={'acronym': obj.acronym})
|
||||
|
||||
def description(self, obj):
|
||||
return self.title(obj)
|
||||
|
@ -44,7 +44,7 @@ class GroupChanges(Feed):
|
|||
if isinstance(obj, DocEvent):
|
||||
return urlreverse("doc_view", kwargs={'name': obj.doc_id })
|
||||
elif isinstance(obj, GroupEvent):
|
||||
return urlreverse('wg_charter', kwargs={'acronym': obj.group.acronym })
|
||||
return urlreverse('group_charter', kwargs={'acronym': obj.group.acronym })
|
||||
|
||||
def item_pubdate(self, obj):
|
||||
return obj.time
|
||||
|
|
|
@ -33,7 +33,7 @@ def email_secretariat(request, group, type, text):
|
|||
"wgcharter/email_secretariat.txt",
|
||||
dict(text=text,
|
||||
group=group,
|
||||
group_url=settings.IDTRACKER_BASE_URL + urlreverse('wg_charter', kwargs=dict(acronym=group.acronym)),
|
||||
group_url=settings.IDTRACKER_BASE_URL + urlreverse('group_charter', kwargs=dict(acronym=group.acronym)),
|
||||
charter_url=settings.IDTRACKER_BASE_URL + urlreverse('doc_view', kwargs=dict(name=group.charter.name)),
|
||||
)
|
||||
)
|
||||
|
|
|
@ -258,7 +258,7 @@ def edit(request, acronym=None, action="edit"):
|
|||
if action=="charter":
|
||||
return redirect('charter_submit', name=wg.charter.name, option="initcharter")
|
||||
|
||||
return redirect('wg_charter', acronym=wg.acronym)
|
||||
return redirect('group_charter', acronym=wg.acronym)
|
||||
else: # form.is_valid()
|
||||
if not new_wg:
|
||||
from ietf.person.forms import json_emails
|
||||
|
@ -312,7 +312,7 @@ def conclude(request, acronym):
|
|||
e.desc = "Requested closing group"
|
||||
e.save()
|
||||
|
||||
return redirect('wg_charter', acronym=wg.acronym)
|
||||
return redirect('group_charter', acronym=wg.acronym)
|
||||
else:
|
||||
form = ConcludeForm()
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ def email_milestones_changed(request, group, changes):
|
|||
def wrap_up_email(to, text):
|
||||
text = wrap(strip_tags(text), 70)
|
||||
text += "\n\n"
|
||||
text += u"URL: %s" % (settings.IDTRACKER_BASE_URL + urlreverse("wg_charter", kwargs=dict(acronym=group.acronym)))
|
||||
text += u"URL: %s" % (settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(acronym=group.acronym)))
|
||||
|
||||
send_mail_text(request, to, None,
|
||||
u"Milestones changed for %s %s" % (group.acronym, group.type.name),
|
||||
|
@ -95,7 +95,7 @@ def email_milestones_due(group, early_warning_days):
|
|||
milestones=milestones,
|
||||
today=today,
|
||||
early_warning_days=early_warning_days,
|
||||
url=settings.IDTRACKER_BASE_URL + urlreverse("wg_charter", kwargs=dict(acronym=group.acronym))
|
||||
url=settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(acronym=group.acronym))
|
||||
))
|
||||
|
||||
def groups_needing_milestones_due_reminder(early_warning_days):
|
||||
|
@ -120,7 +120,7 @@ def email_milestones_overdue(group):
|
|||
"wginfo/reminder_milestones_overdue.txt",
|
||||
dict(group=group,
|
||||
milestones=milestones,
|
||||
url=settings.IDTRACKER_BASE_URL + urlreverse("wg_charter", kwargs=dict(acronym=group.acronym))
|
||||
url=settings.IDTRACKER_BASE_URL + urlreverse("group_charter", kwargs=dict(acronym=group.acronym))
|
||||
))
|
||||
|
||||
def groups_needing_milestones_overdue_reminder(grace_period=30):
|
||||
|
|
|
@ -313,7 +313,7 @@ def edit_milestones(request, acronym, milestone_set="current"):
|
|||
if milestone_set == "charter":
|
||||
return redirect('doc_view', name=group.charter.canonical_name())
|
||||
else:
|
||||
return redirect('wg_charter', acronym=group.acronym)
|
||||
return redirect('group_charter', acronym=group.acronym)
|
||||
else:
|
||||
for m in milestones:
|
||||
forms.append(MilestoneForm(instance=m, needs_review=needs_review))
|
||||
|
|
|
@ -178,7 +178,7 @@ class WgEditTestCase(django.test.TestCase):
|
|||
make_test_data()
|
||||
group = Group.objects.get(acronym="mars")
|
||||
|
||||
url = urlreverse('wg_edit', kwargs=dict(acronym=group.acronym))
|
||||
url = urlreverse('group_edit', kwargs=dict(acronym=group.acronym))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
# normal get
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.views.generic.simple import redirect_to
|
|||
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^$', views.wg_dir),
|
||||
(r'^$', views.active_wgs),
|
||||
(r'^summary.txt', redirect_to, { 'url':'/wg/1wg-summary.txt' }),
|
||||
(r'^summary-by-area.txt', redirect_to, { 'url':'/wg/1wg-summary.txt' }),
|
||||
(r'^summary-by-acronym.txt', redirect_to, { 'url':'/wg/1wg-summary-by-acronym.txt' }),
|
||||
|
@ -18,12 +18,12 @@ urlpatterns = patterns('',
|
|||
(r'^bofs/$', views.bofs),
|
||||
(r'^chartering/create/$', edit.edit, {'action': "charter"}, "wg_create"),
|
||||
(r'^bofs/create/$', edit.edit, {'action': "create"}, "bof_create"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/documents/txt/$', views.wg_documents_txt),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/$', views.wg_documents_html, None, "wg_docs"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/charter/$', views.wg_charter, None, 'wg_charter'),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/documents/txt/$', views.group_documents_txt),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/$', views.group_documents, None, "wg_docs"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/charter/$', views.group_charter, None, 'group_charter'),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/init-charter/', edit.submit_initial_charter, None, "wg_init_charter"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/history/$', views.history),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/edit/$', edit.edit, {'action': "edit"}, "wg_edit"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/edit/$', edit.edit, {'action': "edit"}, "group_edit"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/conclude/$', edit.conclude, None, "wg_conclude"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/milestones/$', milestones.edit_milestones, {'milestone_set': "current"}, "wg_edit_milestones"),
|
||||
(r'^(?P<acronym>[a-zA-Z0-9-]+)/milestones/charter/$', milestones.edit_milestones, {'milestone_set': "charter"}, "wg_edit_charter_milestones"),
|
||||
|
|
|
@ -32,77 +32,111 @@
|
|||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import itertools
|
||||
|
||||
from django.shortcuts import get_object_or_404, render_to_response
|
||||
from django.template import RequestContext, loader
|
||||
from django.template import RequestContext
|
||||
from django.http import HttpResponse
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
from ietf.idtracker.models import Area, IETFWG
|
||||
|
||||
from ietf.doc.views_search import SearchForm, retrieve_search_results
|
||||
from ietf.idrfc.idrfc_wrapper import IdRfcWrapper
|
||||
from ietf.ipr.models import IprDetail
|
||||
from ietf.group.models import Group
|
||||
from ietf.doc.models import State
|
||||
from ietf.group.models import Group, GroupURL
|
||||
from ietf.doc.models import State, DocAlias, RelatedDocument
|
||||
from ietf.doc.utils import get_chartering_type
|
||||
from ietf.person.models import Email
|
||||
from ietf.group.utils import get_charter_text
|
||||
from ietf.doc.templatetags.ietf_filters import clean_whitespace
|
||||
|
||||
from ietf.wgchairs.accounts import (can_manage_workflow_in_group,
|
||||
can_manage_delegates_in_group,
|
||||
can_manage_shepherds_in_group)
|
||||
|
||||
|
||||
def fill_in_charter_info(wg, include_drafts=False):
|
||||
from ietf.person.models import Email
|
||||
from ietf.doc.models import DocAlias, RelatedDocument
|
||||
def fill_in_charter_info(group, include_drafts=False):
|
||||
group.areadirector = group.ad.role_email("ad", group.parent) if group.ad else None
|
||||
group.chairs = Email.objects.filter(role__group=group, role__name="chair")
|
||||
group.techadvisors = Email.objects.filter(role__group=group, role__name="techadv")
|
||||
group.editors = Email.objects.filter(role__group=group, role__name="editor")
|
||||
group.secretaries = Email.objects.filter(role__group=group, role__name="secr")
|
||||
milestone_state = "charter" if group.state_id == "proposed" else "active"
|
||||
group.milestones = group.groupmilestone_set.filter(state=milestone_state).order_by('due')
|
||||
|
||||
wg.areadirector = wg.ad.role_email("ad", wg.parent) if wg.ad else None
|
||||
wg.chairs = Email.objects.filter(role__group=wg, role__name="chair")
|
||||
wg.techadvisors = Email.objects.filter(role__group=wg, role__name="techadv")
|
||||
wg.editors = Email.objects.filter(role__group=wg, role__name="editor")
|
||||
wg.secretaries = Email.objects.filter(role__group=wg, role__name="secr")
|
||||
milestone_state = "charter" if wg.state_id == "proposed" else "active"
|
||||
wg.milestones = wg.groupmilestone_set.filter(state=milestone_state).order_by('due')
|
||||
group.charter_text = get_charter_text(group)
|
||||
|
||||
if include_drafts:
|
||||
aliases = DocAlias.objects.filter(document__type="draft", document__group=wg).select_related('document').order_by("name")
|
||||
wg.drafts = []
|
||||
wg.rfcs = []
|
||||
aliases = DocAlias.objects.filter(document__type="draft", document__group=group).select_related('document').order_by("name")
|
||||
group.drafts = []
|
||||
group.rfcs = []
|
||||
for a in aliases:
|
||||
if a.name.startswith("draft"):
|
||||
wg.drafts.append(a)
|
||||
group.drafts.append(a)
|
||||
else:
|
||||
wg.rfcs.append(a)
|
||||
group.rfcs.append(a)
|
||||
a.rel = RelatedDocument.objects.filter(source=a.document).distinct()
|
||||
a.invrel = RelatedDocument.objects.filter(target=a).distinct()
|
||||
|
||||
def wg_summary_acronym(request):
|
||||
areas = Area.active_areas()
|
||||
wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE)
|
||||
return HttpResponse(loader.render_to_string('wginfo/1wg-summary-by-acronym.txt', {'area_list': areas, 'wg_list': wgs}),mimetype='text/plain; charset=UTF-8')
|
||||
def extract_last_name(email):
|
||||
return email.person.name_parts()[3]
|
||||
|
||||
def extract_group_chairs(group):
|
||||
return sorted(Email.objects.filter(role__group=group, role__name="chair").select_related("person"), key=extract_last_name)
|
||||
|
||||
def wg_summary_area(request):
|
||||
wgs = IETFWG.objects.filter(status='1',group_type='1',start_date__isnull=False).exclude(parent=None)
|
||||
return HttpResponse(loader.render_to_string('wginfo/1wg-summary.txt', {'wg_list': wgs}),mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def wg_charters(request):
|
||||
wgs = IETFWG.objects.filter(status='1',group_type='1',start_date__isnull=False).exclude(parent=None)
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
for wg in wgs:
|
||||
fill_in_charter_info(wg, include_drafts=True)
|
||||
return HttpResponse(loader.render_to_string('wginfo/1wg-charters.txt', {'wg_list': wgs, 'USE_DB_REDESIGN_PROXY_CLASSES': settings.USE_DB_REDESIGN_PROXY_CLASSES}),mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def wg_charters_by_acronym(request):
|
||||
wgs = IETFWG.objects.filter(status='1',group_type='1',start_date__isnull=False)
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
for wg in wgs:
|
||||
fill_in_charter_info(wg, include_drafts=True)
|
||||
return HttpResponse(loader.render_to_string('wginfo/1wg-charters-by-acronym.txt', {'wg_list': wgs, 'USE_DB_REDESIGN_PROXY_CLASSES': settings.USE_DB_REDESIGN_PROXY_CLASSES}),mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def wg_dir(request):
|
||||
areas = Area.active_areas()
|
||||
return render_to_response('wginfo/wg-dir.html', {'areas':areas}, RequestContext(request))
|
||||
|
||||
def wg_dirREDESIGN(request):
|
||||
from ietf.group.models import Group, GroupURL
|
||||
from ietf.person.models import Email
|
||||
|
||||
areas = Group.objects.filter(type="area", state="active").order_by("name")
|
||||
for area in areas:
|
||||
area.ads = sorted(Email.objects.filter(role__group=area, role__name="ad").select_related("person"), key=extract_last_name)
|
||||
area.groups = Group.objects.filter(parent=area, type="wg", state="active").order_by("acronym")
|
||||
for group in area.groups:
|
||||
group.chairs = extract_group_chairs(group)
|
||||
|
||||
areas = [a for a in areas if a.groups]
|
||||
|
||||
return render_to_response('wginfo/1wg-summary.txt',
|
||||
{ 'areas': areas },
|
||||
mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def wg_summary_acronym(request):
|
||||
areas = Group.objects.filter(type="area", state="active").order_by("name")
|
||||
groups = Group.objects.filter(type="wg", state="active").order_by("acronym").select_related("parent")
|
||||
for group in groups:
|
||||
group.chairs = extract_group_chairs(group)
|
||||
return render_to_response('wginfo/1wg-summary-by-acronym.txt',
|
||||
{ 'areas': areas,
|
||||
'groups': groups },
|
||||
mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def wg_charters(request):
|
||||
areas = Group.objects.filter(type="area", state="active").order_by("name")
|
||||
for area in areas:
|
||||
area.ads = sorted(Email.objects.filter(role__group=area, role__name="ad").select_related("person"), key=extract_last_name)
|
||||
area.groups = Group.objects.filter(parent=area, type="wg", state="active").order_by("name")
|
||||
for group in area.groups:
|
||||
fill_in_charter_info(group, include_drafts=True)
|
||||
group.area = area
|
||||
return render_to_response('wginfo/1wg-charters.txt',
|
||||
{ 'areas': areas },
|
||||
mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def wg_charters_by_acronym(request):
|
||||
areas = dict((a.id, a) for a in Group.objects.filter(type="area", state="active").order_by("name"))
|
||||
|
||||
for area in areas.itervalues():
|
||||
area.ads = sorted(Email.objects.filter(role__group=area, role__name="ad").select_related("person"), key=extract_last_name)
|
||||
|
||||
groups = Group.objects.filter(type="wg", state="active").exclude(parent=None).order_by("acronym")
|
||||
for group in groups:
|
||||
fill_in_charter_info(group, include_drafts=True)
|
||||
group.area = areas.get(group.parent_id)
|
||||
return render_to_response('wginfo/1wg-charters-by-acronym.txt',
|
||||
{ 'groups': groups },
|
||||
mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
def active_wgs(request):
|
||||
areas = Group.objects.filter(type="area", state="active").order_by("name")
|
||||
for area in areas:
|
||||
# dig out information for template
|
||||
area.ads = []
|
||||
for e in Email.objects.filter(role__group=area, role__name="ad").select_related("person"):
|
||||
e.incoming = False
|
||||
|
@ -112,26 +146,22 @@ def wg_dirREDESIGN(request):
|
|||
e.incoming = True
|
||||
area.ads.append(e)
|
||||
|
||||
area.ads.sort(key=lambda e: (e.incoming, e.person.name_parts()[3]))
|
||||
area.ads.sort(key=lambda e: (e.incoming, extract_last_name(e)))
|
||||
area.wgs = Group.objects.filter(parent=area, type="wg", state="active").order_by("acronym")
|
||||
area.urls = area.groupurl_set.all().order_by("name")
|
||||
for wg in area.wgs:
|
||||
wg.chairs = sorted(Email.objects.filter(role__group=wg, role__name="chair").select_related("person"), key=lambda e: e.person.name_parts()[3])
|
||||
|
||||
return render_to_response('wginfo/wg-dirREDESIGN.html', {'areas':areas}, RequestContext(request))
|
||||
wg.chairs = extract_group_chairs(wg)
|
||||
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
wg_dir = wg_dirREDESIGN
|
||||
return render_to_response('wginfo/active_wgs.html', {'areas':areas}, RequestContext(request))
|
||||
|
||||
def bofs(request):
|
||||
groups = Group.objects.filter(type="wg", state="bof")
|
||||
return render_to_response('wginfo/bofs.html',dict(groups=groups),RequestContext(request))
|
||||
return render_to_response('wginfo/bofs.html',dict(groups=groups), RequestContext(request))
|
||||
|
||||
def chartering_wgs(request):
|
||||
charter_states = State.objects.filter(used=True, type="charter").exclude(slug__in=("approved", "notrev"))
|
||||
groups = Group.objects.filter(type="wg", charter__states__in=charter_states).select_related("state", "charter")
|
||||
|
||||
|
||||
for g in groups:
|
||||
g.chartering_type = get_chartering_type(g.charter)
|
||||
|
||||
|
@ -141,31 +171,40 @@ def chartering_wgs(request):
|
|||
RequestContext(request))
|
||||
|
||||
|
||||
def wg_documents(request, acronym):
|
||||
wg = get_object_or_404(IETFWG, group_acronym__acronym=acronym, group_type=1)
|
||||
concluded = wg.status_id in [ 2, 3, ]
|
||||
proposed = (wg.status_id == 4)
|
||||
form = SearchForm({'by':'group', 'group':str(wg.group_acronym.acronym),
|
||||
'rfcs':'on', 'activedrafts':'on'})
|
||||
def construct_group_menu_context(request, group, selected, others):
|
||||
"""Return context with info for the group menu filled in."""
|
||||
d = {
|
||||
"group": group,
|
||||
"selected": selected,
|
||||
"can_manage_delegates": can_manage_delegates_in_group(request.user, group),
|
||||
"can_manage_workflow": can_manage_workflow_in_group(request.user, group),
|
||||
"can_manage_shepherds": can_manage_shepherds_in_group(request.user, group),
|
||||
}
|
||||
|
||||
d.update(others)
|
||||
|
||||
return d
|
||||
|
||||
def search_for_group_documents(group):
|
||||
form = SearchForm({ 'by':'group', 'group': group.acronym or "", 'rfcs':'on', 'activedrafts': 'on' })
|
||||
docs, meta = retrieve_search_results(form)
|
||||
|
||||
# get the related docs
|
||||
form_related = SearchForm({'by':'group', 'name':'-'+str(wg.group_acronym.acronym)+'-', 'activedrafts':'on'})
|
||||
docs_related, meta_related = retrieve_search_results(form_related)
|
||||
docs_related_pruned = []
|
||||
for d in docs_related:
|
||||
form_related = SearchForm({ 'by':'group', 'name': u'-%s-' % group.acronym, 'activedrafts': 'on' })
|
||||
raw_docs_related, meta_related = retrieve_search_results(form_related)
|
||||
|
||||
docs_related = []
|
||||
for d in raw_docs_related:
|
||||
parts = d.name.split("-", 2);
|
||||
# canonical form draft-<name|ietf>-wg-etc
|
||||
if len(parts) >= 3 and parts[1] != "ietf" and parts[2].startswith(wg.group_acronym.acronym + "-"):
|
||||
docs_related_pruned.append(d)
|
||||
|
||||
docs_related = docs_related_pruned
|
||||
if len(parts) >= 3 and parts[1] != "ietf" and parts[2].startswith(group.acronym + "-"):
|
||||
docs_related.append(d)
|
||||
|
||||
# move call for WG adoption to related
|
||||
cleaned_docs = []
|
||||
docs_related_names = set(d.name for d in docs_related)
|
||||
for d in docs:
|
||||
if d.stream_id == "ietf" and d.get_state_slug("draft-stream-ietf") == "c-adopt":
|
||||
if d.stream_id and d.get_state_slug("draft-stream-%s" % d.stream_id) == "c-adopt":
|
||||
if d.name not in docs_related_names:
|
||||
docs_related.append(d)
|
||||
else:
|
||||
|
@ -175,59 +214,75 @@ def wg_documents(request, acronym):
|
|||
|
||||
docs_related.sort(key=lambda d: d.name)
|
||||
|
||||
return wg, concluded, proposed, docs, meta, docs_related, meta_related
|
||||
return docs, meta, docs_related, meta_related
|
||||
|
||||
def wg_documents_txt(request, acronym):
|
||||
wg, concluded, proposed, docs, meta, docs_related, meta_related = wg_documents(request, acronym)
|
||||
return HttpResponse(loader.render_to_string('wginfo/wg_documents.txt', {'wg': wg, 'concluded':concluded, 'proposed':proposed, 'selected':'documents', 'docs':docs, 'meta':meta, 'docs_related':docs_related, 'meta_related':meta_related}),mimetype='text/plain; charset=UTF-8')
|
||||
def group_documents(request, acronym):
|
||||
group = get_object_or_404(Group, type="wg", acronym=acronym)
|
||||
|
||||
def wg_documents_html(request, acronym):
|
||||
wg, concluded, proposed, docs, meta, docs_related, meta_related = wg_documents(request, acronym)
|
||||
return render_to_response('wginfo/wg_documents.html', {'wg': wg, 'concluded':concluded, 'proposed':proposed, 'selected':'documents', 'docs':docs, 'meta':meta, 'docs_related':docs_related, 'meta_related':meta_related}, RequestContext(request))
|
||||
docs, meta, docs_related, meta_related = search_for_group_documents(group)
|
||||
|
||||
def wg_charter(request, acronym):
|
||||
wg = get_object_or_404(IETFWG, group_acronym__acronym=acronym, group_type=1)
|
||||
concluded = wg.status_id in [ 2, 3, ]
|
||||
proposed = (wg.status_id == 4)
|
||||
return render_to_response('wginfo/group_documents.html',
|
||||
construct_group_menu_context(request, group, "documents", {
|
||||
'docs': docs,
|
||||
'meta': meta,
|
||||
'docs_related': docs_related,
|
||||
'meta_related': meta_related
|
||||
}), RequestContext(request))
|
||||
|
||||
def group_documents_txt(request, acronym):
|
||||
"""Return tabulator-separated rows with documents for group."""
|
||||
group = get_object_or_404(Group, type="wg", acronym=acronym)
|
||||
|
||||
docs, meta, docs_related, meta_related = search_for_group_documents(group)
|
||||
|
||||
for d in docs_related:
|
||||
d.search_heading = u"Related %s" % d.search_heading
|
||||
|
||||
rows = []
|
||||
for d in itertools.chain(docs, docs_related):
|
||||
rfc_number = d.rfc_number()
|
||||
if rfc_number != None:
|
||||
name = rfc_number
|
||||
else:
|
||||
name = "%s-%s" % (d.name, d.rev)
|
||||
|
||||
rows.append(u"\t".join((d.search_heading.replace("Internet-Draft", ""), name, clean_whitespace(d.title))))
|
||||
|
||||
return HttpResponse(u"\n".join(rows), mimetype='text/plain; charset=UTF-8')
|
||||
|
||||
|
||||
def group_charter(request, acronym):
|
||||
group = get_object_or_404(Group, type="wg", acronym=acronym)
|
||||
|
||||
fill_in_charter_info(group, include_drafts=False)
|
||||
|
||||
fill_in_charter_info(wg)
|
||||
actions = []
|
||||
if wg.state_id != "conclude":
|
||||
actions.append(("Edit WG", urlreverse("wg_edit", kwargs=dict(acronym=wg.acronym))))
|
||||
if group.state_id != "conclude":
|
||||
actions.append((u"Edit %s" % group.type.name, urlreverse("group_edit", kwargs=dict(acronym=group.acronym))))
|
||||
|
||||
e = wg.latest_event(type__in=("changed_state", "requested_close",))
|
||||
requested_close = wg.state_id != "conclude" and e and e.type == "requested_close"
|
||||
e = group.latest_event(type__in=("changed_state", "requested_close",))
|
||||
requested_close = group.state_id != "conclude" and e and e.type == "requested_close"
|
||||
|
||||
if wg.state_id in ("active", "dormant"):
|
||||
actions.append(("Request closing WG", urlreverse("wg_conclude", kwargs=dict(acronym=wg.acronym))))
|
||||
if group.state_id in ("active", "dormant"):
|
||||
actions.append((u"Request closing %s" % group.type.name, urlreverse("wg_conclude", kwargs=dict(acronym=group.acronym))))
|
||||
|
||||
context = get_wg_menu_context(wg, "charter")
|
||||
context.update(dict(
|
||||
actions=actions,
|
||||
is_chair=request.user.is_authenticated() and wg.role_set.filter(name="chair", person__user=request.user),
|
||||
milestones_in_review=wg.groupmilestone_set.filter(state="review"),
|
||||
requested_close=requested_close,
|
||||
))
|
||||
is_chair = request.user.is_authenticated() and group.role_set.filter(name="chair", person__user=request.user),
|
||||
|
||||
return render_to_response('wginfo/wg_charter.html',
|
||||
context,
|
||||
RequestContext(request))
|
||||
return render_to_response('wginfo/group_charter.html',
|
||||
construct_group_menu_context(request, group, "charter", {
|
||||
"actions": actions,
|
||||
"is_chair": is_chair,
|
||||
"milestones_in_review": group.groupmilestone_set.filter(state="review"),
|
||||
"requested_close": requested_close,
|
||||
}), RequestContext(request))
|
||||
|
||||
def get_wg_menu_context(wg, selected):
|
||||
# it would probably be better to refactor wginfo into rendering
|
||||
# the menu separately instead of each view having to include the information
|
||||
|
||||
return dict(wg=wg, concluded=wg.state_id == "conclude", proposed=wg.state_id == "proposed", selected=selected)
|
||||
|
||||
def history(request, acronym):
|
||||
wg = get_object_or_404(Group, acronym=acronym)
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
|
||||
events = wg.groupevent_set.all().select_related('by').order_by('-time', '-id')
|
||||
events = group.groupevent_set.all().select_related('by').order_by('-time', '-id')
|
||||
|
||||
context = get_wg_menu_context(wg, "history")
|
||||
context.update(dict(events=events,
|
||||
))
|
||||
|
||||
wg.group_acronym = wg # hack for compatibility with old templates
|
||||
|
||||
return render_to_response('wginfo/history.html', context, RequestContext(request))
|
||||
return render_to_response('wginfo/history.html',
|
||||
construct_group_menu_context(request, group, "history", {
|
||||
"events": events,
|
||||
}), RequestContext(request))
|
||||
|
|
Loading…
Reference in a new issue