summaryrefslogtreecommitdiff
path: root/website/forms.py
diff options
context:
space:
mode:
authorprashantsinalkar2019-08-27 12:29:12 +0530
committerprashantsinalkar2019-08-27 12:29:12 +0530
commitb9c709823e26f5b20d3732e1788b871cdd961a03 (patch)
treea9089f56541854b48ddbda733832a153c6d53927 /website/forms.py
parent50e8fc0832d81d124abd7606b15502545bf84b23 (diff)
downloadSciPy2019-b9c709823e26f5b20d3732e1788b871cdd961a03.tar.gz
SciPy2019-b9c709823e26f5b20d3732e1788b871cdd961a03.tar.bz2
SciPy2019-b9c709823e26f5b20d3732e1788b871cdd961a03.zip
added intial code for project
Diffstat (limited to 'website/forms.py')
-rwxr-xr-xwebsite/forms.py395
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