metadata = $metadata; $this->fieldUtil = $fieldUtil; } public function check(Entity $entity, string $field, string $type, $data = null) : bool { if (!$data) { $data = (object) []; } $fieldType = $this->fieldUtil->getEntityTypeFieldParam($entity->getEntityType(), $field, 'type'); $validationValue = $this->fieldUtil->getEntityTypeFieldParam($entity->getEntityType(), $field, $type); $mandatoryValidationList = $this->metadata->get(['fields', $fieldType, 'mandatoryValidationList'], []); if (!in_array($type, $mandatoryValidationList)) { if (is_null($validationValue) || $validationValue === false) return true; } if (!array_key_exists($fieldType, $this->implHash)) { $this->loadImpl($fieldType); } $impl = $this->implHash[$fieldType]; $methodName = 'check' . ucfirst($type); if (!method_exists($impl, $methodName)) return true; return $impl->$methodName($entity, $field, $validationValue, $data); } protected function loadImpl(string $fieldType) { $className = $this->metadata->get(['fields', $fieldType, 'validatorClassName']); if (!$className) { $className = 'Espo\\Classes\\FieldValidators\\' . ucfirst($fieldType) . 'Type'; if (!class_exists($className)) { $className = 'Espo\\Classes\\FieldValidators\\BaseType'; } } $this->implHash[$fieldType] = new $className($this->metadata, $this->fieldUtil); } }