From bfaf558e8de0486a82e98885b038f7575b67e52c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?= Date: Fri, 13 Aug 2010 07:41:09 +0000 Subject: [PATCH] Liaison edit view. See #362 - Legacy-Id: 2475 --- ietf/liaisons/accounts.py | 2 ++ ietf/liaisons/forms.py | 8 +++++ ietf/liaisons/urls.py | 3 +- ietf/liaisons/views.py | 31 +++++++++++++++---- .../liaisons/liaisondetail_detail.html | 5 +++ .../liaisons/liaisondetail_edit.html | 6 ++-- ietf/templates/liaisons/liaisonform.html | 4 +++ 7 files changed, 50 insertions(+), 9 deletions(-) diff --git a/ietf/liaisons/accounts.py b/ietf/liaisons/accounts.py index 8492b019b..5cbf0cbf6 100644 --- a/ietf/liaisons/accounts.py +++ b/ietf/liaisons/accounts.py @@ -1,6 +1,8 @@ from ietf.idtracker.models import Role, PersonOrOrgInfo +LIAISON_EDIT_GROUPS = ['Liaison_Manager', 'Secreatriat'] + def get_ietf_chair(): person = PersonOrOrgInfo.objects.filter(role=Role.IETF_CHAIR) return person and person[0] or None diff --git a/ietf/liaisons/forms.py b/ietf/liaisons/forms.py index 8bc7fa8fa..069f90bfd 100644 --- a/ietf/liaisons/forms.py +++ b/ietf/liaisons/forms.py @@ -251,9 +251,17 @@ class OutgoingLiaisonForm(LiaisonForm): liaison.save() +class EditLiaisonForm(LiaisonForm): + + pass + + def liaison_form_factory(request, **kwargs): user = request.user force_incoming = 'incoming' in request.GET.keys() + liaison = kwargs.pop('liaison', None) + if liaison: + return EditLiaisonForm(instance=liaison, **kwargs) if not force_incoming and can_add_outgoing_liaison(user): return OutgoingLiaisonForm(user, **kwargs) elif can_add_incoming_liaison(user): diff --git a/ietf/liaisons/urls.py b/ietf/liaisons/urls.py index 9d8e9bf5f..7d0f3b24d 100644 --- a/ietf/liaisons/urls.py +++ b/ietf/liaisons/urls.py @@ -10,7 +10,6 @@ info_dict = { # there's an opportunity for date-based filtering. urlpatterns = patterns('django.views.generic.list_detail', - url(r'^(?P\d+)/$', 'object_detail', info_dict, name='liaison_detail'), ) urlpatterns += patterns('django.views.generic.simple', @@ -23,6 +22,8 @@ urlpatterns += patterns('django.views.generic.simple', urlpatterns += patterns('ietf.liaisons.views', url(r'^$', 'liaison_list', name='liaison_list'), + url(r'^(?P\d+)/$', 'liaison_detail', name='liaison_detail'), + url(r'^(?P\d+)/edit/$', 'liaison_edit', name='liaison_edit'), url(r'^for_approval/$', 'liaison_approval_list', name='liaison_approval_list'), url(r'^for_approval/(?P\d+)/$', 'liaison_approval_detail', name='liaison_approval_detail'), url(r'^add/$', 'add_liaison', name='add_liaison'), diff --git a/ietf/liaisons/views.py b/ietf/liaisons/views.py index 6a94d7975..5b56a4065 100644 --- a/ietf/liaisons/views.py +++ b/ietf/liaisons/views.py @@ -5,13 +5,13 @@ from django.conf import settings from django.core.urlresolvers import reverse from django.db.models import Q from django.http import HttpResponse, HttpResponseRedirect -from django.shortcuts import render_to_response +from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils import simplejson from django.views.generic.list_detail import object_list, object_detail from ietf.liaisons.accounts import (get_person_for_user, can_add_outgoing_liaison, - can_add_incoming_liaison) + can_add_incoming_liaison, LIAISON_EDIT_GROUPS) from ietf.liaisons.decorators import can_submit_liaison from ietf.liaisons.forms import liaison_form_factory from ietf.liaisons.models import LiaisonDetail, OutgoingLiaisonApproval @@ -19,10 +19,10 @@ from ietf.liaisons.utils import IETFHM @can_submit_liaison -def add_liaison(request): +def add_liaison(request, liaison=None): if request.method == 'POST': form = liaison_form_factory(request, data=request.POST.copy(), - files = request.FILES) + files = request.FILES, liaison=liaison) if form.is_valid(): liaison = form.save() if request.POST.get('send', None): @@ -32,11 +32,12 @@ def add_liaison(request): return _fake_email_view(request, liaison) return HttpResponseRedirect(reverse('liaison_list')) else: - form = liaison_form_factory(request) + form = liaison_form_factory(request, liaison=liaison) return render_to_response( 'liaisons/liaisondetail_edit.html', - {'form': form}, + {'form': form, + 'liaison': liaison}, context_instance=RequestContext(request), ) @@ -88,6 +89,7 @@ def liaison_list(request): can_send_outgoing = can_add_outgoing_liaison(user) can_send_incoming = can_add_incoming_liaison(user) can_approve = False + can_edit = False person = get_person_for_user(request.user) if person: @@ -101,6 +103,7 @@ def liaison_list(request): template_name='liaisons/liaisondetail_list.html', extra_context={'can_manage': can_approve or can_send_incoming or can_send_outgoing, 'can_approve': can_approve, + 'can_edit': can_edit, 'can_send_incoming': can_send_incoming, 'can_send_outgoing': can_send_outgoing}, ) @@ -147,3 +150,19 @@ def liaison_approval_detail(request, object_id): object_id=object_id, template_name='liaisons/liaisondetail_approval_detail.html', ) + + +def liaison_detail(request, object_id): + public_liaisons = LiaisonDetail.objects.filter(Q(approval__isnull=True)|Q(approval__approved=True)).order_by("-submitted_date") + can_edit = False + if request.user.groups.filter(name__in=LIAISON_EDIT_GROUPS): + can_edit = True + return object_detail(request, + public_liaisons, + object_id=object_id, + extra_context = {'can_edit': can_edit} + ) + +def liaison_edit(request, object_id): + liaison = get_object_or_404(LiaisonDetail, pk=object_id) + return add_liaison(request, liaison=liaison) diff --git a/ietf/templates/liaisons/liaisondetail_detail.html b/ietf/templates/liaisons/liaisondetail_detail.html index a3da3c25f..ef8262f38 100644 --- a/ietf/templates/liaisons/liaisondetail_detail.html +++ b/ietf/templates/liaisons/liaisondetail_detail.html @@ -67,4 +67,9 @@ {% endif %} +{% if can_edit %} +
+ +
+{% endif %} {% endblock %} diff --git a/ietf/templates/liaisons/liaisondetail_edit.html b/ietf/templates/liaisons/liaisondetail_edit.html index e0a2cf245..bb39d9b85 100644 --- a/ietf/templates/liaisons/liaisondetail_edit.html +++ b/ietf/templates/liaisons/liaisondetail_edit.html @@ -1,19 +1,21 @@ {% extends "base.html" %} {# Copyright The IETF Trust 2007, All Rights Reserved #} {% load ietf_filters %} -{% block title %}Liaison Statement: {% include 'liaisons/liaison_title.html' %}{% endblock %} +{% block title %}{% if liaison %}Edit liaison: {{ liaison }}{% else %}Send Liaison Statement{% endif %}{% endblock %} {% block pagehead %} {{ form.media }} {% endblock %} {% block content %} -

Send Liaison Statement

+

{% if liaison %}Edit liaison: {{ liaison }}{% else %}Send Liaison Statement{% endif %}

+{% if not liaison %}
  • If you wish to submit your liaison statement by e-mail, then please send it to statements@ietf.org
  • Fields marked with * are required. For detailed descriptions of the fields see Field help
+{% endif %} {{ form }} diff --git a/ietf/templates/liaisons/liaisonform.html b/ietf/templates/liaisons/liaisonform.html index 54c8c9113..5871db9e4 100644 --- a/ietf/templates/liaisons/liaisonform.html +++ b/ietf/templates/liaisons/liaisonform.html @@ -43,8 +43,12 @@ {% endfor %}
+{% if form.liaison %} + +{% else %} +{% endif %}