From b1fec7eab10ccbe34963e067343bf13d15872f75 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jordan=20Aug=C3=A9?= Date: Tue, 2 Jul 2013 17:24:21 +0200 Subject: [PATCH] updated portal application --- myslice/settings.py | 2 + portal/forms.py | 31 ++++++++ portal/models.py | 15 ++++ portal/templates/register_user.html | 68 +++++++++++++++++ portal/templates/register_user_wizard.html | 68 +++++++++++++++++ portal/urls.py | 17 ++++- portal/views.py | 85 ++++++++++++++++++++++ views/templates/layout-unfold1.html | 1 + 8 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 portal/forms.py create mode 100644 portal/templates/register_user.html create mode 100644 portal/templates/register_user_wizard.html diff --git a/myslice/settings.py b/myslice/settings.py index e7d1bb26..59276f52 100644 --- a/myslice/settings.py +++ b/myslice/settings.py @@ -154,6 +154,8 @@ INSTALLED_APPS = ( # 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 diff --git a/portal/forms.py b/portal/forms.py new file mode 100644 index 00000000..2b304cc5 --- /dev/null +++ b/portal/forms.py @@ -0,0 +1,31 @@ +#-*- 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 diff --git a/portal/models.py b/portal/models.py index 71a83623..316ed544 100644 --- a/portal/models.py +++ b/portal/models.py @@ -1,3 +1,18 @@ 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() diff --git a/portal/templates/register_user.html b/portal/templates/register_user.html new file mode 100644 index 00000000..8d1d5280 --- /dev/null +++ b/portal/templates/register_user.html @@ -0,0 +1,68 @@ +{% extends "layout-unfold1.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + + +{% block head %} +{{ wizard.form.media }} + +{% endblock %} + +{% block unfold1_main %} + +

User registration

+ +
+ + +
+ +
{% csrf_token %} + + {% 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 %} +
+ + {% if wizard.steps.prev %} + + + {% endif %} + +
+ + +
+
+ {% if wizard.steps.prev %} + + {% endif %} + +
+
+
+
+ +
+
+ Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }} +
+
+
+ +{% endblock %} diff --git a/portal/templates/register_user_wizard.html b/portal/templates/register_user_wizard.html new file mode 100644 index 00000000..8d1d5280 --- /dev/null +++ b/portal/templates/register_user_wizard.html @@ -0,0 +1,68 @@ +{% extends "layout-unfold1.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + + +{% block head %} +{{ wizard.form.media }} + +{% endblock %} + +{% block unfold1_main %} + +

User registration

+ +
+ + +
+ +
{% csrf_token %} + + {% 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 %} +
+ + {% if wizard.steps.prev %} + + + {% endif %} + +
+ + +
+
+ {% if wizard.steps.prev %} + + {% endif %} + +
+
+
+
+ +
+
+ Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }} +
+
+
+ +{% endblock %} diff --git a/portal/urls.py b/portal/urls.py index fcd4007d..3be6caf0 100644 --- a/portal/urls.py +++ b/portal/urls.py @@ -1,7 +1,22 @@ 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[-\w]+)/$", register_wizard, + name="register_wizard_step"), + url(r"^registerwizard/$", register_wizard, name="register_wizard") ) diff --git a/portal/views.py b/portal/views.py index 869bd2dc..cf2af53c 100644 --- a/portal/views.py +++ b/portal/views.py @@ -1,3 +1,5 @@ +#-*- coding: utf-8 -*- + from portal.portalpage import PortalPage from plugins.wizard import Wizard from plugins.form import CreateForm @@ -7,6 +9,89 @@ from myslice.viewutils import the_user 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): diff --git a/views/templates/layout-unfold1.html b/views/templates/layout-unfold1.html index 24406516..9633a298 100644 --- a/views/templates/layout-unfold1.html +++ b/views/templates/layout-unfold1.html @@ -6,6 +6,7 @@ {{ header_prelude }} +{% block head %} {% endblock 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" %} -- 2.43.0