Place the edit state/stream action into the draft view. Show only actions allowed. Fixes #625

- Legacy-Id: 2897
This commit is contained in:
Emilio A. Sánchez López 2011-03-21 09:48:35 +00:00
parent 9acbac7351
commit e2e11b82aa
6 changed files with 93 additions and 1 deletions

View file

@ -1042,6 +1042,8 @@ class IRTF(models.Model):
meeting_scheduled = models.BooleanField(blank=True)
def __str__(self):
return self.acronym
def chairs(self): # return a set of IRTFChair objects for this work group
return IRTFChair.objects.filter(irtf=self)
class Meta:
db_table = 'irtf'
verbose_name="IRTF Research Group"

View file

@ -0,0 +1,45 @@
from ietf.idrfc.idrfc_wrapper import IdRfcWrapper, IdWrapper
from ietf.ietfworkflows.streams import get_streamed_draft, get_chair_model
def get_person_for_user(user):
try:
return user.get_profile().person()
except:
return None
def is_secretariat(user):
if not user or not user.is_authenticated():
return False
return bool(user.groups.filter(name='Secretariat'))
def is_chair(user, draft):
person = get_person_for_user(user)
if not person:
return False
streamed = get_streamed_draft(draft)
if not streamed or not streamed.stream:
return False
group = streamed.group
if not group or not hasattr(group, 'chairs'):
return False
return bool(group.chairs().filter(person=person).count())
def can_edit_state(user, draft):
streamed = get_streamed_draft(draft)
if not streamed or not streamed.stream:
return False
return (is_secretariat(user) or
is_chair(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

@ -29,6 +29,20 @@ def get_stream_from_id(stream_id):
return None
def get_chair_model(stream):
model_str = stream.group_chair_model
if not model_str:
return None
try:
app, model = model_str.split('.', 1)
except ValueError:
return None
chair_model = models.get_model(app, model)
if not chair_model:
return
return chair_model
def _get_group_from_acronym(group_model_str, acronym):
try:
app, model = group_model_str.split('.', 1)

View file

@ -4,6 +4,8 @@ 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)
register = template.Library()
@ -45,3 +47,25 @@ def workflow_history_entry(context, entry):
real_entry = entry.get_real_instance()
return {'entry': real_entry,
'entry_class': real_entry.__class__.__name__.lower()}
@register.inclusion_tag('ietfworkflows/edit_actions.html', takes_context=True)
def edit_actions(context, wrapper):
request = context.get('request', None)
user = request and request.user
if not user:
return {}
idwrapper = None
if isinstance(wrapper, IdRfcWrapper):
idwrapper = wrapper.id
elif isinstance(wrapper, IdWrapper):
idwrapper = wrapper
if not idwrapper:
return None
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

@ -32,7 +32,7 @@ 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 %}
{% load ietf_filters ietf_streams %}
{% block title %}{{ doc.draft_name_and_revision }}{% endblock %}
{% block doc_meta_description %}{{ doc.title }} ({{info.type}}; {{doc.publication_date|date:"Y"}}){% endblock %}
@ -81,6 +81,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{% endblock doc_metatable %}
{% block doc_metalinks %}
{% edit_actions doc %}
<div>
<a href="mailto:{{doc.draft_name}}@tools.ietf.org?subject=Mail%20regarding%20{{doc.draft_name}}" rel="nofollow">Email Authors</a>
| <a href="/ipr/search/?option=document_search&amp;id_document_tag={{doc.tracker_id}}" rel="nofollow">IPR Disclosures</a>

View file

@ -0,0 +1,6 @@
<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 %}
</div>