diff --git a/application/Espo/Core/Utils/Database/Orm/Converter.php b/application/Espo/Core/Utils/Database/Orm/Converter.php index 6ffc763dbe..8c0898f596 100644 --- a/application/Espo/Core/Utils/Database/Orm/Converter.php +++ b/application/Espo/Core/Utils/Database/Orm/Converter.php @@ -54,23 +54,40 @@ class Converter private $relationManager; - private $entityDefs; + /** + * @var ?array + */ + private $entityDefs = null; + /** + * @var string + */ protected $defaultFieldType = 'varchar'; + /** + * @var string + */ protected $defaultNaming = 'postfix'; + /** + * @var array + */ protected $defaultLength = [ 'varchar' => 255, 'int' => 11, ]; + /** + * @var array + */ protected $defaultValue = [ 'bool' => false, ]; /** - * params mapping: entityDefs => ORM + * Mapping entityDefs => ORM. + * + * @var array */ protected $fieldAccordances = [ 'type' => 'type', @@ -95,6 +112,9 @@ class Converter 'dependeeAttributeList' => 'dependeeAttributeList', ]; + /** + * @var array + */ protected $idParams = [ 'dbType' => 'varchar', 'len' => 24, @@ -102,6 +122,8 @@ class Converter /** * Permitted entityDefs parameters which will be copied to ormMetadata. + * + * @var string[] */ protected $permittedEntityOptions = [ 'indexes', @@ -131,7 +153,8 @@ class Converter } /** - * @return array + * @param bool $reload + * @return array */ protected function getEntityDefs($reload = false) { @@ -164,6 +187,8 @@ class Converter /** * Covert metadata > entityDefs to ORM metadata. + * + * @return array */ public function process(): array { @@ -198,6 +223,10 @@ class Converter return $ormMetadata; } + /** + * @param array $entityMetadata + * @return array + */ protected function convertEntity(string $entityType, array $entityMetadata): array { $ormMetadata = []; @@ -248,6 +277,10 @@ class Converter return $ormMetadata; } + /** + * @param array $ormMetadata + * @return array + */ protected function afterFieldsProcess(array $ormMetadata): array { foreach ($ormMetadata as $entityType => &$entityParams) { @@ -309,6 +342,10 @@ class Converter return $ormMetadata; } + /** + * @param array $ormMetadata + * @return array + */ protected function afterProcess(array $ormMetadata): array { foreach ($ormMetadata as $entityType => &$entityParams) { @@ -328,6 +365,9 @@ class Converter return $ormMetadata; } + /** + * @param array $data + */ protected function obtainForeignType(array $data, string $entityType, string $attribute): ?string { $params = $data[$entityType]['fields'][$attribute] ?? []; @@ -352,6 +392,10 @@ class Converter return $foreignParams['type'] ?? null; } + /** + * @param array $entityMetadata + * @return array + */ protected function convertFields(string $entityType, array &$entityMetadata): array { // List of unmerged fields with default field definitions in $output. @@ -421,6 +465,9 @@ class Converter /** * Correct fields definitions based on Espo\Custom\Core\Utils\Database\Orm\Fields. + * + * @param array $ormMetadata + * @return array */ protected function correctFields(string $entityType, array $ormMetadata): array { @@ -513,6 +560,11 @@ class Converter return $ormMetadata; } + /** + * @param array $attributeParams + * @param ?array $fieldTypeMetadata + * @return array|false + */ protected function convertField( string $entityType, string $attribute, @@ -559,6 +611,11 @@ class Converter return $fieldDefs; } + /** + * @param array $entityMetadata + * @param array $ormMetadata + * @return array + */ protected function convertLinks(string $entityType, array $entityMetadata, array $ormMetadata): array { if (!isset($entityMetadata['links'])) { @@ -582,6 +639,10 @@ class Converter return $relationships; } + /** + * @param array $attributeParams + * @return array + */ protected function getInitValues(array $attributeParams) { $values = []; @@ -617,6 +678,10 @@ class Converter return $values; } + /** + * @param array $ormMetadata + * @return void + */ protected function applyFullTextSearch(array &$ormMetadata, string $entityType) { if (!$this->getDatabaseHelper()->doesTableSupportFulltext(Util::toUnderScore($entityType))) { @@ -682,6 +747,11 @@ class Converter } } + /** + * @param array $ormMetadata + * @param string $entityType + * @return void + */ protected function applyIndexes(&$ormMetadata, $entityType) { if (isset($ormMetadata[$entityType]['fields'])) { @@ -715,6 +785,10 @@ class Converter } } + /** + * @param array $defs + * @return array + */ protected function createAdditionalEntityTypes(string $entityType, array $defs): array { if (empty($defs['additionalTables'])) { @@ -726,6 +800,10 @@ class Converter return $additionalDefs; } + /** + * @param array $defs + * @return array + */ protected function createRelationsEntityDefs(string $entityType, array $defs): array { $result = []; diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Base.php b/application/Espo/Core/Utils/Database/Orm/Fields/Base.php index 5a0ef3fc2f..440c0effe0 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Base.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Base.php @@ -32,11 +32,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class Base extends \Espo\Core\Utils\Database\Orm\Base { /** - * Start process Orm converting for fields. + * ORM conversion for fields. * - * @param string $itemName Field name + * @param string $itemName A field name. * @param string $entityName - * @return array + * @return array */ public function process($itemName, $entityName) { @@ -55,8 +55,13 @@ class Base extends \Espo\Core\Utils\Database\Orm\Base return $convertedDefs; } + /** + * @param string $fieldName + * @param string $entityType + * @return array + */ protected function load($fieldName, $entityType) { - + return []; } } diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Currency.php b/application/Espo/Core/Utils/Database/Orm/Fields/Currency.php index 2fb4ba28e9..164604a8e1 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Currency.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Currency.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class Currency extends Base { + /** + * @param string $fieldName + * @param string $entityType + * @return array + */ protected function load($fieldName, $entityType) { $alias = $fieldName . 'CurrencyRate'; diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Email.php b/application/Espo/Core/Utils/Database/Orm/Fields/Email.php index e2ba7ffa9c..566d70aa7e 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Email.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Email.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class Email extends Base { + /** + * @param string $fieldName + * @param string $entityType + * @return array + */ protected function load($fieldName, $entityType) { $foreignJoinAlias = "{$fieldName}{$entityType}{alias}Foreign"; diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/File.php b/application/Espo/Core/Utils/Database/Orm/Fields/File.php index 9eedfe0526..ca7b1ce1ad 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/File.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/File.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class File extends Base { + /** + * @param string $fieldName + * @param string $entityName + * @return array + */ protected function load($fieldName, $entityName) { $fieldParams = $this->getFieldParams(); @@ -58,8 +63,12 @@ class File extends Base $data[$entityName]['fields'][$fieldName.'Name']['type'] = 'varchar'; } - if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) { - $data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id']; + if ( + !empty($fieldParams['defaultAttributes']) && + array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes']) + ) { + $data[$entityName]['fields'][$fieldName.'Id']['default'] = + $fieldParams['defaultAttributes'][$fieldName.'Id']; } if (empty($fieldParams['notStorable'])) { @@ -67,16 +76,16 @@ class File extends Base $data[$entityName]['fields'][$fieldName . 'Name']['foreign'] = 'name'; $linkName = $fieldName; - $data[$entityName]['relations'] = array(); - $data[$entityName]['relations'][$linkName] = array( + $data[$entityName]['relations'] = []; + $data[$entityName]['relations'][$linkName] = [ 'type' => 'belongsTo', 'entity' => 'Attachment', 'key' => $linkName.'Id', 'foreignKey' => 'id', - 'foreign' => null - ); + 'foreign' => null, + ]; } return $data; } -} \ No newline at end of file +} diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Link.php b/application/Espo/Core/Utils/Database/Orm/Fields/Link.php index b1eb47f789..9ef0fe17bb 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Link.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Link.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class Link extends Base { + /** + * @param string $fieldName + * @param string $entityName + * @return array + */ protected function load($fieldName, $entityName) { $fieldParams = $this->getFieldParams(); @@ -63,8 +68,12 @@ class Link extends Base $data[$entityName]['fields'][$fieldName.'Id']['notStorable'] = true; } - if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) { - $data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id']; + if ( + !empty($fieldParams['defaultAttributes']) && + array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes']) + ) { + $data[$entityName]['fields'][$fieldName.'Id']['default'] = + $fieldParams['defaultAttributes'][$fieldName.'Id']; } return $data; diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/LinkMultiple.php b/application/Espo/Core/Utils/Database/Orm/Fields/LinkMultiple.php index 4c44ce37ea..1208dd4d8c 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/LinkMultiple.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/LinkMultiple.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class LinkMultiple extends Base { + /** + * @param string $fieldName + * @param string $entityName + * @return array + */ protected function load($fieldName, $entityName) { $data = [ @@ -65,12 +70,14 @@ class LinkMultiple extends Base if (array_key_exists('orderBy', $fieldParams)) { $data[$entityName]['fields'][$fieldName . 'Ids']['orderBy'] = $fieldParams['orderBy']; + if (array_key_exists('orderDirection', $fieldParams)) { $data[$entityName]['fields'][$fieldName . 'Ids']['orderDirection'] = $fieldParams['orderDirection']; } } $columns = $this->getMetadata()->get("entityDefs.{$entityName}.fields.{$fieldName}.columns"); + if (!empty($columns)) { $data[$entityName]['fields'][$fieldName . 'Columns'] = [ 'type' => 'jsonObject', diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/LinkOne.php b/application/Espo/Core/Utils/Database/Orm/Fields/LinkOne.php index 4086ad93f5..77ba7f8d03 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/LinkOne.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/LinkOne.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class LinkOne extends Base { + /** + * @param string $fieldName + * @param string $entityType + * @return array + */ protected function load($fieldName, $entityType) { $fieldParams = $this->getFieldParams(); diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/LinkParent.php b/application/Espo/Core/Utils/Database/Orm/Fields/LinkParent.php index fba6cc55e2..d8758ce62d 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/LinkParent.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/LinkParent.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class LinkParent extends Base { + /** + * @param string $fieldName + * @param string $entityName + * @return array + */ protected function load($fieldName, $entityName) { $data = [ @@ -69,11 +74,20 @@ class LinkParent extends Base $fieldParams = $this->getFieldParams(); - if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) { - $data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id']; + if ( + !empty($fieldParams['defaultAttributes']) && + array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes']) + ) { + $data[$entityName]['fields'][$fieldName.'Id']['default'] = + $fieldParams['defaultAttributes'][$fieldName.'Id']; } - if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Type', $fieldParams['defaultAttributes'])) { - $data[$entityName]['fields'][$fieldName.'Type']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Type']; + + if ( + !empty($fieldParams['defaultAttributes']) && + array_key_exists($fieldName.'Type', $fieldParams['defaultAttributes']) + ) { + $data[$entityName]['fields'][$fieldName.'Type']['default'] = + $fieldParams['defaultAttributes'][$fieldName.'Type']; } return $data; diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/PersonName.php b/application/Espo/Core/Utils/Database/Orm/Fields/PersonName.php index 83e2ae6add..eadf56d4ed 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/PersonName.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/PersonName.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class PersonName extends Base { + /** + * @param string $fieldName + * @param string $entityType + * @return array + */ protected function load($fieldName, $entityType) { $format = $this->config->get('personNameFormat'); @@ -73,6 +78,7 @@ class PersonName extends Base if (empty($fieldNameTrimmed)) { $fullList[] = "'" . $subFieldName . "'"; + continue; } @@ -172,10 +178,12 @@ class PersonName extends Base ]; } + /** + * @param string[] $fullList + */ protected function getSelect(array $fullList, ?string $alias = null): string { foreach ($fullList as &$item) { - $rowItem = trim($item, " '"); if (empty($rowItem)) { diff --git a/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php b/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php index cb6d1df730..87da8b4c5d 100644 --- a/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php +++ b/application/Espo/Core/Utils/Database/Orm/Fields/Phone.php @@ -31,6 +31,11 @@ namespace Espo\Core\Utils\Database\Orm\Fields; class Phone extends Base { + /** + * @param string $fieldName + * @param string $entityType + * @return array + */ protected function load($fieldName, $entityType) { $foreignJoinAlias = "{$fieldName}{$entityType}{alias}Foreign";