Mix the state and tag edit views into one. Fixes #619

- Legacy-Id: 2922
This commit is contained in:
Emilio A. Sánchez López 2011-03-25 12:34:02 +00:00
parent e2e11b82aa
commit aa7cfebc68
8 changed files with 65 additions and 56 deletions

View file

@ -37,9 +37,5 @@ def can_edit_state(user, draft):
)
def can_edit_tags(user, draft):
return can_edit_state(user, draft)
def can_edit_stream(user, draft):
return is_secretariat(user)

View file

@ -41,16 +41,17 @@ class StreamDraftForm(forms.Form):
return render_to_string(self.template, {'form': self})
class DraftStateForm(StreamDraftForm):
class DraftTagsStateForm(StreamDraftForm):
comment = forms.CharField(widget=forms.Textarea)
new_state = forms.ChoiceField()
weeks = forms.IntegerField(required=False)
tags = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, required=False)
template = 'ietfworkflows/state_form.html'
def __init__(self, *args, **kwargs):
super(DraftStateForm, self).__init__(*args, **kwargs)
super(DraftTagsStateForm, self).__init__(*args, **kwargs)
self.state = get_state_for_draft(self.draft)
self.fields['new_state'].choices = self.get_states()
if self.is_bound:
@ -60,6 +61,10 @@ class DraftStateForm(StreamDraftForm):
if new_state:
self.data = self.data.copy()
self.data.update({'new_state': new_state.id})
self.available_tags = self.workflow.get_tags()
self.tags = [i.annotation_tag for i in get_annotation_tags_for_draft(self.draft)]
self.fields['tags'].choices = [(i.pk, i.name) for i in self.available_tags]
self.fields['tags'].initial = [i.pk for i in self.tags]
def get_new_state(self, key):
transition_id = key.replace('transition_', '')
@ -74,36 +79,7 @@ class DraftStateForm(StreamDraftForm):
def get_states(self):
return [(i.pk, i.name) for i in self.workflow.get_states()]
def save(self):
comment = self.cleaned_data.get('comment')
state = State.objects.get(pk=self.cleaned_data.get('new_state'))
weeks = self.cleaned_data.get('weeks')
estimated_date = None
if weeks:
now = datetime.date.today()
estimated_date = now + datetime.timedelta(weeks=weeks)
update_state(obj=self.draft,
comment=comment,
person=self.person,
to_state=state,
estimated_date=estimated_date)
class DraftTagsForm(StreamDraftForm):
comment = forms.CharField(widget=forms.Textarea)
tags = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, required=False)
template = 'ietfworkflows/tags_form.html'
def __init__(self, *args, **kwargs):
super(DraftTagsForm, self).__init__(*args, **kwargs)
self.available_tags = self.workflow.get_tags()
self.tags = [i.annotation_tag for i in get_annotation_tags_for_draft(self.draft)]
self.fields['tags'].choices = [(i.pk, i.name) for i in self.available_tags]
self.fields['tags'].initial = [i.pk for i in self.tags]
def save(self):
def save_tags(self):
comment = self.cleaned_data.get('comment')
new_tags = self.cleaned_data.get('tags')
@ -118,6 +94,8 @@ class DraftTagsForm(StreamDraftForm):
extra_notify = ['%s <%s>' % shepherd.email()]
except PersonOrOrgInfo.DoesNotExist:
pass
if not set_tags and not reset_tags:
return
update_tags(self.draft,
comment=comment,
person=self.person,
@ -125,6 +103,26 @@ class DraftTagsForm(StreamDraftForm):
reset_tags=reset_tags,
extra_notify=extra_notify)
def save_state(self):
comment = self.cleaned_data.get('comment')
state = State.objects.get(pk=self.cleaned_data.get('new_state'))
weeks = self.cleaned_data.get('weeks')
estimated_date = None
if weeks:
now = datetime.date.today()
estimated_date = now + datetime.timedelta(weeks=weeks)
update_state(obj=self.draft,
comment=comment,
person=self.person,
to_state=state,
estimated_date=estimated_date)
def save(self):
self.save_tags()
if 'only_tags' in self.data.keys():
return
self.save_state()
class DraftStreamForm(StreamDraftForm):

View file

@ -4,8 +4,7 @@ from ietf.idrfc.idrfc_wrapper import IdRfcWrapper, IdWrapper
from ietf.ietfworkflows.utils import (get_workflow_for_draft,
get_state_for_draft)
from ietf.ietfworkflows.streams import get_stream_from_wrapper
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_tags,
can_edit_stream)
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream)
register = template.Library()
@ -65,7 +64,6 @@ def edit_actions(context, wrapper):
draft = idwrapper._draft
return {
'can_edit_state': can_edit_state(user, draft),
'can_edit_tags': can_edit_tags(user, draft),
'can_edit_stream': can_edit_stream(user, draft),
'doc': wrapper,
}

View file

