Skip to content

Commit

Permalink
added a named url form wizard, redirects to nice urls with init argum…
Browse files Browse the repository at this point in the history
…ents url_name and done_step_name
  • Loading branch information
stephrdev committed Feb 25, 2010
1 parent fe24342 commit 0596f65
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
Empty file added formwizard/contrib/__init__.py
Empty file.
53 changes: 53 additions & 0 deletions formwizard/contrib/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from formwizard.forms import SessionFormWizard

class NamedUrlSessionFormWizard(SessionFormWizard):
done_step_name = 'done'

def __init__(self, *args, **kwargs):
assert kwargs.has_key('url_name'), 'url name is needed to resolve correct wizard urls'
self.url_name = kwargs['url_name']
del kwargs['url_name']
if kwargs.has_key('done_step_name'):
self.done_step_name = kwargs['done_step_name']
del kwargs['done_step_name']
super(NamedUrlSessionFormWizard, self).__init__(*args, **kwargs)
assert not self.form_list.has_key(self.done_step_name), 'step name "%s" is reserved for the "done" view' % self.done_step_name

def process_get_request(self, *args, **kwargs):
if not kwargs.has_key('step'):
if self.request.GET.has_key('reset'):
self.reset_wizard()
self.storage.set_current_step(self.get_first_step())
return HttpResponseRedirect(reverse(self.url_name, kwargs={'step': self.determine_step()}))
else:
step_url = kwargs.get('step', None)
if step_url == self.done_step_name:
return self.render_done(self.get_form(step=self.get_last_step(), data=self.storage.get_step_data(self.get_last_step())), *args, **kwargs)
if step_url <> self.storage.get_current_step():
if self.form_list.has_key(step_url):
self.storage.set_current_step(step_url)
else:
self.storage.set_current_step(self.get_first_step())
return HttpResponseRedirect(reverse(self.url_name, kwargs={'step': self.storage.get_current_step()}))
else:
return self.render(self.get_form(data=self.storage.get_step_data(self.storage.get_current_step())))

def process_post_request(self, *args, **kwargs):
if self.request.POST.has_key('form_prev_step') and self.form_list.has_key(self.request.POST['form_prev_step']):
self.storage.set_current_step(self.request.POST['form_prev_step'])
return HttpResponseRedirect(reverse(self.url_name, kwargs={'step': self.storage.get_current_step()}))
else:
return super(NamedUrlSessionFormWizard, self).process_post_request(*args, **kwargs)

def render_next_step(self, form, *args, **kwargs):
next_step = self.get_next_step()
self.storage.set_current_step(next_step)
return HttpResponseRedirect(reverse(self.url_name, kwargs={'step': next_step}))

def render_done(self, *args, **kwargs):
step_url = kwargs.get('step', None)
if step_url <> self.done_step_name:
return HttpResponseRedirect(reverse(self.url_name, kwargs={'step': self.done_step_name}))
return super(NamedUrlSessionFormWizard, self).render_done(*args, **kwargs)

0 comments on commit 0596f65

Please sign in to comment.