WIP - create validation method for common object

This commit is contained in:
ATM john 2021-06-12 12:58:20 +02:00
parent 801f6cab2d
commit 578dc9adde
3 changed files with 61 additions and 15 deletions

View File

@ -105,6 +105,15 @@ if ($action == 'add' && !empty($permissiontoadd)) {
$error++;
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val['label'])), null, 'errors');
}
// Validation of fields values
if ($conf->global->MAIN_FEATURE_LEVEL >= 2 || !empty($conf->global->MAIN_USE_COMMON_VALIDATION)) {
if (!$error && !empty($val['validate']) && is_callable(array($object, 'validateField'))) {
if (!$object->validateField($object->fields, $key, $value)) {
$error++;
}
}
}
}
// Fill array 'array_options' with data from add form

View File

@ -123,6 +123,10 @@ abstract class CommonObject
*/
protected $table_ref_field = '';
/**
* @var array $validateFieldsErrors to store error results of ->validateField()
*/
public $validateFieldsErrors = array();
// Following vars are used by some objects only. We keep this property here in CommonObject to be able to provide common method using them.
@ -7305,6 +7309,40 @@ abstract class CommonObject
return $out;
}
/**
* clear validation message result for a field
*
* @param string $fieldKey Key of attribute to clear
*/
public function clearFieldError($fieldKey)
{
$this->error = '';
unset($this->validateFieldsErrors[$fieldKey]);
}
/**
* set validation error message a field
*
* @param string $fieldKey Key of attribute
*/
public function setFieldError($fieldKey, $msg = '')
{
$this->error = $this->validateFieldsErrors[$fieldKey] = $msg;
}
/**
* get field error message
*
* @param string $fieldKey Key of attribute
*/
public function getFieldError($fieldKey)
{
if (!empty($this->validateFieldsErrors[$fieldKey])) {
return $this->validateFieldsErrors[$fieldKey];
}
return '';
}
/**
* Return validation test result for a field
*
@ -7319,8 +7357,7 @@ abstract class CommonObject
if(!class_exists('Validate')){ require_once DOL_DOCUMENT_ROOT . '/core/class/validate.class.php'; }
// TODO : ask @eldy to know if need to use another error field to separate error msg
$this->error = ''; // error will be use for form error display so must be clear before
$this->clearFieldError($fieldKey);
if (!isset($val[$fieldKey])) {
return false;
@ -7393,7 +7430,7 @@ abstract class CommonObject
// Required test and empty value
if($required && !$validate->isNotEmptyString($fieldValue)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
}
elseif (!$required && !$validate->isNotEmptyString($fieldValue)) {
@ -7403,13 +7440,13 @@ abstract class CommonObject
// MAX Size test
if(!empty($maxSize) && !$validate->isMaxLength($fieldValue, $maxSize)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
}
// MIN Size test
if(!empty($minSize) && !$validate->isMinLength($fieldValue, $minSize)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
}
@ -7419,12 +7456,12 @@ abstract class CommonObject
if (in_array($type, array('date', 'datetime', 'timestamp'))) {
if (!$validate->isTimestamp($fieldValue)) {
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
} elseif ($type == 'duration') {
if(!$validate->isDuration($fieldValue)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}
@ -7432,35 +7469,35 @@ abstract class CommonObject
{
// is numeric
if(!$validate->isDuration($fieldValue)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}
elseif ($type == 'boolean')
{
if(!$validate->isBool($fieldValue)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}
elseif ($type == 'mail')
{
if(!$validate->isEmail($fieldValue)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
}
}
elseif ($type == 'url')
{
if(!$validate->isUrl($fieldValue)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}
elseif ($type == 'phone')
{
if (!$validate->isPhone($fieldValue)) {
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}
@ -7484,7 +7521,7 @@ abstract class CommonObject
}
if(!isInDb($value_arr, $InfoFieldList[0], $selectkey)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}
@ -7495,7 +7532,7 @@ abstract class CommonObject
$classname = $InfoFieldList[0];
$classpath = $InfoFieldList[1];
if(!$validate->isFetchable($fieldValue, $classname, $classpath)){
$this->error = $validate->error;
$this->setFieldError($fieldKey, $validate->error);
return false;
} else { return true; }
}

View File

@ -91,7 +91,7 @@ class MyObject extends CommonObject
* 'arrayofkeyval' to set a list of values if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel"). Note that type can be 'integer' or 'varchar'
* 'autofocusoncreate' to have field having the focus on a create form. Only 1 field should have this property set to 1.
* 'comment' is not used. You can store here any text of your choice. It is not used by application.
*
* 'validate' is 1 if need to validate with $this->validateField()
* Note: To have value dynamic, you can set value to 0 in definition and edit the value on the fly into the constructor.
*/