You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
9.1 KiB
147 lines
9.1 KiB
from flask_wtf import FlaskForm
|
|
from flask_wtf.file import FileField, FileAllowed
|
|
from wtforms import StringField, PasswordField, SubmitField, BooleanField, URLField, IntegerField, SelectField
|
|
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
|
|
from flask_login import current_user
|
|
from minibase.blueprints.user.models import Users, User_Roles
|
|
import minibase.blueprints.geography.utils as geoUtils
|
|
|
|
|
|
class registrationForm(FlaskForm): # Defines the form class to be used for the user registretion
|
|
# Decalarion of the fields for the form and it's propereties
|
|
username = StringField('User Name', validators=[DataRequired(), Length(min=4, max=20)])
|
|
name = StringField('Name', validators=[DataRequired(), Length(min=4, max=20)])
|
|
surname = StringField('Surname', validators=[DataRequired(), Length(min=4, max=20)])
|
|
email_account = StringField('Email: Account', validators=[DataRequired(), Email()])
|
|
email_comm = StringField('Email: Communication', validators=[DataRequired(), Email()])
|
|
street = StringField('Street', validators=[DataRequired()])
|
|
street_no = IntegerField('No', validators=[DataRequired()])
|
|
post_code = IntegerField('Post', validators=[DataRequired()])
|
|
city_id = SelectField('City', validators=[DataRequired()], render_kw={"hx-get": "/geography/get_states", "hx-target": "#state_id"})
|
|
state_id = SelectField('State', validators=[])
|
|
country_id = SelectField('Country', validators=[DataRequired()], render_kw={"hx-get": "/geography/get_cities", "hx-target": "#city_id"})
|
|
password = PasswordField('Password', validators=[DataRequired()])
|
|
password_confirm= PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
|
|
submit = SubmitField()
|
|
|
|
def populate_for_adding(self, user):
|
|
self.originalModel = user
|
|
self.submit.label.text = "Add"
|
|
self.country_id.choices = [(row.id, row.name) for row in geoUtils.queryCountryNames()]
|
|
|
|
# This is for the htmx implementation. please be careful how of there is data we first take from the database an then from the from(containing th htmx call)
|
|
if self.country_id.data:
|
|
self.city_id.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryId(self.country_id.data)]
|
|
self.state_id.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryId(self.country_id.data)]
|
|
else:
|
|
self.city_id.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryIdWithDefault(user.city_id, user.country_id)]
|
|
self.state_id.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryIdWithDefault(user.state_id, user.country_id)]
|
|
|
|
# Queries to be made in order to validate the form : If username exists
|
|
def validate_username(self, input):
|
|
if input.data != self.originalModel.username:
|
|
if (Users.query.filter(Users.username.ilike(f'%{input.data}%')).first()):
|
|
raise ValidationError('This User Name is alredy registered')
|
|
|
|
# Queries to be made in order to validate the form : If username exists
|
|
def validate_email_account(self, input):
|
|
if input.data != self.originalModel.email_account:
|
|
if (Users.query.filter(Users.email_account.ilike(f'%{input.data}%')).first()):
|
|
raise ValidationError('This E-mail is alredy registered')
|
|
|
|
|
|
class accountUpdateForm(FlaskForm): # Defines the form class to be used for the user registretion
|
|
# Decalarion of the fields for the form and it's propereties
|
|
username = StringField('User Name', validators=[DataRequired(), Length(min=4, max=20)])
|
|
name = StringField('Name', validators=[DataRequired(), Length(min=4, max=20)])
|
|
surname = StringField('Surname', validators=[DataRequired(), Length(min=4, max=20)])
|
|
email_account = StringField('Email: Account', validators=[DataRequired(), Email()])
|
|
email_comm = StringField('Email: Communication', validators=[DataRequired(), Email()])
|
|
street = StringField('Street', validators=[DataRequired()])
|
|
street_no = IntegerField('No', validators=[DataRequired()])
|
|
post_code = IntegerField('Post', validators=[DataRequired()])
|
|
city_id = SelectField('City', validators=[DataRequired()], render_kw={"hx-get": "/geography/get_states", "hx-target": "#state_id"})
|
|
state_id = SelectField('State', validators=[])
|
|
country_id = SelectField('Country', validators=[DataRequired()], render_kw={"hx-get": "/geography/get_cities", "hx-target": "#city_id"})
|
|
image_file = FileField('Update Avatar', validators=[FileAllowed(['jpg', 'png'])])
|
|
password = PasswordField('Password')
|
|
password_confirm= PasswordField('Confirm Password', validators=[EqualTo('password')])
|
|
submit = SubmitField()
|
|
|
|
def populate_for_update(self, user):
|
|
self.originalModel = user
|
|
self.submit.label.text = "Update"
|
|
self.country_id.choices = [(row.id, row.name) for row in geoUtils.queryCountryNamesWithDefault(user.country_id)]
|
|
|
|
# This is for the htmx implementation. please be careful how of there is data we first take from the database an then from the from(containing th htmx call)
|
|
if self.country_id.data:
|
|
self.city_id.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryId(self.country_id.data)]
|
|
self.state_id.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryId(self.country_id.data)]
|
|
else:
|
|
self.city_id.choices = [(row.id, row.name) for row in geoUtils.queryCityNamesWithCountryIdWithDefault(user.city_id, user.country_id)]
|
|
self.state_id.choices = [(row.id, row.name) for row in geoUtils.queryStateNamesWithCountryIdWithDefault(user.state_id, user.country_id)]
|
|
|
|
# Queries to be made in order to validate the form : If username exists
|
|
def validate_username(self, input):
|
|
if input.data != self.originalModel.username:
|
|
if (Users.query.filter(Users.username.ilike(f'%{input.data}%')).first()):
|
|
raise ValidationError('This User Name is alredy registered')
|
|
|
|
# Queries to be made in order to validate the form : If username exists
|
|
def validate_email_account(self, input):
|
|
if input.data != self.originalModel.email_account:
|
|
if (Users.query.filter(Users.email_account.ilike(f'%{input.data}%')).first()):
|
|
raise ValidationError('This E-mail is alredy registered')
|
|
|
|
class loginForm(FlaskForm): # Defines the form class to be used for the user login
|
|
email = StringField('Email', validators=[DataRequired(), Email()])
|
|
password = PasswordField('Password', validators=[DataRequired()])
|
|
remember = BooleanField('Remember Me')
|
|
submit = SubmitField('Log In')
|
|
|
|
|
|
class updateAccountForm(FlaskForm): # Defines the form class to be used for the user update
|
|
username = StringField('User Name', validators=[DataRequired(), Length(min=3, max=20)])
|
|
email_account = StringField('Email Account', validators=[DataRequired(), Email()])
|
|
email_comm = StringField('Email Communication', validators=[DataRequired(), Email()])
|
|
picture = FileField('Update Profile Picture', validators=[FileAllowed(['jpg', 'png'])])
|
|
submit = SubmitField('Update')
|
|
|
|
# Queries to be made in order to validate the form : If username exists
|
|
def validate_username(self, username):
|
|
if username.data != current_user.username:
|
|
user = Users.query.filter_by(username=username.data).first()
|
|
if user:
|
|
raise ValidationError('That username is taken please choose another one')
|
|
|
|
# Queries to be made in order to validate the form : If Email exists
|
|
def validate_email(self, email):
|
|
if email.data != current_user.email_account:
|
|
email = Users.query.filter_by(email_account=email.data).first()
|
|
if email:
|
|
raise ValidationError('That email is taken do you have an acocunt ?')
|
|
|
|
|
|
class requestResetForm(FlaskForm): # Defines the form class to be used for the reset form
|
|
email = StringField('Email', validators=[DataRequired(), Email()])
|
|
submit = SubmitField('Request Password Reset')
|
|
|
|
# Queries to be made in order to validate the form : If Email exists
|
|
def validate_email(self, email):
|
|
email = Users.query.filter_by(email_account=email.data).first()
|
|
if email is None:
|
|
raise ValidationError('There is no Account with this email your must register first.')
|
|
|
|
|
|
class resetPasswordForm(FlaskForm): # Defines the form class to be used for password reset form
|
|
password = PasswordField('Password', validators=[DataRequired()])
|
|
password_confirm = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
|
|
submit = SubmitField('Reset Password')
|
|
|
|
|
|
class updateRoleForm(FlaskForm):
|
|
id = StringField('ID', render_kw={'disabled':''})
|
|
role = StringField('Role', validators=[DataRequired(), Length(min=4, max=20)])
|
|
description = StringField('Description', validators=[DataRequired(), Length(min=4, max=200)])
|
|
submit = SubmitField()
|