Second try on #1425. Returns to agenda and uses message. Commit ready for merge.

- Legacy-Id: 8614
This commit is contained in:
Harald T. Alvestrand 2014-11-09 01:21:16 +00:00
parent c0c608ae1c
commit 502dede548
2 changed files with 39 additions and 12 deletions

View file

@ -1,9 +1,11 @@
import os
import shutil
import datetime
import urlparse
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
from django.contrib import messages
from pyquery import PyQuery
@ -179,6 +181,8 @@ class EditTests(TestCase):
'saveas': "saveas",
})
self.assertEqual(r.status_code, 302)
# Verify that we actually got redirected to a new place.
self.assertNotEqual(urlparse.urlparse(r.url).path, url)
# get
schedule = meeting.get_schedule_by_name("foo")
@ -223,12 +227,26 @@ class EditTests(TestCase):
'savename': "/no/this/should/not/work/it/is/too/long",
'saveas': "saveas",
})
self.assertEqual(r.status_code, 404)
#r = self.client.post(url, {
# 'savename': "/invalid/chars/",
# 'saveas': "saveas",
# })
#self.assertEqual(r.status_code, 404)
self.assertEqual(r.status_code, 302)
self.assertEqual(urlparse.urlparse(r.url).path, url)
# TODO: Verify that an error message was in fact returned.
r = self.client.post(url, {
'savename': "/invalid/chars/",
'saveas': "saveas",
})
# TODO: Verify that an error message was in fact returned.
self.assertEqual(r.status_code, 302)
self.assertEqual(urlparse.urlparse(r.url).path, url)
# Non-ASCII alphanumeric characters
r = self.client.post(url, {
'savename': u"f\u00E9ling",
'saveas': "saveas",
})
# TODO: Verify that an error message was in fact returned.
self.assertEqual(r.status_code, 302)
self.assertEqual(urlparse.urlparse(r.url).path, url)
def test_edit_timeslots(self):

View file

@ -1,5 +1,5 @@
# Copyright The IETF Trust 2007, All Rights Reserved
import curses
import datetime
import os
import re
@ -12,6 +12,7 @@ import debug # pyflakes:ignore
from django import forms
from django.shortcuts import render_to_response, redirect
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.template import RequestContext
@ -88,6 +89,9 @@ def get_user_agent(request):
user_agent = ""
return user_agent
def ascii_alphanumeric(string):
return re.match(r'^[a-zA-Z0-9]*$', string)
class SaveAsForm(forms.Form):
savename = forms.CharField(max_length=16)
@ -99,25 +103,30 @@ def agenda_create(request, num=None, owner=None, name=None):
if schedule is None:
# here we have to return some ajax to display an error.
raise Http404("No meeting information for meeting %s owner %s schedule %s available" % (num, owner, name))
messages.error("Error: No meeting information for meeting %s owner %s schedule %s available" % (num, owner, name))
return redirect(edit_agenda, num=num, owner=owner, name=name)
# authorization was enforced by the @group_require decorator above.
saveasform = SaveAsForm(request.POST)
if not saveasform.is_valid():
return HttpResponse(status=404)
messages.info(request, "This name is not valid. Please choose another one.")
return redirect(edit_agenda, num=num, owner=owner, name=name)
savedname = saveasform.cleaned_data['savename']
if not savedname.isalnum():
return HttpResponse("Asked to save with invalid name", status=404)
if not ascii_alphanumeric(savedname):
messages.info(request, "This name contains illegal characters. Please choose another one.")
return redirect(edit_agenda, num=num, owner=owner, name=name)
# create the new schedule, and copy the scheduledsessions
try:
sched = meeting.schedule_set.get(name=savedname, owner=request.user.person)
if sched:
# XXX needs to record a session error and redirect to where?
return redirect(edit_agenda, meeting.number, sched.name)
else:
messages.info(request, "Agenda creation failed. Please try again.")
return redirect(edit_agenda, num=num, owner=owner, name=name)
except Schedule.DoesNotExist:
pass