fb920c7a0bd6417fc47bd6eda26f8cd04823494f
[myslice.git] / portal / forms.py
1 # -*- coding: utf-8 -*-
2 #
3 # portal/forms.py: forms for the portal application
4 # This file is part of the Manifold project.
5 #
6 # Authors:
7 #   Jordan AugĂ© <jordan.auge@lip6.fr>
8 #   Mohammed-Yasin Rahman <mohammed-yasin.rahman@lip6.fr>
9 # Copyright 2013, UPMC Sorbonne UniversitĂ©s / LIP6
10 #
11 # This program is free software; you can redistribute it and/or modify it under
12 # the terms of the GNU General Public License as published by the Free Software
13 # Foundation; either version 3, or (at your option) any later version.
14
15 # This program is distributed in the hope that it will be useful, but WITHOUT
16 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 # FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
18 # details.
19
20 # You should have received a copy of the GNU General Public License along with
21 # this program; see the file COPYING.  If not, write to the Free Software
22 # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
24 from django import forms
25 from portal.models import PendingUser, PendingSlice
26 #from crispy_forms.helper import FormHelper
27 #from crispy_forms.layout import Submit
28 from django.utils.translation import ugettext_lazy as _
29
30 class UserRegisterForm(forms.Form): # Not ModelForm
31     """
32     Form for registering a new user account.
33     
34     Validates that the requested username is not already in use, and
35     requires the password to be entered twice to catch typos.
36     
37     Subclasses should feel free to add any additional validation they
38     need, but should avoid defining a ``save()`` method -- the actual
39     saving of collected user data is delegated to the active
40     registration backend.
41
42     """
43     required_css_class = 'required'
44     
45     first_name = forms.RegexField(regex=r'^[\w+\s.@+-]+$',
46                                  max_length=30,
47                                  label=_("First name"),
48                                  error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
49     last_name = forms.RegexField(regex=r'^[\w+\s.@+-]+$',
50                                  max_length=30,
51                                  label=_("Last name"),
52                                  error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
53     affiliation = forms.RegexField(regex=r'^[\w+\s.@+-]+$',
54                              max_length=30,
55                              label=_("Affiliation"),
56                              error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
57
58     email = forms.EmailField(label=_("E-mail"))
59     password1 = forms.CharField(widget=forms.PasswordInput,
60                                 label=_("Password"))
61     password2 = forms.CharField(widget=forms.PasswordInput,
62                                 label=_("Password (again)"))
63     keypair    = forms.CharField( widget=forms.FileInput )
64    
65     #my_keypairs = forms.ChoiceField(widget = forms.Select(), 
66     #             choices = ([('1','generate'), ('2','upload')])) 
67     tos = forms.BooleanField(widget=forms.CheckboxInput,
68                              label=_(u'I have read and agree to the Terms of Service'),
69                              error_messages={'required': _("You must agree to the terms to register")})
70
71 #    def clean_username(self):
72 #        """
73 #        Validate that the username is alphanumeric and is not already
74 #        in use.
75 #        
76 #        """
77 #        existing = User.objects.filter(username__iexact=self.cleaned_data['username'])
78 #        if existing.exists():
79 #            raise forms.ValidationError(_("A user with that username already exists."))
80 #        else:
81 #            return self.cleaned_data['username']
82
83     def clean_email(self):
84         """
85         Validate that the supplied email address is unique for the
86         site.
87         
88         """
89         if PendingUser.objects.filter(email__iexact=self.cleaned_data['email']):
90             raise forms.ValidationError(_("This email address is already in use. Please supply a different email address."))
91         return self.cleaned_data['email']
92
93     def clean(self):
94         """
95         Verifiy that the values entered into the two password fields
96         match. Note that an error here will end up in
97         ``non_field_errors()`` because it doesn't apply to a single
98         field.
99         
100         """
101         if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
102             if self.cleaned_data['password1'] != self.cleaned_data['password2']:
103                 raise forms.ValidationError(_("The two password fields didn't match."))
104         return self.cleaned_data
105
106 # DEPRECATED #    class Meta:
107 # DEPRECATED #        model = PendingUser
108
109 class SliceRequestForm(forms.ModelForm):
110     slice_name = forms.CharField( widget=forms.TextInput )
111     class Meta:
112         model = PendingSlice
113
114 # DEPRECATED #class RegisterUserStep2Form(forms.ModelForm):
115 # DEPRECATED #    class Meta:
116 # DEPRECATED #        model = PendingUser
117
118 class ContactForm(forms.Form):
119     first_name = forms.CharField()
120     last_name = forms.CharField()
121     affiliation = forms.CharField()
122     subject = forms.CharField(max_length=100)
123     message = forms.CharField(widget=forms.Textarea)
124     email = forms.EmailField()
125     cc_myself = forms.BooleanField(required=False)
126
127 class SliceRequestForm(forms.Form):
128     slice_name = forms.CharField()
129     number_of_nodes  = forms.DecimalField()
130     type_of_nodes = forms.CharField()
131     purpose = forms.CharField(widget=forms.Textarea)
132     email = forms.EmailField()
133     cc_myself = forms.BooleanField(required=False)
134
135