fields. * * @var string[] */ private array $copiedDefParams = [ 'readOnly', 'disabled', 'notStorable', 'layoutListDisabled', 'layoutDetailDisabled', 'layoutMassUpdateDisabled', 'layoutFiltersDisabled', 'directAccessDisabled', 'directUpdateDisabled', 'customizationDisabled', 'importDisabled', 'exportDisabled', ]; private string $defaultFieldNaming = 'postfix'; /** * Get additional field list based on field definition in metadata 'fields'. * * @param string $fieldName * @param array $fieldParams * @param array $definitionList * @return ?array */ public function getAdditionalFieldList(string $fieldName, array $fieldParams, array $definitionList): ?array { if (empty($fieldParams['type']) || empty($definitionList)) { return null; } $fieldType = $fieldParams['type']; $fieldDefinition = $definitionList[$fieldType] ?? null; if ( isset($fieldDefinition) && !empty($fieldDefinition['fields']) && is_array($fieldDefinition['fields']) ) { $copiedParams = array_intersect_key($fieldParams, array_flip($this->copiedDefParams)); $additionalFields = []; foreach ($fieldDefinition['fields'] as $subFieldName => $subFieldParams) { $namingType = $fieldDefinition['naming'] ?? $this->defaultFieldNaming; $subFieldNaming = Util::getNaming($fieldName, $subFieldName, $namingType); $additionalFields[$subFieldNaming] = array_merge($copiedParams, $subFieldParams); } return $additionalFields; } return null; } }