. * * 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; use Espo\ORM\Defs\Params\FieldParam; /** * @internal */ class BuilderHelper { /** * A list of copy-from-parent params for metadata -> fields. * * @var string[] */ private array $copiedDefParams = [ 'readOnly', 'disabled', FieldParam::NOT_STORABLE, '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 $field * @param array $params * @param array $defs * @return ?array * @internal */ public function getAdditionalFields(string $field, array $params, array $defs): ?array { if (!$defs) { return null; } $type = $params['type'] ?? null; if (!$type) { return null; } $typeDefs = $defs[$type] ?? null; if (!$typeDefs) { return null; } /** @var ?array $fields */ $fields = $typeDefs['fields'] ?? null; /** @var string $naming */ $naming = $typeDefs['naming'] ?? $this->defaultFieldNaming; if (!is_array($fields)) { return null; } $copiedParams = array_intersect_key($params, array_flip($this->copiedDefParams)); $output = []; foreach ($fields as $subField => $subParams) { $subName = Util::getNaming($field, $subField, $naming); $output[$subName] = array_merge($copiedParams, $subParams); // A trick to allow some fields to be combined with the main field. if (array_key_exists('detailLayoutIncompatibleFieldList', $output[$subName])) { continue; } $output[$subName]['detailLayoutIncompatibleFieldList'] = [$field]; } return $output; } }