Insert change shepherd and change writeup links in document view.
Insert document view link in shepherd document list. Allow secretariat to manage shepherds and writeups. Fixes #643 - Legacy-Id: 3012
This commit is contained in:
parent
280cbbd707
commit
e681c5e3c9
|
@ -60,7 +60,7 @@ class NoWorkflowStateForm(StreamDraftForm):
|
|||
self.wgs = list(wgs)
|
||||
self.fields['wg'].choices = [(i.group_acronym.pk, i.group_acronym.group_acronym.name) for i in self.wgs]
|
||||
else:
|
||||
self.onlywg = wgs[0].group_acronym
|
||||
self.onlywg = list(wgs)[0].group_acronym
|
||||
|
||||
def save(self):
|
||||
comment = self.cleaned_data.get('comment')
|
||||
|
|
|
@ -3,6 +3,8 @@ from django import template
|
|||
from ietf.idrfc.idrfc_wrapper import IdRfcWrapper, IdWrapper
|
||||
from ietf.ietfworkflows.utils import (get_workflow_for_draft,
|
||||
get_state_for_draft)
|
||||
from ietf.wgchairs.accounts import (can_manage_shepherd_of_a_document,
|
||||
can_manage_writeup_of_a_document)
|
||||
from ietf.ietfworkflows.streams import get_stream_from_wrapper
|
||||
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream)
|
||||
|
||||
|
@ -65,5 +67,8 @@ def edit_actions(context, wrapper):
|
|||
return {
|
||||
'can_edit_state': can_edit_state(user, draft),
|
||||
'can_edit_stream': can_edit_stream(user, draft),
|
||||
'can_writeup': can_manage_writeup_of_a_document(user, draft),
|
||||
'can_shepherd': can_manage_shepherd_of_a_document(user, draft),
|
||||
'draft': draft,
|
||||
'doc': wrapper,
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from django.http import HttpResponseRedirect
|
||||
from django.http import HttpResponseRedirect, HttpResponseForbidden
|
||||
from django.shortcuts import get_object_or_404, render_to_response
|
||||
from django.template import RequestContext
|
||||
|
||||
|
@ -12,6 +12,7 @@ from ietf.ietfworkflows.utils import (get_workflow_history_for_draft,
|
|||
get_workflow_for_draft,
|
||||
get_annotation_tags_for_draft,
|
||||
get_state_for_draft)
|
||||
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream)
|
||||
|
||||
|
||||
REDUCED_HISTORY_LEN = 20
|
||||
|
@ -46,9 +47,8 @@ def stream_history(request, name):
|
|||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def edit_state(request, name, form_class=DraftTagsStateForm):
|
||||
def _edit_draft_stream(request, draft, form_class=DraftTagsStateForm):
|
||||
user = request.user
|
||||
draft = get_object_or_404(InternetDraft, filename=name)
|
||||
workflow = get_workflow_for_draft(draft)
|
||||
if not workflow:
|
||||
form_class = NoWorkflowStateForm
|
||||
|
@ -75,5 +75,14 @@ def edit_state(request, name, form_class=DraftTagsStateForm):
|
|||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def edit_state(request, name):
|
||||
draft = get_object_or_404(InternetDraft, filename=name)
|
||||
if not can_edit_state(request.user, draft):
|
||||
return HttpResponseForbidden('You have no permission to access this view')
|
||||
return _edit_draft_stream(request, draft, DraftTagsStateForm)
|
||||
|
||||
def edit_stream(request, name):
|
||||
return edit_state(request, name, DraftStreamForm)
|
||||
draft = get_object_or_404(InternetDraft, filename=name)
|
||||
if not can_edit_stream(request.user, draft):
|
||||
return HttpResponseForbidden('You have no permission to access this view')
|
||||
return _edit_draft_stream(request, draft, DraftStreamForm)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
<div>
|
||||
<div style="margin-bottom: 1em;">
|
||||
{% if can_edit_state %} <a href="{% url edit_state doc.draft_name %}">Change state</a> {% endif %}
|
||||
{% if can_edit_stream %}{% if can_edit_state %} | {% endif %} <a href="{% url edit_stream doc.draft_name %}">Change draft stream</a>{% endif %}
|
||||
{% if can_edit_stream %}{% if can_edit_state %} | {% endif %}<a href="{% url edit_stream doc.draft_name %}">Change draft stream</a>{% endif %}
|
||||
{% if can_shepherd %}{% if can_edit_state or can_edit_stream %} | {% endif %}<a href="{% url doc_managing_shepherd draft.group.acronym draft.filename %}">Change draft shepherd</a>{% endif %}
|
||||
{% if can_writeup %}{% if can_edit_state or can_edit_stream or can_writeup %} | {% endif %}<a href="{% url doc_managing_writeup draft.group.acronym draft.filename %}">Change draft writeup</a>{% endif %}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
<tr class="{% cycle oddrow,evenrow %}">
|
||||
<td class="title">
|
||||
<a href="{% url doc_managing_shepherd wg.group_acronym.acronym doc %}">{{ doc.title }}</a>
|
||||
<a href="{% url doc_view doc.filename %}">{{ doc.title }}</a>
|
||||
</td>
|
||||
<td class="status">
|
||||
{{ doc.status.status }}
|
||||
<td class="shepherd">
|
||||
<a href="{% url doc_managing_shepherd wg.group_acronym.acronym doc %}">Change shepherd</a>
|
||||
</td>
|
||||
<td class="writeup">
|
||||
{% writeup doc %}
|
||||
|
|
|
@ -56,7 +56,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<table class="ietf-table ietf-doctable" style="margin-top:16px; width: 100%;">
|
||||
<tr>
|
||||
<th class="title">Document</th>
|
||||
<th class="status">Status</th>
|
||||
<th class="shepherd">Change shepherd</th>
|
||||
<th class="writeup">Protocol write-up</th>
|
||||
<th class="writeup_date">Protocol write-up last update</th>
|
||||
</tr>
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
def is_secretariat(user):
|
||||
if not user or not user.is_authenticated():
|
||||
return False
|
||||
return bool(user.groups.filter(name='Secretariat'))
|
||||
|
||||
|
||||
def is_area_director_for_group(person, group):
|
||||
return bool(group.area.area.areadirector_set.filter(person=person).count())
|
||||
|
||||
|
@ -27,35 +33,35 @@ def can_do_wg_workflow_in_group(user, group):
|
|||
person = get_person_for_user(user)
|
||||
if not person:
|
||||
return False
|
||||
return is_group_chair(person, group)
|
||||
return (is_secretariat(user) or is_group_chair(person, group))
|
||||
|
||||
|
||||
def can_do_wg_workflow_in_document(user, document):
|
||||
person = get_person_for_user(user)
|
||||
if not person or not document.group:
|
||||
return False
|
||||
return can_do_wg_workflow_in_group(document.group.ietfwg)
|
||||
return (is_secretariat(user) or can_do_wg_workflow_in_group(document.group.ietfwg))
|
||||
|
||||
|
||||
def can_manage_workflow_in_group(user, group):
|
||||
person = get_person_for_user(user)
|
||||
if not person:
|
||||
return False
|
||||
return is_group_chair(person, group)
|
||||
return (is_secretariat(user) or is_group_chair(person, group))
|
||||
|
||||
|
||||
def can_manage_delegates_in_group(user, group):
|
||||
person = get_person_for_user(user)
|
||||
if not person:
|
||||
return False
|
||||
return is_group_chair(person, group)
|
||||
return (is_secretariat(user) or is_group_chair(person, group))
|
||||
|
||||
|
||||
def can_manage_shepherds_in_group(user, group):
|
||||
person = get_person_for_user(user)
|
||||
if not person:
|
||||
return False
|
||||
return is_group_chair(person, group)
|
||||
return (is_secretariat(user) or is_group_chair(person, group))
|
||||
|
||||
|
||||
def can_manage_shepherd_of_a_document(user, document):
|
||||
|
@ -70,7 +76,8 @@ def can_manage_writeup_of_a_document_no_state(user, document):
|
|||
if not person or not document.group:
|
||||
return False
|
||||
group = document.group.ietfwg
|
||||
return (is_group_chair(person, group) or
|
||||
return (is_secretariat(user) or
|
||||
is_group_chair(person, group) or
|
||||
is_area_director_for_group(person, group) or
|
||||
is_group_delegate(person, group))
|
||||
|
||||
|
|
Loading…
Reference in a new issue