|
1 | 1 | # Copyright The IETF Trust 2007, All Rights Reserved |
2 | 2 | import datetime |
| 3 | +from email.utils import parseaddr |
3 | 4 |
|
4 | 5 | from django.conf import settings |
5 | 6 | from django.core.urlresolvers import reverse |
6 | 7 | from django.db.models import Q |
| 8 | +from django.forms.fields import email_re |
7 | 9 | from django.http import HttpResponse, HttpResponseRedirect |
8 | 10 | from django.shortcuts import render_to_response, get_object_or_404 |
9 | 11 | from django.template import RequestContext |
10 | 12 | from django.utils import simplejson |
11 | 13 | from django.views.generic.list_detail import object_list, object_detail |
12 | 14 |
|
13 | 15 | from ietf.liaisons.accounts import (get_person_for_user, can_add_outgoing_liaison, |
14 | | - can_add_incoming_liaison, LIAISON_EDIT_GROUPS) |
| 16 | + can_add_incoming_liaison, LIAISON_EDIT_GROUPS, |
| 17 | + is_ietfchair, is_iabchair, is_iab_executive_director) |
15 | 18 | from ietf.liaisons.decorators import can_submit_liaison |
16 | 19 | from ietf.liaisons.forms import liaison_form_factory |
17 | 20 | from ietf.liaisons.models import LiaisonDetail, OutgoingLiaisonApproval |
@@ -168,16 +171,55 @@ def liaison_approval_detail(request, object_id): |
168 | 171 | ) |
169 | 172 |
|
170 | 173 |
|
| 174 | +def _can_take_care(liaison, user): |
| 175 | + if not liaison.deadline_date or liaison.taken_care: |
| 176 | + return False |
| 177 | + |
| 178 | + if user.is_authenticated(): |
| 179 | + if user.groups.filter(name__in=LIAISON_EDIT_GROUPS): |
| 180 | + return True |
| 181 | + else: |
| 182 | + return _can_take_care(liaison, get_person_for_user(user)) |
| 183 | + return False |
| 184 | + |
| 185 | + |
| 186 | +def _find_person_in_emails(liaison, person): |
| 187 | + if not person: |
| 188 | + return False |
| 189 | + emails = ','.join([liaison.cc1, liaison.cc2, liaison.to_email, |
| 190 | + liaison.to_poc, liaison.submitter_email, |
| 191 | + liaison.replyto, liaison.response_contact, |
| 192 | + technical_contact]) |
| 193 | + for email in emails.split(','): |
| 194 | + name, addr = parseaddr(email) |
| 195 | + if email_re.search(addr) and person.emailaddress_set.filter(address=addr): |
| 196 | + return True |
| 197 | + elif addr in ('chair@ietf.org', 'iesg@ietf.org') and is_ietfchair(person): |
| 198 | + return True |
| 199 | + elif addr in ('iab@iab.org', 'iab-chair@iab.org') and is_iabchair(person): |
| 200 | + return True |
| 201 | + elif addr in ('execd@iab.org', ) and is_iab_executive_director(person): |
| 202 | + return True |
| 203 | + return False |
| 204 | + |
| 205 | + |
171 | 206 | def liaison_detail(request, object_id): |
172 | 207 | public_liaisons = LiaisonDetail.objects.filter(Q(approval__isnull=True)|Q(approval__approved=True)).order_by("-submitted_date") |
| 208 | + liaison = get_object_or_404(public_liaisons, pk=object_id) |
173 | 209 | can_edit = False |
174 | 210 | user = request.user |
| 211 | + can_take_care = _can_take_care(liaison, user) |
175 | 212 | if user.is_authenticated() and user.groups.filter(name__in=LIAISON_EDIT_GROUPS): |
176 | 213 | can_edit = True |
| 214 | + if request.method == 'POST' and request.POST.get('do_taken_care', None) and can_take_care: |
| 215 | + liaison.taken_care = True |
| 216 | + liaison.save() |
| 217 | + can_take_care = False |
177 | 218 | return object_detail(request, |
178 | 219 | public_liaisons, |
179 | 220 | object_id=object_id, |
180 | | - extra_context = {'can_edit': can_edit} |
| 221 | + extra_context = {'can_edit': can_edit, |
| 222 | + 'can_take_care': can_take_care} |
181 | 223 | ) |
182 | 224 |
|
183 | 225 | def liaison_edit(request, object_id): |
|
0 commit comments