# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'portal',
+ 'django.contrib.formtools',
+ 'crispy_forms',
)
# A sample logging configuration. The only tangible logging
--- /dev/null
+#-*- coding: utf-8 -*-
+
+from django import forms
+from portal.models import PendingUser
+from crispy_forms.helper import FormHelper
+from crispy_forms.layout import Submit
+
+class RegisterUserForm(forms.ModelForm):
+ def __init__(self, *args, **kwargs):
+ self.helper = FormHelper()
+ self.helper.form_tag = False
+ #self.helper.form_id = 'id-exampleForm'
+ self.helper.form_class = 'blueForms'
+ self.helper.form_method = 'post'
+ #self.helper.form_action = 'submit_survey'
+ self.helper.add_input(Submit('submit', 'Submit'))
+ super(RegisterUserForm, self).__init__(*args, **kwargs)
+
+ first_name = forms.CharField( widget=forms.TextInput )
+ last_name = forms.CharField( widget=forms.TextInput )
+ email = forms.CharField( widget=forms.TextInput )
+ password = forms.CharField( widget=forms.PasswordInput )
+ password2 = forms.CharField( widget=forms.PasswordInput )
+ keypair = forms.CharField( widget=forms.PasswordInput )
+ #keypair = forms.CharField( widget=forms.FileInput )
+ class Meta:
+ model = PendingUser
+
+class RegisterUserStep2Form(forms.ModelForm):
+ class Meta:
+ model = PendingUser
from django.db import models
# Create your models here.
+
+class Institution(models.Model):
+ name = models.TextField()
+ # list of associated email domains
+
+class PendingUser(models.Model):
+ first_name = models.TextField()
+ last_name = models.TextField()
+ email = models.TextField()
+ password = models.TextField()
+ keypair = models.TextField()
+ # institution
+
+class PendingSlice(models.Model):
+ slice_name = models.TextField()
--- /dev/null
+{% extends "layout-unfold1.html" %}
+{% load i18n %}
+{% load crispy_forms_tags %}
+
+
+{% block head %}
+{{ wizard.form.media }}
+<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}css/smart_wizard.css" />
+{% endblock %}
+
+{% block unfold1_main %}
+
+ <h1>User registration</h1>
+
+ <div class='swMain'>
+
+ <ul class='anchor'>
+ {% for step in wizard.steps.all %}
+ <li>
+ <a href="#step-1" class="selected" isdone="0" rel="1">
+ <label class="stepNumber">{{forloop.counter}}</label>
+ <span class="stepDesc">Step {{forloop.counter}}<br><small>NAME OF THE STEP HERE</small></span>
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+ <div style='clear: both;'/>
+
+ <form action="" method="post">{% csrf_token %}
+ <table>
+ {% if wizard.form.forms %}
+ {{ wizard.management_form }}
+ {% for form in wizard.form.forms %}
+ {% crispy form form.helper %}
+ {% endfor %}
+ {% else %}
+ {{ wizard.management_form }}
+ {% crispy wizard.form %}
+ {% endif %}
+ </table>
+
+ {% if wizard.steps.prev %}
+ <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
+ <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
+ {% endif %}
+
+ <div class='actionBar'>
+ <input class='buttonNext' type="submit" value="{% trans "submit" %}"/>
+
+ <div class="contrdol-group">
+ <div class="contrdols">
+ {% if wizard.steps.prev %}
+ <button class="buttonPrevious" name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">prev step</button>
+ {% endif %}
+ <input class="buttonNext" type="submit" value="next step"/>
+ </div>
+ </div>
+ </div>
+ </form>
+
+ <div class="progress progress-info progress-striped" style="clear: both;">
+ <div class="bar" style="width:{% widthratio wizard.steps.step1 wizard.steps.count 100%}%">
+ Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}
+ </div>
+ </div>
+ </div><!-- swMain -->
+
+{% endblock %}
--- /dev/null
+{% extends "layout-unfold1.html" %}
+{% load i18n %}
+{% load crispy_forms_tags %}
+
+
+{% block head %}
+{{ wizard.form.media }}
+<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}css/smart_wizard.css" />
+{% endblock %}
+
+{% block unfold1_main %}
+
+ <h1>User registration</h1>
+
+ <div class='swMain'>
+
+ <ul class='anchor'>
+ {% for step in wizard.steps.all %}
+ <li>
+ <a href="#step-1" class="selected" isdone="0" rel="1">
+ <label class="stepNumber">{{forloop.counter}}</label>
+ <span class="stepDesc">Step {{forloop.counter}}<br><small>NAME OF THE STEP HERE</small></span>
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+ <div style='clear: both;'/>
+
+ <form action="" method="post">{% csrf_token %}
+ <table>
+ {% if wizard.form.forms %}
+ {{ wizard.management_form }}
+ {% for form in wizard.form.forms %}
+ {% crispy form form.helper %}
+ {% endfor %}
+ {% else %}
+ {{ wizard.management_form }}
+ {% crispy wizard.form %}
+ {% endif %}
+ </table>
+
+ {% if wizard.steps.prev %}
+ <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
+ <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
+ {% endif %}
+
+ <div class='actionBar'>
+ <input class='buttonNext' type="submit" value="{% trans "submit" %}"/>
+
+ <div class="contrdol-group">
+ <div class="contrdols">
+ {% if wizard.steps.prev %}
+ <button class="buttonPrevious" name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">prev step</button>
+ {% endif %}
+ <input class="buttonNext" type="submit" value="next step"/>
+ </div>
+ </div>
+ </div>
+ </form>
+
+ <div class="progress progress-info progress-striped" style="clear: both;">
+ <div class="bar" style="width:{% widthratio wizard.steps.step1 wizard.steps.count 100%}%">
+ Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}
+ </div>
+ </div>
+ </div><!-- swMain -->
+
+{% endblock %}
from django.conf.urls import patterns, url
+#from django.forms.formsets import formset_factory
+from portal.forms import RegisterUserForm, RegisterUserStep2Form
+from portal.views import RegisterUserWizardView
from portal import views
+named_register_forms = (
+ ("step1", RegisterUserForm),
+ ("step2", RegisterUserStep2Form)
+)
+
+register_wizard = RegisterUserWizardView.as_view(named_register_forms,
+ url_name="register_wizard_step")
+
urlpatterns = patterns('',
- url(r'^$', views.index, name='index')
+ url(r'^$', views.index, name='index'),
+ url(r'^register/?$', views.register_user, name='register'),
+ url(r"^registerwizard/(?P<step>[-\w]+)/$", register_wizard,
+ name="register_wizard_step"),
+ url(r"^registerwizard/$", register_wizard, name="register_wizard")
)
+#-*- coding: utf-8 -*-
+
from portal.portalpage import PortalPage
from plugins.wizard import Wizard
from plugins.form import CreateForm
from django.template.loader import render_to_string
from django.template import RequestContext
+from django.views import generic
+from django.shortcuts import render
+
+from portal.forms import RegisterUserForm
+
+from django.contrib.formtools.wizard.views import NamedUrlSessionWizardView
+#from django.core.files.storage import FileSystemStorage
+from django.core.files.storage import default_storage
+
+#class MerlinWizard(NamedUrlSessionWizardView):
+#
+# ...
+# ...
+#
+# @classonlymethod
+# def as_view(cls, *args, **kwargs):
+# kwargs.update({
+# 'form_list': [
+# NameForm,
+# QuestForm,
+# ColorForm,
+# ],
+# 'url_name': 'merlin_wizard'
+# })
+# return super(MerlinWizard, cls).as_view(*args, **kwargs)
+
+class RegisterUserWizardView(NamedUrlSessionWizardView):
+#class RegisterUserWizardView(LoginRequiredMixin, NamedUrlSessionWizardView):
+ # Notice that I specify a file storage instance. If you don't specify this,
+ # and you need to support FileField or ImageField in your forms, you'll get
+ # errors from Django. This is something else I think could be handled by
+ # the views better. Seems to me that it should just use whatever the
+ # default/specified storage is for the rest of your project/application.
+ file_storage = default_storage # FileSystemStorage()
+ template_name = "register_user_wizard.html"
+
+ def done(self, form_list, **kwargs):
+ step1_form = form_list[0]
+ step2_form = form_list[1]
+
+ productext = self.create_product(product_form)
+ shippings = self.create_shippings(productext, shipping_forms)
+ images = self.create_images(productext, image_forms)
+
+ if all([productext, shippings, images]):
+ del self.request.session["wizard_product_wizard_view"]
+
+ messages.success(self.request,
+ _("Your product has been created."))
+ return HttpResponseRedirect(self.get_success_url(productext))
+
+ messages.error(self.request, _("Something went wrong creating your "
+ "product. Please try again or contact support."))
+ return HttpResponseRedirect(reverse("register_wizard"))
+
+ #def get_form_kwargs(self, step):
+ # if step == "product":
+ # return {"user": self.request.user}
+ # return {}
+
+# The portal should hook the slice and user creation pages
+
+def register_user(request):
+
+ if request.method == 'POST':
+ form = RegisterUserForm(request.POST) # Nous reprenons les données
+ if form.is_valid():
+ first_name = form.cleaned_data['first_name']
+ last_name = form.cleaned_data['last_name']
+ email = form.cleaned_data['email']
+ password = form.cleaned_data['password']
+ password2 = form.cleaned_data['password2']
+ keypair = form.cleaned_data['keypair']
+ ## Ici nous pouvons traiter les données du formulaire
+ #sujet = form.cleaned_data['sujet']
+ #message = form.cleaned_data['message']
+ #envoyeur = form.cleaned_data['envoyeur']
+ #renvoi = form.cleaned_data['renvoi']
+ ## Nous pourrions ici envoyer l'e-mail grâce aux données que nous venons de récupérer
+ #envoi = True
+ else:
+ form = RegisterUserForm()
+ return render(request, 'register_user.html', locals())
def index(request):
<script type="text/javascript"> {# raw js code - use {% insert prelude_js %} ... {% endinsert %} #} {% container prelude_js %}</script>
<style type="text/css">{# In case we need to add raw css code #}{% container prelude_css %}</style>
{{ header_prelude }}
+{% block head %} {% endblock head %}
</head>{# let's add these ones no matter what #}
{# not yet needed {% insert_str prelude "css/layout-unfold1.css" %} #}
{% insert_str prelude "js/jquery.min.js" %}