From 88db4a50202b6508a79dcb7cfcb96ce6fe5e156c Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sun, 3 Jul 2022 16:11:08 +0300 Subject: [PATCH] default varchar max length validation --- .../Espo/Classes/FieldValidators/TextType.php | 63 +++++++++++++++++++ .../Espo/Classes/FieldValidators/UrlType.php | 2 +- .../Classes/FieldValidators/VarcharType.php | 18 ++++-- .../Espo/Resources/metadata/fields/text.json | 1 - .../Espo/Resources/metadata/fields/url.json | 1 + .../Resources/metadata/fields/varchar.json | 3 + 6 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 application/Espo/Classes/FieldValidators/TextType.php diff --git a/application/Espo/Classes/FieldValidators/TextType.php b/application/Espo/Classes/FieldValidators/TextType.php new file mode 100644 index 0000000000..7858bb6413 --- /dev/null +++ b/application/Espo/Classes/FieldValidators/TextType.php @@ -0,0 +1,63 @@ +isNotEmpty($entity, $field); + } + + public function checkMaxLength(Entity $entity, string $field, int $validationValue): bool + { + if (!$this->isNotEmpty($entity, $field)) { + return true; + } + + $value = $entity->get($field); + + if (mb_strlen($value) > $validationValue) { + return false; + } + + return true; + } + + protected function isNotEmpty(Entity $entity, string $field): bool + { + return + $entity->has($field) && + $entity->get($field) !== '' && + $entity->get($field) !== null; + } +} diff --git a/application/Espo/Classes/FieldValidators/UrlType.php b/application/Espo/Classes/FieldValidators/UrlType.php index 136b8a2ad8..240f43b92f 100644 --- a/application/Espo/Classes/FieldValidators/UrlType.php +++ b/application/Espo/Classes/FieldValidators/UrlType.php @@ -49,7 +49,7 @@ class UrlType return $this->varcharType->checkRequired($entity, $field); } - public function checkMaxLength(Entity $entity, string $field, int $validationValue): bool + public function checkMaxLength(Entity $entity, string $field, ?int $validationValue): bool { return $this->varcharType->checkMaxLength($entity, $field, $validationValue); } diff --git a/application/Espo/Classes/FieldValidators/VarcharType.php b/application/Espo/Classes/FieldValidators/VarcharType.php index f2a199cacf..98eb56d022 100644 --- a/application/Espo/Classes/FieldValidators/VarcharType.php +++ b/application/Espo/Classes/FieldValidators/VarcharType.php @@ -36,6 +36,8 @@ class VarcharType { private Metadata $metadata; + private const DEFAULT_MAX_LENGTH = 255; + public function __construct(Metadata $metadata) { $this->metadata = $metadata; @@ -46,14 +48,18 @@ class VarcharType return $this->isNotEmpty($entity, $field); } - public function checkMaxLength(Entity $entity, string $field, int $validationValue): bool + public function checkMaxLength(Entity $entity, string $field, ?int $validationValue): bool { - if ($this->isNotEmpty($entity, $field)) { - $value = $entity->get($field); + if (!$this->isNotEmpty($entity, $field)) { + return true; + } - if (mb_strlen($value) > $validationValue) { - return false; - } + $value = $entity->get($field); + + $maxLength = $validationValue ?? self::DEFAULT_MAX_LENGTH; + + if (mb_strlen($value) > $maxLength) { + return false; } return true; diff --git a/application/Espo/Resources/metadata/fields/text.json b/application/Espo/Resources/metadata/fields/text.json index 19814464f1..592fb649f7 100644 --- a/application/Espo/Resources/metadata/fields/text.json +++ b/application/Espo/Resources/metadata/fields/text.json @@ -50,7 +50,6 @@ "required", "maxLength" ], - "validatorClassName": "Espo\\Classes\\FieldValidators\\VarcharType", "filter": true, "personalData": true, "textFilter": true, diff --git a/application/Espo/Resources/metadata/fields/url.json b/application/Espo/Resources/metadata/fields/url.json index d6da94bb68..3c04b7669a 100644 --- a/application/Espo/Resources/metadata/fields/url.json +++ b/application/Espo/Resources/metadata/fields/url.json @@ -33,6 +33,7 @@ "valid" ], "mandatoryValidationList": [ + "maxLength", "valid" ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/varchar.json b/application/Espo/Resources/metadata/fields/varchar.json index e658e39616..c82d3e248b 100644 --- a/application/Espo/Resources/metadata/fields/varchar.json +++ b/application/Espo/Resources/metadata/fields/varchar.json @@ -52,6 +52,9 @@ "maxLength", "pattern" ], + "mandatoryValidationList": [ + "maxLength" + ], "filter": true, "personalData": true, "textFilter": true,