@ -5,6 +5,5 @@ from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('ietf.ietfworkflows.views',
url(r'^(?P<name>[^/]+)/history/$', 'stream_history', name='stream_history'),
url(r'^(?P<name>[^/]+)/edit/state/$', 'edit_state', name='edit_state'),
url(r'^(?P<name>[^/]+)/edit/tags/$', 'edit_tags', name='edit_tags'),
url(r'^(?P<name>[^/]+)/edit/stream/$', 'edit_stream', name='edit_stream'),
)

View file

@ -2,7 +2,7 @@ from ietf.idtracker.models import InternetDraft
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from ietf.ietfworkflows.forms import (DraftStateForm, DraftTagsForm,
from ietf.ietfworkflows.forms import (DraftTagsStateForm,
DraftStreamForm)
from ietf.ietfworkflows.streams import (get_stream_from_draft,
get_streamed_draft)
@ -44,7 +44,7 @@ def stream_history(request, name):
context_instance=RequestContext(request))
def edit_state(request, name, form_class=DraftStateForm):
def edit_state(request, name, form_class=DraftTagsStateForm):
user = request.user
draft = get_object_or_404(InternetDraft, filename=name)
if request.method == 'POST':
@ -71,9 +71,5 @@ def edit_state(request, name, form_class=DraftStateForm):
context_instance=RequestContext(request))
def edit_tags(request, name):
return edit_state(request, name, DraftTagsForm)
def edit_stream(request, name):
return edit_state(request, name, DraftStreamForm)

View file

@ -1,6 +1,5 @@
<div>
{% if can_edit_state %} <a href="{% url edit_state doc.draft_name %}">Change state</a> {% endif %}
{% if can_edit_tags %}{% if can_edit_state %} | {% endif %} <a href="{% url edit_tags doc.draft_name %}">Change annotation tags</a> {% endif %}
{% if can_edit_stream %}{% if can_edit_state or can_edit_tags %} | {% 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 %}
</div>

View file

@ -3,19 +3,19 @@
{% block morecss %}
table.state-history p { margin: 0px; }
table.edit-form ul { padding: 0px; list-style-type: none; margin: 0px; margin-bottom: 2em; border-bottom: 1px dashed #cccccc; }
table.edit-form ul li, table.edit-form div.free-change { padding: 10px 2em; }
table.edit-form ul { padding: 0px; list-style-type: none; margin: 0px; margin-bottom: 2em; }
table.edit-form ul li, table.edit-form div.free-change { padding: 0px 2em; }
table.edit-form ul li.evenrow { background-color: #edf5ff; }
table.edit-form textarea { width: 95%; height: 120px; }
table.edit-form span.required { color: red; }
table.edit-form ul.errorlist { border-width: 0px; padding: 0px; margin: 0px;}
table.edit-form ul.errorlist li { color: red; margin: 0px; padding: 0px;}
table.edit-form div.field { margin-bottom: 1em; }
table.edit-form div.submit-row { margin: 1em 2em; }
table.edit-form div.field { margin: 1em 0px; }
table.edit-form div.submit-row { margin: 0px 2em; }
table.edit-form div.error { border: 1px solid red; background-color: #ffeebb; padding: 5px 10px; }
table.edit-form-tags tr { vertical-align: top; }
table.edit-form-tags textarea { height: 200px; }
table.edit-form-tags ul { border-width: 0px; padding: 1em 2em; }
table.edit-form-tags ul { border-width: 0px; padding: 0px 2em; }
table.edit-form-tags ul li { padding: 0px; }
{% endblock morecss %}
@ -24,6 +24,11 @@ table.edit-form-tags ul li { padding: 0px; }
{% block content %}
<h1>Change state for {{ draft }}</h1>
<div class="return-to-document">
<p>
<a href="{% url doc_view draft.filename %}">Return to document view</a>
</p>
</div>
<table class="ietf-table" style="width: 100%;">
<tr>
<th>Current stream</th>

View file

@ -2,9 +2,9 @@
<table class="ietf-table edit-form" style="width: 100%;">
<tr>
<th>1. Input information about change</th>
<th>2. Select the new state</th>
<th>2. Change annotation tags if needed</th>
</tr>
<tr><td style="width: 50%;">
<tr style="vertical-align: top;"><td style="width: 50%;">
<div class="field{% if form.errors.comment %} error{% endif %}">
{{ form.errors.comment }}
Comment: <span class="required">*</span><br />
@ -15,7 +15,25 @@
Estimated time in next status:<br />
<input type="text" name="weeks" value="{{ form.data.weeks }}" /> (in weeks)
</div>
</td><td style="padding: 0px; vertical-align: top;">
</td><td>
<div class="field">
{{ form.tags }}
</div>
</td></tr>
</table>
<br />
<table class="ietf-table edit-form edit-form-tags" style="width: 100%;">
<tr>
<th>3. Select one action</th>
</tr>
<tr><td>
<div class="only-tags field">
<ul>
<li><input type="submit" name="only_tags" value="Update annotation tags" /> State remains unchanged: <strong>{{ form.state.name }}</strong></li>
</ul>
</div>
{% with form.get_transitions as transitions %}
{% if transitions %}
<ul>