public function getFieldTypes(Criterion $criterion, $fieldDefinitionIdentifier, $fieldTypeIdentifier = null, $name = null)
{
$fieldMap = $this->getSearchableFieldMap();
$fieldTypeNameMap = [];
foreach ($fieldMap as $contentTypeIdentifier => $fieldIdentifierMap) {
// First check if field exists in the current ContentType, there is nothing to do if it doesn't
if (!isset($fieldIdentifierMap[$fieldDefinitionIdentifier])) {
continue;
}
// If $fieldTypeIdentifier is given it must match current field definition
if ($fieldTypeIdentifier !== null && $fieldTypeIdentifier !== $fieldIdentifierMap[$fieldDefinitionIdentifier]['field_type_identifier']) {
continue;
}
$fieldNameWithSearchType = $this->getIndexFieldName($criterion, $contentTypeIdentifier, $fieldDefinitionIdentifier, $fieldIdentifierMap[$fieldDefinitionIdentifier]['field_type_identifier'], $name, false);
$fieldNames = array_keys($fieldNameWithSearchType);
$fieldName = reset($fieldNames);
$fieldTypeNameMap[$fieldName] = $fieldNameWithSearchType[$fieldName];
}
return $fieldTypeNameMap;
}