. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Utils\Metadata; use Espo\Core\Utils\Util; class BuilderHelper { /** * A list of copy-from-parent params for metadata -> 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; } }