public function prepareFieldDefinition(array &$fields)
{
for ($i = 0; $i < count($fields); $i++) {
$key = array_keys($fields)[$i];
$field = $fields[$key];
if (is_numeric($key) && !$field instanceof Field) {
if (!$this->objectDefinition->getField($field)) {
throw new \InvalidArgumentException(sprintf('Field %s not found', $field));
}
$newItem = clone $this->objectDefinition->getField($field);
if ($newItem) {
$newItem = $newItem->toArray();
} else {
continue;
}
if (!isset($newItem['label'])) {
$newItem['label'] = $field;
}
$fields = array_merge(array_slice($fields, 0, $i), array($field => $newItem), array_slice($fields, $i + 1));
$i = -1;
}
}
foreach ($fields as $key => &$field) {
if ($field instanceof Field) {
continue;
}
if (!is_array($field)) {
continue;
}
$fieldName = $key;
$objectDefinition = $this->objectDefinition;
if (strpos($key, '.')) {
list($objectName, $fieldName) = explode('.', $key);
if (!$objectDefinition->getField($objectName)) {
throw new \RuntimeException("Relation `{$objectName}` (`{$key}`) in object {$objectDefinition->getKey()} not found.");
}
$foreignObjectName = $objectDefinition->getField($objectName)->getObject();
$objectDefinition = $this->jarves->getConfigs()->getObject($foreignObjectName);
if (!$objectDefinition) {
throw new \RuntimeException("Object {$foreignObjectName} not found, used in field {$this->objectDefinition->getKey()} {$key}");
}
}
if ($oField = $objectDefinition->getField($fieldName)) {
$field = array_merge($oField->toArray(), $field);
}
if (isset($field['children'])) {
$this->prepareFieldDefinition($field['children']);
}
}
}