165 lines
5.4 KiB
Python
165 lines
5.4 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from paramecio2.libraries.db import corefields
|
|
from paramecio2.libraries.db.coreforms import PasswordForm
|
|
from paramecio2.libraries.i18n import I18n
|
|
from flask import session
|
|
from paramecio2.libraries.keyutils import create_key_encrypt
|
|
|
|
# Need unittest
|
|
"""Functions and classes for process forms"""
|
|
|
|
def pass_values_to_form(post, arr_form, yes_error=True, pass_values=True):
|
|
"""Function for pass a dict with form values for check using forms dict
|
|
|
|
Values dict and Forms dict need have the same key. A forms dict is maked of a serie of paramecio2 forms elements, used for check the value.
|
|
|
|
Args:
|
|
post (dict): Dict composed by a series of values. The keys need to be equal to keys of arr_form dict.
|
|
arr_form (dict): Dict composed by a series or forms objects. The keys need to be equal to keys of post dict.
|
|
yes_error (bool): Show errors in txt_error form variables.
|
|
pass_values (bool): Pass default values or values from post dict to arr_form dict items
|
|
|
|
Returns:
|
|
dict: Return arr_form dict with checked values from post dict.
|
|
|
|
"""
|
|
|
|
if pass_values:
|
|
def get_value(key):
|
|
return post[key]
|
|
|
|
else:
|
|
def get_value(key):
|
|
return arr_form[key].default_value
|
|
|
|
for key, value in arr_form.items():
|
|
|
|
post[key]=post.get(key, '')
|
|
|
|
#if arr_form[key].default_value=='':
|
|
arr_form[key].default_value=get_value(key)
|
|
|
|
if arr_form[key].field==None:
|
|
arr_form[key].field=corefields.CharField(key, 255, required=False)
|
|
|
|
# Recheck value if no set error field
|
|
if arr_form[key].field.error == None:
|
|
arr_form[key].field.check(post[key])
|
|
|
|
#arr_form[key].txt_error=""
|
|
|
|
if arr_form[key].required==True and arr_form[key].field.error==True and yes_error==True:
|
|
arr_form[key].txt_error=arr_form[key].field.txt_error
|
|
|
|
# Reset error on field.
|
|
|
|
arr_form[key].field.error=None
|
|
|
|
return arr_form
|
|
|
|
class CheckForm():
|
|
"""Simple class for make similar check to pass_values_to_form. More simple.
|
|
"""
|
|
|
|
def __init__(self):
|
|
|
|
self.error=0
|
|
|
|
def check(self, post, arr_form):
|
|
"""Simple method for pass a dict with form values for check using forms dict
|
|
|
|
Values dict and Forms dict need have the same key. A forms dict is maked of a serie of paramecio2 forms elements, used for check the value.
|
|
|
|
Args:
|
|
post (dict): Dict composed by a series of values. The keys need to be equal to keys of arr_form dict.
|
|
arr_form (dict): Dict composed by a series or forms objects. The keys need to be equal to keys of post dict.
|
|
|
|
Returns:
|
|
dict: Return arr_form dict with checked values from post dict.
|
|
|
|
"""
|
|
|
|
for k in arr_form.keys():
|
|
|
|
post[k]=post.get(k, '')
|
|
|
|
if arr_form[k].field==None:
|
|
arr_form[k].field=corefields.CharField(k, 255, required=False)
|
|
|
|
post[k]=arr_form[k].field.check(post[k])
|
|
arr_form[k].txt_error=arr_form[k].field.txt_error
|
|
|
|
if arr_form[k].field.error==True and arr_form[k].required==True:
|
|
self.error+=1
|
|
|
|
return post, arr_form
|
|
|
|
def check_form(post, arr_form, sufix_form='_error'):
|
|
|
|
error=0
|
|
error_form={}
|
|
|
|
for k in arr_form.keys():
|
|
|
|
post[k]=post.get(k, '')
|
|
|
|
if arr_form[k].field==None:
|
|
arr_form[k].field=corefields.CharField(k, 255, required=False)
|
|
|
|
post[k]=arr_form[k].field.check(post[k])
|
|
arr_form[k].txt_error=arr_form[k].field.txt_error
|
|
|
|
if arr_form[k].field.error==True and arr_form[k].required==True:
|
|
error_form['#'+k+sufix_form]=arr_form[k].txt_error
|
|
error+=1
|
|
|
|
return error, error_form, post, arr_form
|
|
|
|
def show_form(post, arr_form, t, yes_error=True, pass_values=True, modelform_tpl='forms/modelform.phtml'):
|
|
|
|
# Create csrf_token in session
|
|
|
|
generate_csrf()
|
|
|
|
if pass_values==True:
|
|
pass_values_to_form(post, arr_form, yes_error, pass_values)
|
|
|
|
return t.load_template(modelform_tpl, forms=arr_form)
|
|
|
|
#Simple Function for add repeat_password form to user model
|
|
|
|
def set_extra_forms_user(user_admin):
|
|
|
|
user_admin.fields['password'].required=True
|
|
user_admin.fields['email'].required=True
|
|
|
|
user_admin.create_forms(['username', 'email', 'password'])
|
|
|
|
user_admin.forms['repeat_password']=PasswordForm('repeat_password', '')
|
|
|
|
user_admin.forms['repeat_password'].required=True
|
|
|
|
user_admin.forms['repeat_password'].label=I18n.lang('common', 'repeat_password', 'Repeat Password')
|
|
|
|
#Function for initial values for necessary fields.
|
|
|
|
def ini_fields(fields):
|
|
pass
|
|
|
|
def csrf_token(token_id='csrf_token'):
|
|
|
|
#s=get_session()
|
|
|
|
if not 'csrf_token' in session:
|
|
session['csrf_token']=create_key_encrypt()
|
|
|
|
return '<input type="hidden" name="csrf_token" class="csrf_token" id="'+token_id+'" value="'+session['csrf_token']+'" />'
|
|
|
|
def generate_csrf():
|
|
|
|
if not 'csrf_token' in session:
|
|
session['csrf_token']=create_key_encrypt()
|
|
|
|
return session['csrf_token']
|
|
|