diff options
author | prashantsinalkar | 2019-08-27 12:29:12 +0530 |
---|---|---|
committer | prashantsinalkar | 2019-08-27 12:29:12 +0530 |
commit | b9c709823e26f5b20d3732e1788b871cdd961a03 (patch) | |
tree | a9089f56541854b48ddbda733832a153c6d53927 /website/forms.py | |
parent | 50e8fc0832d81d124abd7606b15502545bf84b23 (diff) | |
download | SciPy2019-b9c709823e26f5b20d3732e1788b871cdd961a03.tar.gz SciPy2019-b9c709823e26f5b20d3732e1788b871cdd961a03.tar.bz2 SciPy2019-b9c709823e26f5b20d3732e1788b871cdd961a03.zip |
added intial code for project
Diffstat (limited to 'website/forms.py')
-rwxr-xr-x | website/forms.py | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/website/forms.py b/website/forms.py new file mode 100755 index 0000000..3e2aefb --- /dev/null +++ b/website/forms.py @@ -0,0 +1,395 @@ +from django import forms + +from django.forms import ModelForm, widgets + +from django.contrib.auth.forms import UserCreationForm +from django.contrib.auth.models import User +from django.core.validators import MinLengthValidator, MinValueValidator, \ + RegexValidator, URLValidator +from captcha.fields import ReCaptchaField +from string import punctuation, digits +try: + from string import letters +except ImportError: + from string import ascii_letters as letters + +from website.models import Proposal +from website.send_mails import generate_activation_key +from django.contrib.auth.models import User +from django.contrib.auth import authenticate +from django.utils import timezone +from website.models import ( + Profile, User +) + +UNAME_CHARS = letters + "._" + digits +PWD_CHARS = letters + punctuation + digits + +MY_CHOICES = ( + ('Beginner', 'Beginner'), + ('Advanced', 'Advanced'), +) + +ws_duration = ( + ('2', '2'), + ('3', '3'), +) +abs_duration = ( + ('15', '15'), +) + + +MY_CHOICES = ( + ('Beginner', 'Beginner'), + ('Advanced', 'Advanced'), +) +rating = ( + ('1', '1'), + ('2', '2'), + ('3', '3'), + ('4', '4'), + ('5', '5'), + ('6', '6'), + ('7', '7'), + ('8', '8'), + ('9', '9'), + ('10', '10'), +) + +CHOICES = [('1', 'Yes'), + ('0', 'No')] + +position_choices = ( + ("student", "Student"), + ("faculty", "Faculty"), + ("industry_people", "Industry People"), +) + +source = ( + ("FOSSEE website", "FOSSEE website"), + ("Google", "Google"), + ("Social Media", "Social Media"), + ("From other College", "From other College"), +) + +title = ( + ("Mr", "Mr."), + ("Miss", "Ms."), + ("Professor", "Prof."), + ("Doctor", "Dr."), +) +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") +) + + +# modal proposal form for cfp +class ProposalForm(forms.ModelForm): + name_of_author1 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter the name of first author'}), + required=True, + error_messages={ + 'required': 'Name of author1 field required.'}, + ) + name_of_author2 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter the name of second author(if any)'}), + required=False, + ) + about_the_authors = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'About Me'}), + required=True, + error_messages={ + 'required': 'About the author(s) field required.'}, + ) + attachment = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}), + label='Please upload relevant documents (if any)', + required=False,) + phone = forms.CharField(min_length=10, max_length=12, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Phone'}), required=False, validators=[RegexValidator(regex='^[0-9-_+.]*$', message='Enter a Valid Phone Number',)], + # error_messages = {'required':'Title field required.'}, + ) + title = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title'}), + required=True, + error_messages={ + 'required': 'Title field required.'}, + ) + abstract = forms.CharField(min_length=300, widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Abstract', 'onkeyup': 'countChar(this)'}), + required=True, + label='Abstract (Min. 300 char.)', + error_messages={ + 'required': 'Abstract field required.'}, + ) + proposal_type = forms.CharField( + widget=forms.HiddenInput(), label='', initial='ABSTRACT', required=False) + + duration = forms.ChoiceField(widget=forms.Select(attrs={'readonly': True}), choices=abs_duration, required=True) + + tags = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Tags'}), + required=False, + ) + open_to_share = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect(), required=True, + label='I am agree to publish my content',) + terms_and_conditions = forms.BooleanField(widget=forms.CheckboxInput(), + required=True, label='I agree to the terms and conditions') + + class Meta: + model = Proposal + exclude = ('user', 'email', 'prerequisite', 'status', 'rate') + + def clean_attachment(self): + import os + cleaned_data = self.cleaned_data + attachment = cleaned_data.get('attachment', None) + if attachment: + ext = os.path.splitext(attachment.name)[1] + valid_extensions = ['.pdf'] + if not ext in valid_extensions: + raise forms.ValidationError( + u'File not supported! Only .pdf file is accepted') + if attachment.size > (5*1024*1024): + raise forms.ValidationError('File size exceeds 5MB') + return attachment + + +# modal workshop form for cfw +class WorkshopForm(forms.ModelForm): + name_of_author1 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter the name of first author'}), + required=True, + error_messages={ + 'required': 'Name of author1 field required.'}, + ) + name_of_author2 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter the name of second author(if any)'}), + required=False, + ) + about_the_authors = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'About Me'}), + required=True, + error_messages={ + 'required': 'About the author(s) field required.'}, + ) + attachment = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}), + label='Please upload relevant documents (if any)', + required=False,) + phone = forms.CharField(min_length=10, max_length=12, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Phone'}), required=False, validators=[RegexValidator(regex='^[0-9-_+.]*$', message='Enter a Valid Phone Number',)], + ) + title = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title'}), + required=True, + error_messages={ + 'required': 'Title field required.'}, + ) + abstract = forms.CharField(min_length=300, widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Description', 'onkeyup': 'countChar(this)'}), + required=True, + label='Description (Min. 300 char.)',) + + prerequisite = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Prerequisite'}), + label='Prerequisites', + required=False, + ) + proposal_type = forms.CharField( + widget=forms.HiddenInput(), label='', required=False, initial='WORKSHOP') + + duration = forms.ChoiceField(choices=ws_duration, label='Duration (Hrs.)') + + tags = forms.ChoiceField(choices=MY_CHOICES, label='Level') + open_to_share = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect(), required=True, + label='I am agree to publish my content',) + terms_and_conditions = forms.BooleanField(widget=forms.CheckboxInput(), + required=True, label='I agree to the terms and conditions') + + class Meta: + model = Proposal + exclude = ('user', 'email', 'status', 'rate') + + def clean_attachment(self): + import os + cleaned_data = self.cleaned_data + attachment = cleaned_data.get('attachment', None) + if attachment: + ext = os.path.splitext(attachment.name)[1] + valid_extensions = ['.pdf', ] + if not ext in valid_extensions: + raise forms.ValidationError( + u'File not supported! Only .pdf file is accepted') + if attachment.size > (5*1024*1024): + raise forms.ValidationError('File size exceeds 5MB') + return attachment + + +class UserRegisterForm(UserCreationForm): + class Meta: + model = User + fields = ('first_name', 'last_name', 'email', 'username', 'password1', + 'password2') + first_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'First Name'}), + label='First Name' + ) + last_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Last Name'}), + label='Last Name' + ) + email = forms.EmailField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Email'}), + required=True, + error_messages={ + 'required': 'Email field required.'}, + label='Email' + ) + username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Username'}), + required=True, + error_messages={ + 'required': 'Username field required.'}, + label='Username' + ) + password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password'}), + required=True, + error_messages={ + 'required': 'Password field required.'}, + label='Password' + ) + password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Confirm Password'}), + required=True, + error_messages={ + 'required': 'Password Confirm field required.'}, + label='Re-enter Password' + ) + + def clean_first_name(self): + return self.cleaned_data["first_name"].title() + + def clean_email(self): + return self.cleaned_data["email"].lower() + + def clean_last_name(self): + return self.cleaned_data["last_name"].title() + + +class UserLoginForm(forms.Form): + username = forms.CharField( + widget=forms.TextInput( + attrs={'class': 'form-inline', 'placeholder': 'Username'}), + label='User Name' + ) + password = forms.CharField( + widget=forms.PasswordInput( + attrs={'class': 'form-inline', 'placeholder': 'Password'}), + label='Password' + ) + + +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(widget=forms.TextInput(attrs={'placeholder': 'Enter user name'}), max_length=32, help_text='''Letters, digits, + period and underscore only.''',) + email = forms.EmailField(widget=forms.TextInput( + attrs={'placeholder': 'Enter valid email id'})) + 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, label='First name', widget=forms.TextInput( + attrs={'placeholder': 'Enter first name'})) + last_name = forms.CharField(max_length=32, label='Last name', widget=forms.TextInput( + attrs={'placeholder': 'Enter last name'},)) + phone_number = forms.RegexField(regex=r'^.{10}$', + error_messages={'invalid': "Phone number must be entered \ + in the format: '9999999999'.\ + Up to 10 digits allowed."}, label='Phone/Mobile', widget=forms.TextInput(attrs={'placeholder': 'Enter valid contact number'},)) + institute = forms.CharField(max_length=32, + label='Institute/Organization/Company', widget=forms.TextInput()) + # 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, label='How did you hear about us?') + + 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 |