forms.py 2.74 KB
# coding=utf-8
from django import forms
from django.utils.translation import ugettext_lazy as _
from rolepermissions.shortcuts import assign_role
from .models import User

class Validation(forms.ModelForm):
	MIN_PASS_LENGTH = 8
	MAX_UPLOAD_SIZE = 2*1024*1024

	def clean_image(self):
		image = self.cleaned_data.get('image', False)

		if image:
			if image._size > self.MAX_UPLOAD_SIZE:
				raise forms.ValidationError(_("The image is too large. It should have less than 2MB."))

		return image

	def clean_password(self):
		password = self.cleaned_data.get('password')

		if self.is_edit and len(password) == 0:
			return password

        # At least MIN_LENGTH long
		if len(password) < self.MIN_PASS_LENGTH:
			raise forms.ValidationError(_("The password must contain at least % d characters." % self.MIN_PASS_LENGTH))

        # At least one letter and one non-letter
		first_isalpha = password[0].isalpha()
		if all(c.isalpha() == first_isalpha for c in password):
			raise forms.ValidationError(_('The password must contain at least one letter and at least one digit or a punctuation character.'))

		return password

	def clean_password2(self):
		password = self.cleaned_data.get("password")
		password2 = self.cleaned_data.get("password2")

		if self.is_edit and len(password) == 0:
			return password2

		if password and password2 and password != password2:
			raise forms.ValidationError(_('The confirmation password is incorrect.'))
        
		return password2	

class RegisterUserForm(Validation):
    password = forms.CharField(label=_('Password'), widget = forms.PasswordInput)
    password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput)

    is_edit = False

    def save(self, commit=True):
        super(RegisterUserForm, self).save(commit=False)
        
        self.instance.set_password(self.cleaned_data['password'])

        self.instance.save()
        
        return self.instance

    class Meta:
        model = User
        fields = ['email', 'username', 'last_name', 'social_name', 'image', 'show_email', ]

class ProfileForm(Validation):
	password = forms.CharField(label=_('Password'), widget = forms.PasswordInput, required = False)
	password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput, required = False)

	is_edit = True

	def save(self, commit=True):
		super(ProfileForm, self).save(commit=False)
        
		if len(self.cleaned_data['password']) > 0:
			self.instance.set_password(self.cleaned_data['password'])

		self.instance.save()
        
		return self.instance

	class Meta:
		model = User
		fields = ['social_name', 'description', 'show_email', 'image']
		widgets = {
			'description': forms.Textarea,
		}