Fixes #563
edit form. the url for this described with '^(?P<name>[^/]+)/edit/managing-shepherd/$' - Legacy-Id: 2694
This commit is contained in:
parent
273ae03734
commit
21e73c9d37
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -15,3 +15,6 @@
|
|||
.*.swp
|
||||
.DS_store
|
||||
# Simulated Subversion default ignores end here
|
||||
/.project
|
||||
/.pydevproject
|
||||
/.settings
|
||||
|
|
1
ietf/.gitignore
vendored
1
ietf/.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
/*.pyc
|
||||
/settings_local.py
|
||||
/ietfdb.sql.gz
|
||||
|
|
68
ietf/idrfc/forms.py
Normal file
68
ietf/idrfc/forms.py
Normal file
|
@ -0,0 +1,68 @@
|
|||
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()
|
|
@ -51,6 +51,8 @@ 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'),
|
||||
|
|
|
@ -20,6 +20,7 @@ from ietf.idtracker.models import *
|
|||
from ietf.iesg.models import *
|
||||
from ietf.idrfc.mails import *
|
||||
from ietf.idrfc.utils import *
|
||||
from idrfc.forms import ManagingShepherdForm
|
||||
|
||||
|
||||
class ChangeStateForm(forms.Form):
|
||||
|
@ -31,6 +32,8 @@ def change_state(request, name):
|
|||
"""Change state of Internet Draft, notifying parties as necessary
|
||||
and logging the change as a comment."""
|
||||
doc = get_object_or_404(InternetDraft, filename=name)
|
||||
print doc.idinternal
|
||||
print doc.status.status
|
||||
if not doc.idinternal or doc.status.status == "Expired":
|
||||
raise Http404()
|
||||
|
||||
|
@ -381,4 +384,21 @@ def add_comment(request, name):
|
|||
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))
|
|
@ -85,6 +85,9 @@ class SearchForm(forms.Form):
|
|||
return q
|
||||
|
||||
def search_query(query_original):
|
||||
"""
|
||||
@FIXME: This method should be re-factored !
|
||||
"""
|
||||
query = dict(query_original.items())
|
||||
drafts = query['activeDrafts'] or query['oldDrafts']
|
||||
if (not drafts) and (not query['rfcs']):
|
||||
|
@ -135,6 +138,7 @@ def search_query(query_original):
|
|||
matches = IDInternal.objects.filter(*q_objs)
|
||||
else:
|
||||
matches = InternetDraft.objects.filter(*q_objs)
|
||||
print q_objs
|
||||
if not query['activeDrafts']:
|
||||
matches = matches.exclude(Q(**{prefix+"status":1}))
|
||||
if not query['rfcs']:
|
||||
|
@ -184,6 +188,7 @@ def search_query(query_original):
|
|||
numbers = IDInternal.objects.filter(*numbers_q).values_list('draft_id',flat=True)
|
||||
q_objs.append(Q(rfc_number__in=numbers))
|
||||
|
||||
|
||||
if searchRfcIndex:
|
||||
matches = RfcIndex.objects.filter(*q_objs)[:MAX]
|
||||
else:
|
||||
|
@ -205,6 +210,7 @@ def search_query(query_original):
|
|||
else:
|
||||
rfcresults.append([rfc.rfc_number, None, rfc, None])
|
||||
|
||||
|
||||
# Find missing InternetDraft objects
|
||||
for r in rfcresults:
|
||||
if not r[1]:
|
||||
|
|
|
@ -101,7 +101,7 @@ class InternetDraftAdmin(admin.ModelAdmin):
|
|||
search_fields=['filename', 'title']
|
||||
list_filter=['status']
|
||||
raw_id_fields=['replaced_by']
|
||||
admin.site.register(InternetDraft, InternetDraftAdmin)
|
||||
admin.site.register(InternetDraft)
|
||||
|
||||
class PersonOrOrgInfoAdmin(admin.ModelAdmin):
|
||||
fieldsets=((None, {'fields': (('first_name', 'middle_initial', 'last_name'), ('name_suffix', 'modified_by'))}), ('Obsolete Info', {'fields': ('record_type', 'created_by', 'address_type'), 'classes': 'collapse'}))
|
||||
|
|
67
ietf/idtracker/forms.py
Normal file
67
ietf/idtracker/forms.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
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):
|
||||
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()
|
50
ietf/templates/idrfc/edit_management_shepherd.html
Normal file
50
ietf/templates/idrfc/edit_management_shepherd.html
Normal file
|
@ -0,0 +1,50 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Edit info on {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.edit-info #id_state_change_notice_to {
|
||||
width: 600px;
|
||||
}
|
||||
form.edit-info #id_note {
|
||||
width: 600px;
|
||||
height: 150px;
|
||||
}
|
||||
form.edit-info .actions {
|
||||
padding-top: 20px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% load ietf_filters %}
|
||||
<h1>Edit info on {{ doc }}</h1>
|
||||
|
||||
Shepherd: {{ doc.shepherd }}
|
||||
|
||||
{{ form.non_field_errors }}
|
||||
<form class="edit-info" action="" method="POST">
|
||||
<table>
|
||||
{% for field in form %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}:</th>
|
||||
<td>{{ field }}
|
||||
{% ifequal field.name "telechat_date" %}{{ form.returning_item }} {{ form.returning_item.label_tag }} {{ form.returning_item.errors }}{% endifequal %}
|
||||
{% ifequal field.name "job_owner" %}
|
||||
{% if user|in_group:"Area_Director" %}
|
||||
<label><input type="checkbox" name="job_owner" value="{{ login.id }}" /> Assign to me</label>
|
||||
{% endif %}
|
||||
{% endifequal %}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{{ doc.idinternal.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{% endblock %}
|
1
ietf/templates/idrfc/edit_management_shepherd_email.txt
Normal file
1
ietf/templates/idrfc/edit_management_shepherd_email.txt
Normal file
|
@ -0,0 +1 @@
|
|||
Designated person with email {{ email }} should get a user/password.
|
Loading…
Reference in a new issue