diff options
Diffstat (limited to 'fossee_manim/forms.py')
-rw-r--r-- | fossee_manim/forms.py | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/fossee_manim/forms.py b/fossee_manim/forms.py new file mode 100644 index 0000000..177e01f --- /dev/null +++ b/fossee_manim/forms.py @@ -0,0 +1,227 @@ +from django import forms +from django.utils import timezone +from .models import ( + Profile, User + ) +from string import punctuation, digits +try: + from string import letters +except ImportError: + from string import ascii_letters as letters + +from django.contrib.auth.models import User +from django.contrib.auth import authenticate +from .send_mails import generate_activation_key + + +UNAME_CHARS = letters + "._" + digits +PWD_CHARS = letters + punctuation + digits + + +position_choices = ( + ("contributor", "Contributor"), + ("reviewer", "Reviewer") + ) + +department_choices = ( + ("computer engineering", "Computer Science"), + ("information technology", "Information Technology"), + ("civil engineering", "Civil Engineering"), + ("electrical engineering", "Electrical Engineering"), + ("mechanical engineering", "Mechanical Engineering"), + ("chemical engineering", "Chemical Engineering"), + ("aerospace engineering", "Aerospace Engineering"), + ("biosciences and bioengineering", "Biosciences and BioEngineering"), + ("electronics", "Electronics"), + ("energy science and engineering", "Energy Science and Engineering"), + ("others", "Others") + ) + +title = ( + ("Professor", "Prof."), + ("Doctor", "Dr."), + ("Shriman", "Shri"), + ("Shrimati", "Smt"), + ("Kumari", "Ku"), + ("Mr", "Mr."), + ("Mrs", "Mrs."), + ("Miss", "Ms."), + ) + +source = ( + ("FOSSEE Email", "FOSSEE Email"), + ("FOSSEE website", "FOSSEE website"), + ("Google", "Google"), + ("Social Media", "Social Media"), + ("From other College", "From other College"), + ("others", "Others") + ) + +states = ( + ("IN-AP", "Andhra Pradesh"), + ("IN-AR", "Arunachal Pradesh"), + ("IN-AS", "Assam"), + ("IN-BR", "Bihar"), + ("IN-CT", "Chhattisgarh"), + ("IN-GA", "Goa"), + ("IN-GJ", "Gujarat"), + ("IN-HR", "Haryana"), + ("IN-HP", "Himachal Pradesh"), + ("IN-JK", "Jammu and Kashmir"), + ("IN-JH", "Jharkhand"), + ("IN-KA", "Karnataka"), + ("IN-KL", "Kerala"), + ("IN-MP", "Madhya Pradesh"), + ("IN-MH", "Maharashtra"), + ("IN-MN", "Manipur"), + ("IN-ML", "Meghalaya"), + ("IN-MZ", "Mizoram"), + ("IN-NL", "Nagaland"), + ("IN-OR", "Odisha"), + ("IN-PB", "Punjab"), + ("IN-RJ", "Rajasthan"), + ("IN-SK", "Sikkim"), + ("IN-TN", "Tamil Nadu"), + ("IN-TG", "Telangana"), + ("IN-TR", "Tripura"), + ("IN-UT", "Uttarakhand"), + ("IN-UP", "Uttar Pradesh"), + ("IN-WB", "West Bengal"), + ("IN-AN", "Andaman and Nicobar Islands"), + ("IN-CH", "Chandigarh"), + ("IN-DN", "Dadra and Nagar Haveli"), + ("IN-DD", "Daman and Diu"), + ("IN-DL", "Delhi"), + ("IN-LD", "Lakshadweep"), + ("IN-PY", "Puducherry") + ) + + +class UserRegistrationForm(forms.Form): + """A Class to create new form for User's Registration. + It has the various fields and functions required to register + a new user to the system""" + required_css_class = 'required' + errorlist_css_class = 'errorlist' + username = forms.CharField(max_length=32, help_text='''Letters, digits, + period and underscore only.''') + email = forms.EmailField() + password = forms.CharField(max_length=32, widget=forms.PasswordInput()) + confirm_password = forms.CharField\ + (max_length=32, widget=forms.PasswordInput()) + title = forms.ChoiceField(choices=title) + first_name = forms.CharField(max_length=32) + last_name = forms.CharField(max_length=32) + phone_number = forms.RegexField(regex=r'^.{10}$', + error_messages={'invalid':"Phone number must be entered \ + in the format: '9999999999'.\ + Up to 10 digits allowed."}) + institute = forms.CharField(max_length=128, + help_text='Please write full name of your Institute/Organization') + department = forms.ChoiceField(help_text='Department you work/study', + choices=department_choices) + location = forms.CharField(max_length=255, help_text="Place/City") + state = forms.ChoiceField(choices=states) + how_did_you_hear_about_us = forms.ChoiceField(choices=source) + + def clean_username(self): + u_name = self.cleaned_data["username"] + if u_name.strip(UNAME_CHARS): + msg = "Only letters, digits, period are"\ + " allowed in username" + raise forms.ValidationError(msg) + try: + User.objects.get(username__exact=u_name) + raise forms.ValidationError("Username already exists.") + except User.DoesNotExist: + return u_name + + def clean_password(self): + pwd = self.cleaned_data['password'] + if pwd.strip(PWD_CHARS): + raise forms.ValidationError("Only letters, digits and punctuation\ + are allowed in password") + return pwd + + def clean_confirm_password(self): + c_pwd = self.cleaned_data['confirm_password'] + pwd = self.data['password'] + if c_pwd != pwd: + raise forms.ValidationError("Passwords do not match") + + return c_pwd + + def clean_email(self): + user_email = self.cleaned_data['email'] + if User.objects.filter(email=user_email).exists(): + raise forms.ValidationError("This email already exists") + return user_email + + def save(self): + u_name = self.cleaned_data["username"] + u_name = u_name.lower() + pwd = self.cleaned_data["password"] + email = self.cleaned_data["email"] + new_user = User.objects.create_user(u_name, email, pwd) + new_user.first_name = self.cleaned_data["first_name"] + new_user.last_name = self.cleaned_data["last_name"] + new_user.save() + + cleaned_data = self.cleaned_data + new_profile = Profile(user=new_user) + new_profile.institute = cleaned_data["institute"] + new_profile.department = cleaned_data["department"] + #new_profile.position = cleaned_data["position"] + new_profile.phone_number = cleaned_data["phone_number"] + new_profile.location = cleaned_data["location"] + new_profile.title = cleaned_data["title"] + new_profile.state = cleaned_data["state"] + new_profile.how_did_you_hear_about_us = cleaned_data["how_did_you_hear_about_us" ] + new_profile.activation_key = generate_activation_key(new_user.username) + new_profile.key_expiry_time = timezone.now() + \ + timezone.timedelta(days=1) + new_profile.save() + key = Profile.objects.get(user=new_user).activation_key + return u_name, pwd, key + + +class UserLoginForm(forms.Form): + """Creates a form which will allow the user to log into the system.""" + + username = forms.CharField(max_length=32, + widget=forms.TextInput()) + + password = forms.CharField(max_length=32, + widget=forms.PasswordInput()) + + def clean(self): + super(UserLoginForm, self).clean() + try: + u_name, pwd = self.cleaned_data["username"],\ + self.cleaned_data["password"] + user = authenticate(username=u_name, password=pwd) + except Exception: + raise forms.ValidationError\ + ("Username and/or Password is not entered") + if not user: + raise forms.ValidationError("Invalid username/password") + return user + + +class ProfileForm(forms.ModelForm): + """ profile form for contributors and reviewers """ + + class Meta: + model = Profile + fields = ['first_name', 'last_name', 'institute', 'department', + ] + + first_name = forms.CharField(max_length=32) + last_name = forms.CharField(max_length=32) + + def __init__(self, *args, **kwargs): + if 'user' in kwargs: + user = kwargs.pop('user') + super(ProfileForm, self).__init__(*args, **kwargs) + self.fields['first_name'].initial = user.first_name + self.fields['last_name'].initial = user.last_name
\ No newline at end of file |