Add relate field validation on ListDataHandler

- Check if relate fields are valid before adding to filter_fields
- Do not add fields with missing definitions
- Do not add non-db fields
This commit is contained in:
Clemente Raposo 2022-06-17 17:31:37 +01:00
parent d949b0421f
commit 56f434a9d4

View file

@ -260,10 +260,56 @@ abstract class BaseListDataHandler
}
}
if ($type === 'relate' && !$this->isValidRelate($fieldDefinition)) {
continue;
}
$parsedFilterFields[] = $fieldName;
}
return array_diff($parsedFilterFields, $excludedRelationshipFields);
}
/**
* @param $fieldDefinition
* @return void
*/
protected function isNonDbField($fieldDefinition): bool
{
$relateBean = BeanFactory::newBean($fieldDefinition['module']);
if (empty($relateBean)) {
return true;
}
$relateFieldDef = $relateBean->field_defs[$fieldDefinition['rname']] ?? [];
$relateFieldSource = $relateFieldDef['source'] ?? '';
return empty($relateFieldDef) || $relateFieldSource === 'non-db';
}
/**
* @param $fieldDefinition
* @return bool
*/
protected function isValidRelate($fieldDefinition): bool
{
if (isset($fieldDefinition['table']) && $fieldDefinition['table'] === '') {
return false;
}
if (isset($fieldDefinition['join_name']) && $fieldDefinition['join_name'] === '') {
return false;
}
if (!empty($fieldDefinition['module']) && !empty($fieldDefinition['rname'])) {
$isNonDb = $this->isNonDbField($fieldDefinition);
if ($isNonDb === true) {
return false;
}
}
return true;
}
}