protected function mapFields(Content $content, Type $contentType)
{
$fieldMap = array();
foreach ($content->fields as $field) {
$fieldMap[$field->languageCode][] = $field;
}
$fieldDocuments = array();
foreach (array_keys($fieldMap) as $languageCode) {
$fields = array();
$fields[] = new Field('meta_language_code', $languageCode, new FieldType\StringField());
$fields[] = new Field('meta_is_main_translation', $content->versionInfo->contentInfo->mainLanguageCode === $languageCode, new FieldType\BooleanField());
$fields[] = new Field('meta_is_always_available', $content->versionInfo->contentInfo->mainLanguageCode === $languageCode && $content->versionInfo->contentInfo->alwaysAvailable, new FieldType\BooleanField());
foreach ($fieldMap[$languageCode] as $field) {
foreach ($contentType->fieldDefinitions as $fieldDefinition) {
if ($fieldDefinition->id !== $field->fieldDefinitionId) {
continue;
}
$fieldType = $this->fieldRegistry->getType($field->type);
$indexFields = $fieldType->getIndexData($field, $fieldDefinition);
foreach ($indexFields as $indexField) {
$fields[] = new Field($name = $this->fieldNameGenerator->getName($indexField->name, $fieldDefinition->identifier, $contentType->identifier), $indexField->value, $indexField->type);
if ($indexField->type instanceof FieldType\FullTextField) {
$fields[] = new Field($name . '_meta_all_' . str_replace('-', '_', $languageCode), $indexField->value, $indexField->type);
}
}
}
}
$fieldDocuments[] = new Document(array('fields' => $fields));
}
return $fieldDocuments;
}