mirror of
https://github.com/espocrm/espocrm.git
synced 2026-06-28 15:06:06 +00:00
Metadata changes: generated fields now added to metadata
This commit is contained in:
@@ -82,7 +82,6 @@ class Converter
|
||||
'len' => '24',
|
||||
);
|
||||
|
||||
|
||||
public function __construct(\Espo\Core\Utils\Metadata $metadata, \Espo\Core\Utils\File\Manager $fileManager)
|
||||
{
|
||||
$this->metadata = $metadata;
|
||||
@@ -93,7 +92,6 @@ class Converter
|
||||
$this->metadataUtils = new \Espo\Core\Utils\Metadata\Utils($this->metadata);
|
||||
}
|
||||
|
||||
|
||||
protected function getMetadata()
|
||||
{
|
||||
return $this->metadata;
|
||||
@@ -227,24 +225,9 @@ class Converter
|
||||
/** check if "fields" option exists in $fieldMeta */
|
||||
$fieldTypeMeta = $this->getMetadataUtils()->getFieldDefsByType($fieldParams);
|
||||
|
||||
if (isset($fieldTypeMeta['fields']) && is_array($fieldTypeMeta['fields'])) {
|
||||
|
||||
foreach($fieldTypeMeta['actualFields'] as $subFieldName) {
|
||||
|
||||
$subField = $this->convertActualFields($entityName, $fieldName, $fieldParams, $subFieldName, $fieldTypeMeta);
|
||||
|
||||
if (!isset($outputMeta[ $subField['naming'] ])) {
|
||||
$subFieldDefs = $this->convertField($entityName, $subField['name'], $subField['params']);
|
||||
if ($subFieldDefs !== false) {
|
||||
$outputMeta[ $subField['naming'] ] = $subFieldDefs; //push fieldDefs to the main array
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$fieldDefs = $this->convertField($entityName, $fieldName, $fieldParams, $fieldTypeMeta);
|
||||
if ($fieldDefs !== false) {
|
||||
$outputMeta[$fieldName] = $fieldDefs; //push fieldDefs to the main array
|
||||
}
|
||||
$fieldDefs = $this->convertField($entityName, $fieldName, $fieldParams, $fieldTypeMeta);
|
||||
if ($fieldDefs !== false) {
|
||||
$outputMeta[$fieldName] = $fieldDefs; //push fieldDefs to the main array
|
||||
}
|
||||
|
||||
/** check and set the linkDefs from 'fields' metadata */
|
||||
@@ -310,17 +293,12 @@ class Converter
|
||||
if (isset($scopeDefs['stream']) && $scopeDefs['stream']) {
|
||||
if (!isset($entityMeta['fields']['isFollowed'])) {
|
||||
$ormMeta[$entityName]['fields']['isFollowed'] = array(
|
||||
'type' => 'bool',
|
||||
'type' => 'varchar',
|
||||
'notStorable' => true,
|
||||
);
|
||||
}
|
||||
} //END: add a field 'isFollowed' for stream => true
|
||||
|
||||
$ormMeta[$entityName]['fields']['isEditable'] = array(
|
||||
'type' => 'bool',
|
||||
'notStorable' => true
|
||||
);
|
||||
|
||||
return $ormMeta;
|
||||
}
|
||||
|
||||
@@ -366,37 +344,6 @@ class Converter
|
||||
return $fieldDefs;
|
||||
}
|
||||
|
||||
protected function convertActualFields($entityName, $fieldName, $fieldParams, $subFieldName, $fieldTypeMeta)
|
||||
{
|
||||
$subField = array();
|
||||
|
||||
$subField['params'] = $this->getInitValues($fieldParams);
|
||||
|
||||
if (isset($fieldTypeMeta['fieldDefs'])) {
|
||||
$subField['params'] = Util::merge($subField['params'], $fieldTypeMeta['fieldDefs']);
|
||||
}
|
||||
|
||||
//if empty field name, then use the main field
|
||||
if (trim($subFieldName) == '') {
|
||||
|
||||
$subField['name'] = $fieldName;
|
||||
$subField['naming'] = $fieldName;
|
||||
|
||||
} else {
|
||||
|
||||
$namingType = isset($fieldTypeMeta['naming']) ? $fieldTypeMeta['naming'] : $this->defaultNaming;
|
||||
|
||||
$subField['name'] = $subFieldName;
|
||||
$subField['naming'] = Util::getNaming($fieldName, $subFieldName, $namingType);
|
||||
if (isset($fieldTypeMeta['fields'][$subFieldName])) {
|
||||
$subField['params'] = Util::merge($subField['params'], $fieldTypeMeta['fields'][$subFieldName]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $subField;
|
||||
}
|
||||
|
||||
protected function convertLinks($entityName, $entityMeta, $ormMeta)
|
||||
{
|
||||
if (!isset($entityMeta['links'])) {
|
||||
|
||||
@@ -35,6 +35,7 @@ class Metadata
|
||||
private $fileManager;
|
||||
private $converter;
|
||||
private $moduleConfig;
|
||||
private $metadataUtils;
|
||||
|
||||
/**
|
||||
* @var string - uses for loading default values
|
||||
@@ -109,6 +110,15 @@ class Metadata
|
||||
return $this->moduleConfig;
|
||||
}
|
||||
|
||||
protected function getMetadataUtils()
|
||||
{
|
||||
if (!isset($this->metadataUtils)) {
|
||||
$this->metadataUtils = new Metadata\Utils($this);
|
||||
}
|
||||
|
||||
return $this->metadataUtils;
|
||||
}
|
||||
|
||||
public function isCached()
|
||||
{
|
||||
if (!$this->getConfig()->get('useCache')) {
|
||||
@@ -139,6 +149,7 @@ class Metadata
|
||||
} else {
|
||||
$this->meta = $this->getUnifier()->unify($this->name, $this->paths, true);
|
||||
$this->meta = $this->setLanguageFromConfig($this->meta);
|
||||
$this->meta = $this->addAdditionalFields($this->meta);
|
||||
|
||||
if ($this->getConfig()->get('useCache')) {
|
||||
$isSaved = $this->getFileManager()->putPhpContents($this->cacheFile, $this->meta);
|
||||
@@ -197,6 +208,7 @@ class Metadata
|
||||
}
|
||||
|
||||
/**
|
||||
* todo: move to a separate file
|
||||
* Set language list and default for Settings, Preferences metadata
|
||||
*
|
||||
* @param array $data Meta
|
||||
@@ -222,6 +234,37 @@ class Metadata
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* todo: move to a separate file
|
||||
* Add additional fields defined from metadata -> fields
|
||||
*
|
||||
* @param array $meta
|
||||
*/
|
||||
protected function addAdditionalFields(array $meta)
|
||||
{
|
||||
$metaCopy = $meta;
|
||||
$definitionList = $meta['fields'];
|
||||
|
||||
foreach ($metaCopy['entityDefs'] as $entityName => $entityParams) {
|
||||
foreach ($entityParams['fields'] as $fieldName => $fieldParams) {
|
||||
|
||||
$additionalFields = $this->getMetadataUtils()->getAdditionalFieldList($fieldName, $fieldParams, $definitionList);
|
||||
if (!empty($additionalFields)) {
|
||||
//merge or add to the end of meta array
|
||||
foreach ($additionalFields as $subFieldName => $subFieldParams) {
|
||||
if (isset($entityParams['fields'][$subFieldName])) {
|
||||
$meta['entityDefs'][$entityName]['fields'][$subFieldName] = Util::merge($subFieldParams, $entityParams['fields'][$subFieldName]);
|
||||
} else {
|
||||
$meta['entityDefs'][$entityName]['fields'][$subFieldName] = $subFieldParams;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $meta;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Metadata data
|
||||
* Ex. $key1 = menu, $key2 = Account then will be created a file metadataFolder/menu/Account.json
|
||||
|
||||
@@ -22,10 +22,26 @@
|
||||
|
||||
namespace Espo\Core\Utils\Metadata;
|
||||
|
||||
use Espo\Core\Utils\Util;
|
||||
|
||||
class Utils
|
||||
{
|
||||
private $metadata;
|
||||
|
||||
protected $defaultNaming = 'postfix';
|
||||
|
||||
/**
|
||||
* List of copied params for metadata -> 'fields' from parent items
|
||||
*/
|
||||
protected $copiedDefParams = array(
|
||||
'readOnly',
|
||||
'notStorable',
|
||||
'layoutListDisabled',
|
||||
'layoutDetailDisabled',
|
||||
'layoutMassUpdateDisabled',
|
||||
'layoutFiltersDisabled',
|
||||
);
|
||||
|
||||
public function __construct(\Espo\Core\Utils\Metadata $metadata)
|
||||
{
|
||||
$this->metadata = $metadata;
|
||||
@@ -102,7 +118,41 @@ class Utils
|
||||
return $linkFieldDefsByType;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Get additional field list based on field definition in metadata 'fields'
|
||||
*
|
||||
* @param string $fieldName
|
||||
* @param array $fieldParams
|
||||
* @param array|null $definitionList
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAdditionalFieldList($fieldName, array $fieldParams, array $definitionList = null)
|
||||
{
|
||||
if (empty($fieldParams['type'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$fieldType = $fieldParams['type'];
|
||||
$fieldDefinition = isset($definitionList[$fieldType]) ? $definitionList[$fieldType] : $this->getMetadata()->get('fields.'.$fieldType);
|
||||
|
||||
?>
|
||||
if (!empty($fieldDefinition['fields']) && is_array($fieldDefinition['fields'])) {
|
||||
|
||||
$copiedParams = array_intersect_key($fieldParams, array_flip($this->copiedDefParams));
|
||||
|
||||
$additionalFields = array();
|
||||
|
||||
//add additional fields
|
||||
foreach ($fieldDefinition['fields'] as $subFieldName => $subFieldParams) {
|
||||
$namingType = isset($fieldDefinition['naming']) ? $fieldDefinition['naming'] : $this->defaultNaming;
|
||||
|
||||
$subFieldNaming = Util::getNaming($fieldName, $subFieldName, $namingType);
|
||||
$additionalFields[$subFieldNaming] = array_merge($copiedParams, $subFieldParams);
|
||||
}
|
||||
|
||||
return $additionalFields;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -27,5 +27,8 @@
|
||||
},
|
||||
"mergable":false,
|
||||
"notCreatable": false,
|
||||
"filter": true
|
||||
"filter": true,
|
||||
"fieldDefs":{
|
||||
"skip":true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,6 @@
|
||||
"notCreatable": true,
|
||||
"filter": true,
|
||||
"fieldDefs":{
|
||||
"default":""
|
||||
"notStorable":true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user