From: Jordan Augé Date: Wed, 3 Jul 2013 08:37:53 +0000 (+0200) Subject: portal: urls and views + removed crispy forms X-Git-Tag: myslice-0.2-1~114 X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=commitdiff_plain;h=6e04e60351c5273a38fc7f38d9d2771deb6ee526 portal: urls and views + removed crispy forms --- diff --git a/myslice/settings.py b/myslice/settings.py index 59276f52..4a19345c 100644 --- a/myslice/settings.py +++ b/myslice/settings.py @@ -155,7 +155,7 @@ INSTALLED_APPS = ( # 'django.contrib.admindocs', 'portal', 'django.contrib.formtools', - 'crispy_forms', +# 'crispy_forms', ) # A sample logging configuration. The only tangible logging diff --git a/portal/urls.py b/portal/urls.py index 3be6caf0..083a1e82 100644 --- a/portal/urls.py +++ b/portal/urls.py @@ -1,22 +1,52 @@ +# -*- coding: utf-8 -*- +# +# portal/urls.py: URL mappings for the portal application +# This file is part of the Manifold project. +# +# Authors: +# Jordan Augé +# Copyright 2013, UPMC Sorbonne Universités / LIP6 +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; see the file COPYING. If not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + 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 +# DEPRECATED #from django.forms.formsets import formset_factory +# DEPRECATED #from portal.forms import RegisterUserForm, RegisterUserStep2Form +# DEPRECATED #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") +# DEPRECATED #named_register_forms = ( +# DEPRECATED # ("step1", RegisterUserForm), +# DEPRECATED # ("step2", RegisterUserStep2Form) +# DEPRECATED #) +# DEPRECATED # +# DEPRECATED #register_wizard = RegisterUserWizardView.as_view(named_register_forms, +# DEPRECATED # url_name="register_wizard_step") urlpatterns = patterns('', - 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") + # User registration + url(r'^user/register/?$', views.user_register, name='user_register'), + # Slice request + url(r'^user/validate/?$', views.user_validate, name='user_validate'), + # User confirmation + url(r'^slice/request/?$', views.slice_request, name='slice_request'), + # Slice confirmation + url(r'^slice/validate/?$', views.slice_validate, name='slice_validate'), ) + +# DEPRECATED # url(r'^$', views.index, name='index'), +# DEPRECATED # url(r"^registerwizard/(?P[-\w]+)/$", register_wizard, +# DEPRECATED # name="register_wizard_step"), +# DEPRECATED # url(r"^registerwizard/$", register_wizard, name="register_wizard") diff --git a/portal/views.py b/portal/views.py index cf2af53c..74f8eec6 100644 --- a/portal/views.py +++ b/portal/views.py @@ -1,78 +1,29 @@ -#-*- coding: utf-8 -*- - -from portal.portalpage import PortalPage -from plugins.wizard import Wizard -from plugins.form import CreateForm -from plugins.raw.raw import Raw # XXX - -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): +# -*- coding: utf-8 -*- # -# ... -# ... +# portal/urls.py: URL mappings for the portal application +# This file is part of the Manifold project. # -# @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 {} +# Authors: +# Jordan Augé +# Copyright 2013, UPMC Sorbonne Universités / LIP6 +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; see the file COPYING. If not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# The portal should hook the slice and user creation pages +from django.shortcuts import render +from portal.forms import RegisterUserForm -def register_user(request): - +def user_register(request): if request.method == 'POST': form = RegisterUserForm(request.POST) # Nous reprenons les données if form.is_valid(): @@ -92,117 +43,217 @@ def register_user(request): else: form = RegisterUserForm() return render(request, 'register_user.html', locals()) + pass -def index(request): - - WIZARD_TITLE = 'User registration' - STEP1_TITLE = 'Enter your details' - STEP2_TITLE = 'Select your institution' - STEP3_TITLE = 'Authentication' - STEP4_TITLE = 'Request a slice (optional)' - STEP5_TITLE = 'Waiting for validation' - STEP6_TITLE = 'Account validated' - - STEP0 = render_to_string('account_validated.html', context_instance=RequestContext(request)) - STEP2_HTML = """ - coucou - """ - STEP4 = """ - mede - """ - STEP5 = render_to_string('account_validated.html', context_instance=RequestContext(request)) - - p = PortalPage(request) - - # This is redundant with the Wizard title - p << "

User registration

" - - sons = [] - start_step = 1 - - # STEP 1 - # If the user already exists (is logged), let's display a summary of his account details - # Otherwise propose a form to fill in - if the_user(request): - # Fill a disabled form with user info - # Please logout to register another user - sons.append(Raw(page=p, title=STEP1_TITLE, togglable=False, html=STEP0)) - start_step += 1 - else: - # We could pass a list of fields also, instead of retrieving them from metadata - # Otherwise we need some heuristics to display nice forms - # XXX Could we log the user in after the form is validated ? - # XXX Explain the password is for XXX - field_list = [{ - 'name' : 'First name', - 'field' : 'firstname', - 'type' : 'text', - 'validate_rx' : '^[a-zA-Z -]+$', - 'validate_err': 'Your first name must be comprised of letters only', - 'description' : 'Enter your first name', - }, { - 'name' : 'Last name', - 'field' : 'lastname', - 'type' : 'text', - 'validate_rx' : '^[a-zA-Z -]+$', - 'validate_err': 'Your last name must be comprised of letters only', - 'description' : 'Enter your last name', - }, { - 'name' : 'Email', - 'field' : 'email', - 'type' : 'text', - 'description' : 'Enter your email address', - }, { - 'name' : 'Password', - 'field' : 'password', - 'type' : 'password', - 'description' : 'Enter your password', - }, { - 'name' : 'Confirm password', - 'field' : 'password2', - 'type' : 'password', - 'description' : 'Enter your password again', - }] - sons.append(CreateForm(page = p, title = STEP1_TITLE, togglable = False, object = 'local:user', fields = field_list)) - - # STEP 2 - # If the user already exists (is logged), let's display a summary of its institution - # Otherwise propose a form to fill in (we should base our selection on the email) - if the_user(request): - # Fill a disabled form with institution - # Please logout to register another user - sons.append(Raw(page=p, title=STEP2_TITLE, togglable=False, html="User created")) - start_step += 1 - else: - sons.append(CreateForm(page = p, title = STEP2_TITLE, togglable = False, object = 'slice')) #institution')) - - # STEP3 - # Please should your prefered authentication method - # This step should allow the user to either choose the user or managed mode in MySlice - sons.append(Raw(page = p, title = STEP3_TITLE, togglable = False, html = STEP2_HTML)) - - # Step 4: Request a slice (optional) - sons.append(CreateForm(page = p, title = STEP4_TITLE, togglable = False, object = 'slice')) - - # Step 5: Your request is waiting for validation - # Periodic refresh - sons.append(Raw(page = p, title = STEP5_TITLE, togglable = False, html = STEP4)) - - # Step 6: Account validation = welcome for newly validated users - # . delegation - # . platforms - # . slice - # . pointers - sons.append(Raw(page = p, title = STEP6_TITLE, togglable = False, html = STEP5)) +def user_validate(request): + pass - wizard = Wizard( - page = p, - title = WIZARD_TITLE, - togglable = False, - sons = sons, - start_step = start_step, - ) +def slice_request(request): + pass - p << wizard.render(request) # in portal page if possible +def slice_validate(request): + pass - return p.render() +# DEPRECATED #from portal.portalpage import PortalPage +# DEPRECATED #from plugins.wizard import Wizard +# DEPRECATED #from plugins.form import CreateForm +# DEPRECATED #from plugins.raw.raw import Raw # XXX +# DEPRECATED # +# DEPRECATED #from myslice.viewutils import the_user +# DEPRECATED # +# DEPRECATED #from django.template.loader import render_to_string +# DEPRECATED #from django.template import RequestContext +# DEPRECATED #from django.views import generic +# DEPRECATED # +# DEPRECATED #from django.contrib.formtools.wizard.views import NamedUrlSessionWizardView +# DEPRECATED ##from django.core.files.storage import FileSystemStorage +# DEPRECATED #from django.core.files.storage import default_storage +# DEPRECATED # +# DEPRECATED ##class MerlinWizard(NamedUrlSessionWizardView): +# DEPRECATED ## +# DEPRECATED ## ... +# DEPRECATED ## ... +# DEPRECATED ## +# DEPRECATED ## @classonlymethod +# DEPRECATED ## def as_view(cls, *args, **kwargs): +# DEPRECATED ## kwargs.update({ +# DEPRECATED ## 'form_list': [ +# DEPRECATED ## NameForm, +# DEPRECATED ## QuestForm, +# DEPRECATED ## ColorForm, +# DEPRECATED ## ], +# DEPRECATED ## 'url_name': 'merlin_wizard' +# DEPRECATED ## }) +# DEPRECATED ## return super(MerlinWizard, cls).as_view(*args, **kwargs) +# DEPRECATED # +# DEPRECATED #class RegisterUserWizardView(NamedUrlSessionWizardView): +# DEPRECATED ##class RegisterUserWizardView(LoginRequiredMixin, NamedUrlSessionWizardView): +# DEPRECATED # # Notice that I specify a file storage instance. If you don't specify this, +# DEPRECATED # # and you need to support FileField or ImageField in your forms, you'll get +# DEPRECATED # # errors from Django. This is something else I think could be handled by +# DEPRECATED # # the views better. Seems to me that it should just use whatever the +# DEPRECATED # # default/specified storage is for the rest of your project/application. +# DEPRECATED # file_storage = default_storage # FileSystemStorage() +# DEPRECATED # template_name = "register_user_wizard.html" +# DEPRECATED # +# DEPRECATED # def done(self, form_list, **kwargs): +# DEPRECATED # step1_form = form_list[0] +# DEPRECATED # step2_form = form_list[1] +# DEPRECATED # +# DEPRECATED # productext = self.create_product(product_form) +# DEPRECATED # shippings = self.create_shippings(productext, shipping_forms) +# DEPRECATED # images = self.create_images(productext, image_forms) +# DEPRECATED # +# DEPRECATED # if all([productext, shippings, images]): +# DEPRECATED # del self.request.session["wizard_product_wizard_view"] +# DEPRECATED # +# DEPRECATED # messages.success(self.request, +# DEPRECATED # _("Your product has been created.")) +# DEPRECATED # return HttpResponseRedirect(self.get_success_url(productext)) +# DEPRECATED # +# DEPRECATED # messages.error(self.request, _("Something went wrong creating your " +# DEPRECATED # "product. Please try again or contact support.")) +# DEPRECATED # return HttpResponseRedirect(reverse("register_wizard")) +# DEPRECATED # +# DEPRECATED # #def get_form_kwargs(self, step): +# DEPRECATED # # if step == "product": +# DEPRECATED # # return {"user": self.request.user} +# DEPRECATED # # return {} +# DEPRECATED # +# DEPRECATED ## The portal should hook the slice and user creation pages +# DEPRECATED # +# DEPRECATED #def register_user(request): +# DEPRECATED # +# DEPRECATED # if request.method == 'POST': +# DEPRECATED # form = RegisterUserForm(request.POST) # Nous reprenons les données +# DEPRECATED # if form.is_valid(): +# DEPRECATED # first_name = form.cleaned_data['first_name'] +# DEPRECATED # last_name = form.cleaned_data['last_name'] +# DEPRECATED # email = form.cleaned_data['email'] +# DEPRECATED # password = form.cleaned_data['password'] +# DEPRECATED # password2 = form.cleaned_data['password2'] +# DEPRECATED # keypair = form.cleaned_data['keypair'] +# DEPRECATED # ## Ici nous pouvons traiter les données du formulaire +# DEPRECATED # #sujet = form.cleaned_data['sujet'] +# DEPRECATED # #message = form.cleaned_data['message'] +# DEPRECATED # #envoyeur = form.cleaned_data['envoyeur'] +# DEPRECATED # #renvoi = form.cleaned_data['renvoi'] +# DEPRECATED # ## Nous pourrions ici envoyer l'e-mail grâce aux données que nous venons de récupérer +# DEPRECATED # #envoi = True +# DEPRECATED # else: +# DEPRECATED # form = RegisterUserForm() +# DEPRECATED # return render(request, 'register_user.html', locals()) +# DEPRECATED # +# DEPRECATED #def index(request): +# DEPRECATED # +# DEPRECATED # WIZARD_TITLE = 'User registration' +# DEPRECATED # STEP1_TITLE = 'Enter your details' +# DEPRECATED # STEP2_TITLE = 'Select your institution' +# DEPRECATED # STEP3_TITLE = 'Authentication' +# DEPRECATED # STEP4_TITLE = 'Request a slice (optional)' +# DEPRECATED # STEP5_TITLE = 'Waiting for validation' +# DEPRECATED # STEP6_TITLE = 'Account validated' +# DEPRECATED # +# DEPRECATED # STEP0 = render_to_string('account_validated.html', context_instance=RequestContext(request)) +# DEPRECATED # STEP2_HTML = """ +# DEPRECATED # coucou +# DEPRECATED # """ +# DEPRECATED # STEP4 = """ +# DEPRECATED # mede +# DEPRECATED # """ +# DEPRECATED # STEP5 = render_to_string('account_validated.html', context_instance=RequestContext(request)) +# DEPRECATED # +# DEPRECATED # p = PortalPage(request) +# DEPRECATED # +# DEPRECATED # # This is redundant with the Wizard title +# DEPRECATED # p << "

User registration

" +# DEPRECATED # +# DEPRECATED # sons = [] +# DEPRECATED # start_step = 1 +# DEPRECATED # +# DEPRECATED # # STEP 1 +# DEPRECATED # # If the user already exists (is logged), let's display a summary of his account details +# DEPRECATED # # Otherwise propose a form to fill in +# DEPRECATED # if the_user(request): +# DEPRECATED # # Fill a disabled form with user info +# DEPRECATED # # Please logout to register another user +# DEPRECATED # sons.append(Raw(page=p, title=STEP1_TITLE, togglable=False, html=STEP0)) +# DEPRECATED # start_step += 1 +# DEPRECATED # else: +# DEPRECATED # # We could pass a list of fields also, instead of retrieving them from metadata +# DEPRECATED # # Otherwise we need some heuristics to display nice forms +# DEPRECATED # # XXX Could we log the user in after the form is validated ? +# DEPRECATED # # XXX Explain the password is for XXX +# DEPRECATED # field_list = [{ +# DEPRECATED # 'name' : 'First name', +# DEPRECATED # 'field' : 'firstname', +# DEPRECATED # 'type' : 'text', +# DEPRECATED # 'validate_rx' : '^[a-zA-Z -]+$', +# DEPRECATED # 'validate_err': 'Your first name must be comprised of letters only', +# DEPRECATED # 'description' : 'Enter your first name', +# DEPRECATED # }, { +# DEPRECATED # 'name' : 'Last name', +# DEPRECATED # 'field' : 'lastname', +# DEPRECATED # 'type' : 'text', +# DEPRECATED # 'validate_rx' : '^[a-zA-Z -]+$', +# DEPRECATED # 'validate_err': 'Your last name must be comprised of letters only', +# DEPRECATED # 'description' : 'Enter your last name', +# DEPRECATED # }, { +# DEPRECATED # 'name' : 'Email', +# DEPRECATED # 'field' : 'email', +# DEPRECATED # 'type' : 'text', +# DEPRECATED # 'description' : 'Enter your email address', +# DEPRECATED # }, { +# DEPRECATED # 'name' : 'Password', +# DEPRECATED # 'field' : 'password', +# DEPRECATED # 'type' : 'password', +# DEPRECATED # 'description' : 'Enter your password', +# DEPRECATED # }, { +# DEPRECATED # 'name' : 'Confirm password', +# DEPRECATED # 'field' : 'password2', +# DEPRECATED # 'type' : 'password', +# DEPRECATED # 'description' : 'Enter your password again', +# DEPRECATED # }] +# DEPRECATED # sons.append(CreateForm(page = p, title = STEP1_TITLE, togglable = False, object = 'local:user', fields = field_list)) +# DEPRECATED # +# DEPRECATED # # STEP 2 +# DEPRECATED # # If the user already exists (is logged), let's display a summary of its institution +# DEPRECATED # # Otherwise propose a form to fill in (we should base our selection on the email) +# DEPRECATED # if the_user(request): +# DEPRECATED # # Fill a disabled form with institution +# DEPRECATED # # Please logout to register another user +# DEPRECATED # sons.append(Raw(page=p, title=STEP2_TITLE, togglable=False, html="User created")) +# DEPRECATED # start_step += 1 +# DEPRECATED # else: +# DEPRECATED # sons.append(CreateForm(page = p, title = STEP2_TITLE, togglable = False, object = 'slice')) #institution')) +# DEPRECATED # +# DEPRECATED # # STEP3 +# DEPRECATED # # Please should your prefered authentication method +# DEPRECATED # # This step should allow the user to either choose the user or managed mode in MySlice +# DEPRECATED # sons.append(Raw(page = p, title = STEP3_TITLE, togglable = False, html = STEP2_HTML)) +# DEPRECATED # +# DEPRECATED # # Step 4: Request a slice (optional) +# DEPRECATED # sons.append(CreateForm(page = p, title = STEP4_TITLE, togglable = False, object = 'slice')) +# DEPRECATED # +# DEPRECATED # # Step 5: Your request is waiting for validation +# DEPRECATED # # Periodic refresh +# DEPRECATED # sons.append(Raw(page = p, title = STEP5_TITLE, togglable = False, html = STEP4)) +# DEPRECATED # +# DEPRECATED # # Step 6: Account validation = welcome for newly validated users +# DEPRECATED # # . delegation +# DEPRECATED # # . platforms +# DEPRECATED # # . slice +# DEPRECATED # # . pointers +# DEPRECATED # sons.append(Raw(page = p, title = STEP6_TITLE, togglable = False, html = STEP5)) +# DEPRECATED # +# DEPRECATED # wizard = Wizard( +# DEPRECATED # page = p, +# DEPRECATED # title = WIZARD_TITLE, +# DEPRECATED # togglable = False, +# DEPRECATED # sons = sons, +# DEPRECATED # start_step = start_step, +# DEPRECATED # ) +# DEPRECATED # +# DEPRECATED # p << wizard.render(request) # in portal page if possible +# DEPRECATED # +# DEPRECATED # return p.render()