Moved shepherd management into wgchairs application. See #563

- Legacy-Id: 2708
This commit is contained in:
Emilio A. Sánchez López 2010-12-09 13:00:43 +00:00
parent 34f9cec92a
commit ebaf7ae436
9 changed files with 88 additions and 93 deletions

View file

@ -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()

View file

@ -51,8 +51,6 @@ urlpatterns = patterns('',
url(r'^(?P<name>[^/]+)/edit/requestresurrect/$', views_edit.request_resurrect, name='doc_request_resurrect'),
url(r'^(?P<name>[^/]+)/edit/resurrect/$', views_edit.resurrect, name='doc_resurrect'),
url(r'^(?P<name>[^/]+)/edit/addcomment/$', views_edit.add_comment, name='doc_add_comment'),
url(r'^(?P<name>[^/]+)/edit/managing-shepherd/$', views_edit.managing_shepherd, name='doc_managing_shepherd'),
url(r'^(?P<name>[^/]+)/edit/position/$', views_ballot.edit_position, name='doc_edit_position'),
url(r'^(?P<name>[^/]+)/edit/deferballot/$', views_ballot.defer_ballot, name='doc_defer_ballot'),
url(r'^(?P<name>[^/]+)/edit/undeferballot/$', views_ballot.undefer_ballot, name='doc_undefer_ballot'),

View file

@ -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))

View file

@ -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()

View file

@ -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<name>[^/]+)/$', 'managing_shepherd', name='doc_managing_shepherd'),
)

View file

@ -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))

View file

@ -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):