summaryrefslogtreecommitdiff
path: root/arduino_blog/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'arduino_blog/forms.py')
-rw-r--r--arduino_blog/forms.py267
1 files changed, 267 insertions, 0 deletions
diff --git a/arduino_blog/forms.py b/arduino_blog/forms.py
new file mode 100644
index 0000000..ee8b6b1
--- /dev/null
+++ b/arduino_blog/forms.py
@@ -0,0 +1,267 @@
+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 arduino_blog.models import Proposal
+#from arduino_blog.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 arduino_blog.models import (
+ Profile, User, Proposal
+)
+from .send_emails import (send_user_mail,
+ generate_activation_key)
+
+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")
+)
+
+source = (
+ ("FOSSEE website", "FOSSEE website"),
+ ("Google", "Google"),
+ ("Social Media", "Social Media"),
+ ("NMEICT Blended Workshop", "NMEICT Blended Workshop"),
+ ("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")
+)
+
+
+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': 'Username'}), 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': 'First name'}))
+ last_name = forms.CharField(max_length=32, label='Last name', widget=forms.TextInput(
+ attrs={'placeholder': 'Last name'},))
+ phone = forms.CharField(widget=forms.TextInput(attrs={'maxlength': '10', 'type': 'number'}))
+ institute = forms.CharField(max_length=32,
+ label='Institute/Organization/Company', widget=forms.TextInput())
+ position = forms.ChoiceField(choices = position_choices)
+ # department = forms.ChoiceField(help_text='Department you work/study',
+ # choices=department_choices)
+ state = forms.ChoiceField(choices=states)
+ city = forms.CharField(max_length=255, help_text="Enter the city")
+ pincode = forms.CharField(max_length=6, help_text="Enter the pincode")
+ 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.position = cleaned_data["position"]
+ new_profile.pincode = cleaned_data["pincode"]
+ new_profile.phone = cleaned_data["phone"]
+ new_profile.city = cleaned_data["city"]
+ 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(
+ minutes=60)
+ new_profile.save()
+ return u_name, pwd, new_user.email, new_profile.activation_key
+
+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 AbstractProposalForm(forms.ModelForm):
+ # name_of_author = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter the name of first author'}),
+ # required=True,
+ # error_messages={
+ # 'required': 'Name of Author field required.'},
+ # )
+ about_the_author = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'About Me'}),
+ required=True,
+ error_messages={
+ 'required': 'About the author field required.'},
+ )
+ attachment = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}),
+ label='Please upload relevant documents (if any)',
+ required=False,)
+ title_of_the_project = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title of the Project'}),
+ 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.'},
+ )
+ terms_and_conditions = forms.BooleanField(widget=forms.CheckboxInput(),
+ required=True, label='I agree to the terms and conditions')
+
+ class Meta:
+ model = Proposal
+ exclude = ('user','name_of_author', '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