99 lines
3.7 KiB
Python
99 lines
3.7 KiB
Python
# Copyright The IETF Trust 2011, All Rights Reserved
|
|
import os, datetime
|
|
|
|
from django.http import HttpResponseRedirect, Http404
|
|
from django import forms
|
|
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
|
from django.core.urlresolvers import reverse
|
|
from django.template import RequestContext
|
|
from django.conf import settings
|
|
|
|
from ietf.ietfauth.decorators import group_required
|
|
from ietf.group.models import Group
|
|
from ietf.doc.models import Document, DocHistory, DocEvent
|
|
from ietf.group.utils import save_group_in_history
|
|
|
|
from utils import next_revision, set_or_create_charter, save_charter_in_history
|
|
|
|
class UploadForm(forms.Form):
|
|
content = forms.CharField(widget=forms.Textarea, label="Charter text", help_text="Edit the charter text", required=False)
|
|
txt = forms.FileField(label=".txt format", help_text="Or upload a .txt file", required=False)
|
|
|
|
def clean_content(self):
|
|
return self.cleaned_data["content"].replace("\r", "")
|
|
|
|
def save(self, wg, rev):
|
|
fd = self.cleaned_data['txt']
|
|
filename = os.path.join(settings.CHARTER_PATH, 'charter-ietf-%s-%s.txt' % (wg.acronym, rev))
|
|
if fd:
|
|
# A file was specified. Save it.
|
|
destination = open(filename, 'wb+')
|
|
for chunk in fd.chunks():
|
|
destination.write(chunk)
|
|
destination.close()
|
|
else:
|
|
# No file, save content
|
|
destination = open(filename, 'wb+')
|
|
content = self.cleaned_data['content']
|
|
destination.write(content)
|
|
destination.close()
|
|
|
|
@group_required('Area_Director','Secretariat')
|
|
def submit(request, name):
|
|
# Get WG by acronym, redirecting if there's a newer acronym
|
|
try:
|
|
wg = Group.objects.get(acronym=name)
|
|
except Group.DoesNotExist:
|
|
wglist = GroupHistory.objects.filter(acronym=name)
|
|
if wglist:
|
|
return redirect('charter_submit', name=wglist[0].group.acronym)
|
|
else:
|
|
raise Http404()
|
|
# Get charter
|
|
charter = set_or_create_charter(wg)
|
|
|
|
login = request.user.get_profile()
|
|
|
|
if request.method == 'POST':
|
|
form = UploadForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
save_charter_in_history(charter)
|
|
# Also save group history so we can search for it
|
|
save_group_in_history(wg)
|
|
|
|
# Search history for possible collisions with abandoned efforts
|
|
rev_list = list(charter.history_set.order_by('-time').values_list('rev', flat=True))
|
|
next_rev = next_revision(charter.rev)
|
|
while next_rev in rev_list:
|
|
next_rev = next_revision(next_rev)
|
|
|
|
charter.rev = next_rev
|
|
|
|
e = DocEvent()
|
|
e.type = "new_revision"
|
|
e.by = login
|
|
e.doc = charter
|
|
e.desc = "New version available: <b>charter-ietf-%s-%s.txt</b>" % (wg.acronym, charter.rev)
|
|
e.save()
|
|
|
|
# Save file on disk
|
|
form.save(wg, charter.rev)
|
|
|
|
charter.time = datetime.datetime.now()
|
|
charter.save()
|
|
|
|
return HttpResponseRedirect(reverse('wg_view', kwargs={'name': wg.acronym}))
|
|
else:
|
|
filename = os.path.join(settings.CHARTER_PATH, 'charter-ietf-%s-%s.txt' % (wg.acronym, wg.charter.rev))
|
|
try:
|
|
charter_text = open(filename, 'r')
|
|
init = dict(content = charter_text.read())
|
|
except IOError:
|
|
init = {}
|
|
form = UploadForm(initial = init)
|
|
return render_to_response('wgcharter/submit.html',
|
|
{'form': form,
|
|
'next_rev': next_revision(wg.charter.rev),
|
|
'wg': wg},
|
|
context_instance=RequestContext(request))
|