. * * 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\Metadata; class Helper { public function __construct(private Metadata $metadata) {} /** * Get field definitions by a type in metadata, "fields" key. * * @param array $defs It can be a string or field definition from entityDefs. * @return ?array */ public function getFieldDefsByType($defs) { if (isset($defs['type'])) { return $this->metadata->get('fields.' . $defs['type']); } return null; } /** * @param array $defs * @return ?array */ public function getFieldDefsInFieldMetadata($defs) { $fieldDefsByType = $this->getFieldDefsByType($defs); if (isset($fieldDefsByType['fieldDefs'])) { return $fieldDefsByType['fieldDefs']; } return null; } /** * Get link definition defined in 'fields' metadata. * In linkDefs can be used as value (e.g. "type": "hasChildren") and/or variables (e.g. "entityName": "{entity}"). * Variables should be defined into fieldDefs (in 'entityDefs' metadata). * * @param string $entityType * @param array $defs * @return ?array */ public function getLinkDefsInFieldMeta($entityType, $defs) { $fieldDefsByType = $this->getFieldDefsByType($defs); if (!isset($fieldDefsByType['linkDefs'])) { return null; } $linkFieldDefsByType = $fieldDefsByType['linkDefs']; foreach ($linkFieldDefsByType as &$paramValue) { if (preg_match('/{(.*?)}/', $paramValue, $matches)) { if (in_array($matches[1], array_keys($defs))) { $value = $defs[$matches[1]]; } else if (strtolower($matches[1]) == 'entity') { $value = $entityType; } if (isset($value)) { $paramValue = str_replace('{'.$matches[1].'}', $value, $paramValue); } } } return $linkFieldDefsByType; } }