From ebaf7ae436aa82cee256e30ec27e31aafd49feef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?= Date: Thu, 9 Dec 2010 13:00:43 +0000 Subject: [PATCH] Moved shepherd management into wgchairs application. See #563 - Legacy-Id: 2708 --- ietf/idrfc/forms.py | 68 ------------------- ietf/idrfc/urls.py | 2 - ietf/idrfc/views_edit.py | 20 ------ .../edit_management_shepherd.html | 0 .../edit_management_shepherd_email.txt | 0 ietf/wgchairs/forms.py | 63 +++++++++++++++++ ietf/wgchairs/urls.py | 1 + ietf/wgchairs/views.py | 25 ++++++- ietf/wginfo/views.py | 2 +- 9 files changed, 88 insertions(+), 93 deletions(-) delete mode 100644 ietf/idrfc/forms.py rename ietf/templates/{idrfc => wgchairs}/edit_management_shepherd.html (100%) rename ietf/templates/{idrfc => wgchairs}/edit_management_shepherd_email.txt (100%) diff --git a/ietf/idrfc/forms.py b/ietf/idrfc/forms.py deleted file mode 100644 index eae1fc611..000000000 --- a/ietf/idrfc/forms.py +++ /dev/null @@ -1,68 +0,0 @@ -from django.conf import settings -from django import forms -from idtracker.models import PersonOrOrgInfo -from django.db.models import Q -from django.template.loader import render_to_string -from django.core.mail import EmailMessage - - -class ManagingShepherdForm(forms.Form): - email = forms.EmailField(required=False) - is_assign_current = forms.BooleanField(required=False) - - - def __init__(self, *args, **kwargs): - if kwargs.has_key('current_person'): - self.current_person = kwargs.pop('current_person') - return super(ManagingShepherdForm, self).__init__(*args, **kwargs) - - def clean_email(self): - email = self.cleaned_data.get('email') - if not email: - return None - - try: - PersonOrOrgInfo.objects. \ - filter(emailaddress__type__in=[ "INET", "Prim",], - emailaddress__address=email) \ - [:1].get() - except PersonOrOrgInfo.DoesNotExist: - if self.cleaned_data.get('is_assign_current'): - self._send_email(email) - raise forms.ValidationError("Person with such email does not exist") - return email - - def clean(self): - print self.cleaned_data.get('email') and self.cleaned_data.get('is_assign_current') - if self.cleaned_data.get('email') and \ - self.cleaned_data.get('is_assign_current'): - raise forms.ValidationError("You should choose to assign to current \ - person or input the email. Not both at te same time. ") - - return self.cleaned_data - - def change_shepherd(self, document, save=True): - email = self.cleaned_data.get('email') - if email: - person = PersonOrOrgInfo.objects. \ - filter(emailaddress__type__in=[ "INET", "Prim",], - emailaddress__address=email) \ - [:1].get() - else: - person = self.current_person - document.shepherd = person - if save: - document.save() - return document - - def _send_email(self, email, - template='idrfc/edit_management_shepherd_email.txt'): - subject = 'WG Delegate needs system credentials' - body = render_to_string(template, - {'email': email, - }) - mail = EmailMessage(subject=subject, - body=body, - to=[email, settings.DEFAULT_FROM_EMAIL, ], - from_email=settings.DEFAULT_FROM_EMAIL) - mail.send() \ No newline at end of file diff --git a/ietf/idrfc/urls.py b/ietf/idrfc/urls.py index 128d6793c..88bf31d16 100644 --- a/ietf/idrfc/urls.py +++ b/ietf/idrfc/urls.py @@ -51,8 +51,6 @@ urlpatterns = patterns('', url(r'^(?P[^/]+)/edit/requestresurrect/$', views_edit.request_resurrect, name='doc_request_resurrect'), url(r'^(?P[^/]+)/edit/resurrect/$', views_edit.resurrect, name='doc_resurrect'), url(r'^(?P[^/]+)/edit/addcomment/$', views_edit.add_comment, name='doc_add_comment'), - url(r'^(?P[^/]+)/edit/managing-shepherd/$', views_edit.managing_shepherd, name='doc_managing_shepherd'), - url(r'^(?P[^/]+)/edit/position/$', views_ballot.edit_position, name='doc_edit_position'), url(r'^(?P[^/]+)/edit/deferballot/$', views_ballot.defer_ballot, name='doc_defer_ballot'), url(r'^(?P[^/]+)/edit/undeferballot/$', views_ballot.undefer_ballot, name='doc_undefer_ballot'), diff --git a/ietf/idrfc/views_edit.py b/ietf/idrfc/views_edit.py index 3a1e37fef..9a928a0b5 100644 --- a/ietf/idrfc/views_edit.py +++ b/ietf/idrfc/views_edit.py @@ -20,7 +20,6 @@ from ietf.idtracker.models import * from ietf.iesg.models import * from ietf.idrfc.mails import * from ietf.idrfc.utils import * -from ietf.idrfc.forms import ManagingShepherdForm class ChangeStateForm(forms.Form): @@ -381,22 +380,3 @@ def add_comment(request, name): dict(doc=doc, form=form), context_instance=RequestContext(request)) - -def managing_shepherd(request, name): - """ - View for managing the assigned shepherd of a document. - """ - doc = get_object_or_404(InternetDraft, filename=name) - login = IESGLogin.objects.get(login_name=request.user.username) - form = ManagingShepherdForm() - if request.method == "POST": - form = ManagingShepherdForm(request.POST, current_person=login.person) - if form.is_valid(): - form.change_shepherd(doc) - - return render_to_response('idrfc/edit_management_shepherd.html', - dict(doc=doc, - form=form, - user=request.user, - login=login), - context_instance=RequestContext(request)) diff --git a/ietf/templates/idrfc/edit_management_shepherd.html b/ietf/templates/wgchairs/edit_management_shepherd.html similarity index 100% rename from ietf/templates/idrfc/edit_management_shepherd.html rename to ietf/templates/wgchairs/edit_management_shepherd.html diff --git a/ietf/templates/idrfc/edit_management_shepherd_email.txt b/ietf/templates/wgchairs/edit_management_shepherd_email.txt similarity index 100% rename from ietf/templates/idrfc/edit_management_shepherd_email.txt rename to ietf/templates/wgchairs/edit_management_shepherd_email.txt diff --git a/ietf/wgchairs/forms.py b/ietf/wgchairs/forms.py index b41960c19..0818cd4d8 100644 --- a/ietf/wgchairs/forms.py +++ b/ietf/wgchairs/forms.py @@ -1,4 +1,5 @@ from django import forms +from django.db.models import Q from django.conf import settings from django.core.mail import EmailMessage from django.template.loader import render_to_string @@ -181,3 +182,65 @@ def add_form_factory(request, wg, user): return AddDelegateForm(wg=wg, user=user, data=request.POST.copy()) return AddDelegateForm(wg=wg, user=user) + + +class ManagingShepherdForm(forms.Form): + email = forms.EmailField(required=False) + is_assign_current = forms.BooleanField(required=False) + + + def __init__(self, *args, **kwargs): + if kwargs.has_key('current_person'): + self.current_person = kwargs.pop('current_person') + return super(ManagingShepherdForm, self).__init__(*args, **kwargs) + + def clean_email(self): + email = self.cleaned_data.get('email') + if not email: + return None + + try: + PersonOrOrgInfo.objects. \ + filter(emailaddress__type__in=[ "INET", "Prim",], + emailaddress__address=email) \ + [:1].get() + except PersonOrOrgInfo.DoesNotExist: + if self.cleaned_data.get('is_assign_current'): + self._send_email(email) + raise forms.ValidationError("Person with such email does not exist") + return email + + def clean(self): + print self.cleaned_data.get('email') and self.cleaned_data.get('is_assign_current') + if self.cleaned_data.get('email') and \ + self.cleaned_data.get('is_assign_current'): + raise forms.ValidationError("You should choose to assign to current \ + person or input the email. Not both at te same time. ") + + return self.cleaned_data + + def change_shepherd(self, document, save=True): + email = self.cleaned_data.get('email') + if email: + person = PersonOrOrgInfo.objects. \ + filter(emailaddress__type__in=[ "INET", "Prim",], + emailaddress__address=email) \ + [:1].get() + else: + person = self.current_person + document.shepherd = person + if save: + document.save() + return document + + def _send_email(self, email, + template='wgchairs/edit_management_shepherd_email.txt'): + subject = 'WG Delegate needs system credentials' + body = render_to_string(template, + {'email': email, + }) + mail = EmailMessage(subject=subject, + body=body, + to=[email, settings.DEFAULT_FROM_EMAIL, ], + from_email=settings.DEFAULT_FROM_EMAIL) + mail.send() diff --git a/ietf/wgchairs/urls.py b/ietf/wgchairs/urls.py index 916fa4ace..a64747c1d 100644 --- a/ietf/wgchairs/urls.py +++ b/ietf/wgchairs/urls.py @@ -5,4 +5,5 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('ietf.wgchairs.views', url(r'^workflows/$', 'manage_workflow', name='manage_workflow'), url(r'^delegates/$', 'manage_delegates', name='manage_delegates'), + url(r'shepherds/(?P[^/]+)/$', 'managing_shepherd', name='doc_managing_shepherd'), ) diff --git a/ietf/wgchairs/views.py b/ietf/wgchairs/views.py index 646aa9ad5..9970a1ed4 100644 --- a/ietf/wgchairs/views.py +++ b/ietf/wgchairs/views.py @@ -1,9 +1,10 @@ -from ietf.idtracker.models import IETFWG +from ietf.idtracker.models import IETFWG, InternetDraft, IESGLogin from django.shortcuts import get_object_or_404, render_to_response from django.template import RequestContext from django.http import HttpResponseForbidden -from ietf.wgchairs.forms import RemoveDelegateForm, add_form_factory +from ietf.wgchairs.forms import (RemoveDelegateForm, add_form_factory, + ManagingShepherdForm) from ietf.wgchairs.accounts import can_manage_delegates_in_group from ietf.ietfworkflows.utils import get_workflow_for_wg @@ -39,3 +40,23 @@ def manage_workflow(request, acronym): {'wg': wg, 'workflow': workflow, }, RequestContext(request)) + + +def managing_shepherd(request, acronym, name): + """ + View for managing the assigned shepherd of a document. + """ + doc = get_object_or_404(InternetDraft, filename=name) + login = IESGLogin.objects.get(login_name=request.user.username) + form = ManagingShepherdForm() + if request.method == "POST": + form = ManagingShepherdForm(request.POST, current_person=login.person) + if form.is_valid(): + form.change_shepherd(doc) + + return render_to_response('wgchairs/edit_management_shepherd.html', + dict(doc=doc, + form=form, + user=request.user, + login=login), + context_instance=RequestContext(request)) diff --git a/ietf/wginfo/views.py b/ietf/wginfo/views.py index fd5e5dc7c..61b341b6d 100644 --- a/ietf/wginfo/views.py +++ b/ietf/wginfo/views.py @@ -38,7 +38,7 @@ from django.template import RequestContext, loader from django.http import HttpResponse from ietf.idrfc.views_search import SearchForm, search_query from ietf.idrfc.idrfc_wrapper import IdRfcWrapper -from idtracker.models import InternetDraft, PersonOrOrgInfo, IESGLogin +from ietf.idtracker.models import InternetDraft, PersonOrOrgInfo, IESGLogin from django.db.models import Q def wg_summary_acronym(request):